diff --git a/src/test/java/org/springframework/data/couchbase/domain/FluxTest.java b/src/test/java/org/springframework/data/couchbase/domain/FluxTest.java index f6ca822a4..634f4c9a7 100644 --- a/src/test/java/org/springframework/data/couchbase/domain/FluxTest.java +++ b/src/test/java/org/springframework/data/couchbase/domain/FluxTest.java @@ -14,6 +14,7 @@ import org.springframework.data.couchbase.util.Capabilities; import org.springframework.data.couchbase.util.ClusterType; import org.springframework.data.couchbase.util.IgnoreWhen; +import org.springframework.data.util.Pair; import reactor.core.publisher.Flux; import reactor.core.publisher.Mono; import reactor.core.publisher.ParallelFlux; @@ -130,6 +131,26 @@ public void cbse() { assertEquals(0, airports.size(), "should have been all deleted"); } + @Test + @IgnoreWhen(missesCapabilities = { Capabilities.QUERY }, clusterTypes = ClusterType.MOCKED) + public void pairIdAndResult() { + LinkedList list = new LinkedList<>(); + Airport a = new Airport(UUID.randomUUID().toString(), "iata", "lowp"); + for (int i = 0; i < 5; i++) { + list.add(a.withId(UUID.randomUUID().toString())); + } + Flux af = Flux.fromIterable(list).concatMap((entity) -> airportRepository.save(entity)); + List saved = af.collectList().block(); + System.out.println("results.size() : " + saved.size()); + Flux>> pairFlux = Flux.fromIterable(list) + .map((airport) -> Pair.of(airport.getId(), airportRepository.findById(airport.getId()))); + List>> airportPairs = pairFlux.collectList().block(); + for (Pair> airportPair : airportPairs) { + System.out.println("id: " + airportPair.getFirst() + " airport: " + airportPair.getSecond().block()); + } + + } + @Test public void flatMapCB() throws Exception { System.out.println("Start flatMapCB"); diff --git a/src/test/java/org/springframework/data/couchbase/domain/User.java b/src/test/java/org/springframework/data/couchbase/domain/User.java index 6fa53f7b2..ac2b92d63 100644 --- a/src/test/java/org/springframework/data/couchbase/domain/User.java +++ b/src/test/java/org/springframework/data/couchbase/domain/User.java @@ -24,6 +24,7 @@ import org.springframework.data.annotation.LastModifiedBy; import org.springframework.data.annotation.LastModifiedDate; import org.springframework.data.annotation.PersistenceConstructor; +import org.springframework.data.annotation.Transient; import org.springframework.data.annotation.Version; import org.springframework.data.couchbase.core.mapping.Document; @@ -41,6 +42,8 @@ public class User extends ComparableEntity { @Id private String id; private String firstname; private String lastname; + @Transient + private String transientInfo; @CreatedBy private String createdBy; @CreatedDate private long createdDate; @LastModifiedBy private String lastModifiedBy; @@ -94,4 +97,10 @@ public int hashCode() { return Objects.hash(id, firstname, lastname); } + public String getTransientInfo(){ + return transientInfo; + } + public void setTransientInfo(String something) { + transientInfo = something; + } } diff --git a/src/test/java/org/springframework/data/couchbase/domain/UserRepository.java b/src/test/java/org/springframework/data/couchbase/domain/UserRepository.java index 18b334d06..229ae00c0 100644 --- a/src/test/java/org/springframework/data/couchbase/domain/UserRepository.java +++ b/src/test/java/org/springframework/data/couchbase/domain/UserRepository.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2020 the original author or authors + * Copyright 2012-2021 the original author or authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -17,7 +17,9 @@ package org.springframework.data.couchbase.domain; import java.util.List; +import java.util.stream.Stream; +import com.couchbase.client.java.query.QueryScanConsistency; import org.springframework.data.couchbase.repository.CouchbaseRepository; import org.springframework.data.couchbase.repository.Query; import org.springframework.data.couchbase.repository.ScanConsistency; @@ -25,7 +27,6 @@ import org.springframework.stereotype.Repository; import com.couchbase.client.java.json.JsonArray; -import com.couchbase.client.java.query.QueryScanConsistency; /** * User Repository for tests @@ -34,11 +35,13 @@ * @author Michael Reiche */ @Repository -@ScanConsistency(query = QueryScanConsistency.REQUEST_PLUS) +@ScanConsistency(query=QueryScanConsistency.REQUEST_PLUS) public interface UserRepository extends CouchbaseRepository { List findByFirstname(String firstname); + Stream findByLastname(String lastname); + List findByFirstnameIn(String... firstnames); List findByFirstnameIn(JsonArray firstnames); @@ -54,5 +57,4 @@ public interface UserRepository extends CouchbaseRepository { List findByIdIsNotNullAndFirstnameEquals(String firstname); List findByVersionEqualsAndFirstnameEquals(Long version, String firstname); - } diff --git a/src/test/java/org/springframework/data/couchbase/repository/CouchbaseRepositoryQueryIntegrationTests.java b/src/test/java/org/springframework/data/couchbase/repository/CouchbaseRepositoryQueryIntegrationTests.java index 5b5eda212..cffeeaee2 100644 --- a/src/test/java/org/springframework/data/couchbase/repository/CouchbaseRepositoryQueryIntegrationTests.java +++ b/src/test/java/org/springframework/data/couchbase/repository/CouchbaseRepositoryQueryIntegrationTests.java @@ -35,6 +35,7 @@ import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.Future; +import java.util.Optional; import java.util.stream.Collectors; import org.junit.jupiter.api.BeforeEach; @@ -354,11 +355,20 @@ public void saveNotBounded() { assertNull(airport2, "airport2 should have likely been null at least once"); } + @Test + public void testTransient() { + User user = new User("1", "Dave", "Wilson"); + user.setTransientInfo("something"); + userRepository.save(user); + Optional foundUser = userRepository.findById(user.getId()); + assertEquals(null, foundUser.get().getTransientInfo()); + userRepository.delete(user); + } + @Test public void testCas() { User user = new User("1", "Dave", "Wilson"); userRepository.save(user); - userRepository.findByFirstname("Dave"); user.setVersion(user.getVersion() - 1); assertThrows(DataIntegrityViolationException.class, () -> userRepository.save(user)); user.setVersion(0); @@ -366,6 +376,21 @@ public void testCas() { userRepository.delete(user); } + @Test + public void testStreamQuery() { + User user1 = new User("1", "Dave", "Wilson"); + User user2 = new User("2", "Brian", "Wilson"); + + userRepository.save(user1); + userRepository.save(user2); + List users = userRepository.findByLastname("Wilson").collect(Collectors.toList()); + assertEquals(2,users.size()); + assertTrue(users.contains(user1)); + assertTrue(users.contains(user2)); + userRepository.delete(user1); + userRepository.delete(user2); + } + @Test public void testExpiryAnnotation() { UserAnnotated user = new UserAnnotated("1", "Dave", "Wilson");