Skip to content

Commit 4265e6a

Browse files
committed
Adapt returned Publisher in ReactiveSearchBasedCouchbaseQuery and add tests. Minor cleanup.
Signed-off-by: Emilien Bevierre <emilien.bevierre@couchbase.com>
1 parent 415acbd commit 4265e6a

6 files changed

Lines changed: 263 additions & 125 deletions

File tree

src/main/java/org/springframework/data/couchbase/repository/ScanConsistency.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,16 +15,16 @@
1515
*/
1616
package org.springframework.data.couchbase.repository;
1717

18+
import com.couchbase.client.java.analytics.AnalyticsScanConsistency;
19+
import com.couchbase.client.java.query.QueryScanConsistency;
20+
import com.couchbase.client.java.search.SearchScanConsistency;
21+
1822
import java.lang.annotation.Documented;
1923
import java.lang.annotation.ElementType;
2024
import java.lang.annotation.Retention;
2125
import java.lang.annotation.RetentionPolicy;
2226
import java.lang.annotation.Target;
2327

24-
import com.couchbase.client.java.analytics.AnalyticsScanConsistency;
25-
import com.couchbase.client.java.query.QueryScanConsistency;
26-
import com.couchbase.client.java.search.SearchScanConsistency;
27-
2828
/**
2929
* Scan Consistency Annotation
3030
*

src/main/java/org/springframework/data/couchbase/repository/query/ReactiveSearchBasedCouchbaseQuery.java

Lines changed: 17 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -15,13 +15,13 @@
1515
*/
1616
package org.springframework.data.couchbase.repository.query;
1717

18+
import org.reactivestreams.Publisher;
1819
import org.springframework.data.couchbase.core.ReactiveCouchbaseOperations;
1920
import org.springframework.data.couchbase.core.ReactiveFindBySearchOperation;
2021
import org.springframework.data.domain.Pageable;
2122
import org.springframework.data.repository.query.ParametersParameterAccessor;
2223
import org.springframework.data.repository.query.RepositoryQuery;
2324
import org.springframework.data.repository.query.ResultProcessor;
24-
import org.springframework.data.repository.util.ReactiveWrapperConverters;
2525
import org.springframework.util.Assert;
2626

2727
import org.springframework.data.couchbase.repository.Search;
@@ -31,6 +31,9 @@
3131
import com.couchbase.client.java.search.SearchRequest;
3232
import com.couchbase.client.java.search.SearchScanConsistency;
3333

34+
import reactor.core.publisher.Flux;
35+
import reactor.core.publisher.Mono;
36+
3437
/**
3538
* Reactive {@link RepositoryQuery} implementation for FTS {@link Search}-annotated methods.
3639
* <p>
@@ -73,16 +76,21 @@ public ReactiveSearchBasedCouchbaseQuery(ReactiveCouchbaseQueryMethod method,
7376
public Object execute(Object[] parameters) {
7477
ReactiveCouchbaseParameterAccessor accessor = new ReactiveCouchbaseParameterAccessor(method, parameters);
7578

76-
return accessor.resolveParameters().flatMapMany(resolvedAccessor -> {
77-
ResultProcessor processor = method.getResultProcessor().withDynamicProjection(resolvedAccessor);
78-
SearchRepositoryQuerySupport.validateSort(resolvedAccessor);
79+
if (method.isCollectionQuery()) {
80+
return accessor.resolveParameters().flatMapMany(resolvedAccessor -> Flux.from(doExecute(resolvedAccessor)));
81+
}
82+
return accessor.resolveParameters().flatMap(resolvedAccessor -> Mono.from(doExecute(resolvedAccessor)));
83+
}
84+
85+
private Publisher<?> doExecute(ParametersParameterAccessor resolvedAccessor) {
86+
ResultProcessor processor = method.getResultProcessor().withDynamicProjection(resolvedAccessor);
87+
SearchRepositoryQuerySupport.validateSort(resolvedAccessor);
7988

80-
String resolvedQuery = SearchBasedCouchbaseQuery.resolveParameters(searchQueryTemplate, resolvedAccessor);
81-
SearchRequest request = SearchRequest.create(SearchQuery.queryString(resolvedQuery));
82-
Object result = executeDependingOnType(resolvedAccessor, request);
89+
String resolvedQuery = SearchBasedCouchbaseQuery.resolveParameters(searchQueryTemplate, resolvedAccessor);
90+
SearchRequest request = SearchRequest.create(SearchQuery.queryString(resolvedQuery));
91+
Object result = executeDependingOnType(resolvedAccessor, request);
8392

84-
return ReactiveWrapperConverters.toWrapper(processor.processResult(result), reactor.core.publisher.Flux.class);
85-
});
93+
return (Publisher<?>) processor.processResult(result);
8694
}
8795

8896
@Override

src/test/java/org/springframework/data/couchbase/core/ExecutableFindBySearchOperationTests.java

Lines changed: 0 additions & 107 deletions
This file was deleted.

src/test/java/org/springframework/data/couchbase/core/SearchResultTests.java

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,14 +15,16 @@
1515
*/
1616
package org.springframework.data.couchbase.core;
1717

18-
import static org.junit.jupiter.api.Assertions.*;
18+
import org.junit.jupiter.api.Test;
1919

2020
import java.util.Arrays;
2121
import java.util.Collections;
2222
import java.util.List;
23-
import java.util.Map;
2423

25-
import org.junit.jupiter.api.Test;
24+
import static org.junit.jupiter.api.Assertions.assertEquals;
25+
import static org.junit.jupiter.api.Assertions.assertNotNull;
26+
import static org.junit.jupiter.api.Assertions.assertNull;
27+
import static org.junit.jupiter.api.Assertions.assertTrue;
2628

2729
/**
2830
* Unit tests for {@link SearchResult}.

0 commit comments

Comments
 (0)