diff --git a/pom.xml b/pom.xml
index 5e1661471..0c2a65af4 100644
--- a/pom.xml
+++ b/pom.xml
@@ -197,6 +197,14 @@
${kotlin}
test
+
+
+ org.awaitility
+ awaitility
+ 4.0.3
+ test
+
+
diff --git a/src/main/java/org/springframework/data/couchbase/core/ExecutableExistsByIdOperation.java b/src/main/java/org/springframework/data/couchbase/core/ExecutableExistsByIdOperation.java
index a5b44efa3..75185f521 100644
--- a/src/main/java/org/springframework/data/couchbase/core/ExecutableExistsByIdOperation.java
+++ b/src/main/java/org/springframework/data/couchbase/core/ExecutableExistsByIdOperation.java
@@ -18,6 +18,9 @@
import java.util.Collection;
import java.util.Map;
+import org.springframework.data.couchbase.core.support.OneAndAllExists;
+import org.springframework.data.couchbase.core.support.WithCollection;
+
public interface ExecutableExistsByIdOperation {
/**
@@ -25,7 +28,7 @@ public interface ExecutableExistsByIdOperation {
*/
ExecutableExistsById existsById();
- interface TerminatingExistsById {
+ interface TerminatingExistsById extends OneAndAllExists {
/**
* Performs the operation on the ID given.
@@ -45,7 +48,7 @@ interface TerminatingExistsById {
}
- interface ExistsByIdWithCollection extends TerminatingExistsById {
+ interface ExistsByIdWithCollection extends TerminatingExistsById, WithCollection {
/**
* Allows to specify a different collection than the default one configured.
diff --git a/src/main/java/org/springframework/data/couchbase/core/ExecutableFindByAnalyticsOperation.java b/src/main/java/org/springframework/data/couchbase/core/ExecutableFindByAnalyticsOperation.java
index ebe4e9a73..20962172a 100644
--- a/src/main/java/org/springframework/data/couchbase/core/ExecutableFindByAnalyticsOperation.java
+++ b/src/main/java/org/springframework/data/couchbase/core/ExecutableFindByAnalyticsOperation.java
@@ -19,12 +19,15 @@
import java.util.Optional;
import java.util.stream.Stream;
-import com.couchbase.client.java.analytics.AnalyticsScanConsistency;
-import com.couchbase.client.java.query.QueryScanConsistency;
import org.springframework.dao.IncorrectResultSizeDataAccessException;
import org.springframework.data.couchbase.core.query.AnalyticsQuery;
+import org.springframework.data.couchbase.core.support.OneAndAll;
+import org.springframework.data.couchbase.core.support.WithAnalyticsConsistency;
+import org.springframework.data.couchbase.core.support.WithAnalyticsQuery;
import org.springframework.lang.Nullable;
+import com.couchbase.client.java.analytics.AnalyticsScanConsistency;
+
public interface ExecutableFindByAnalyticsOperation {
/**
@@ -34,7 +37,7 @@ public interface ExecutableFindByAnalyticsOperation {
*/
ExecutableFindByAnalytics findByAnalytics(Class domainType);
- interface TerminatingFindByAnalytics {
+ interface TerminatingFindByAnalytics extends OneAndAll {
/**
* Get exactly zero or one result.
@@ -102,7 +105,7 @@ default Optional first() {
}
- interface FindByAnalyticsWithQuery extends TerminatingFindByAnalytics {
+ interface FindByAnalyticsWithQuery extends TerminatingFindByAnalytics, WithAnalyticsQuery {
/**
* Set the filter for the analytics query to be used.
@@ -114,6 +117,7 @@ interface FindByAnalyticsWithQuery extends TerminatingFindByAnalytics {
}
+ @Deprecated
interface FindByAnalyticsConsistentWith extends FindByAnalyticsWithQuery {
/**
@@ -121,10 +125,22 @@ interface FindByAnalyticsConsistentWith extends FindByAnalyticsWithQuery {
*
* @param scanConsistency the custom scan consistency to use for this analytics query.
*/
+ @Deprecated
FindByAnalyticsWithQuery consistentWith(AnalyticsScanConsistency scanConsistency);
}
- interface ExecutableFindByAnalytics extends FindByAnalyticsConsistentWith {}
+ interface FindByAnalyticsWithConsistency extends FindByAnalyticsConsistentWith, WithAnalyticsConsistency {
+
+ /**
+ * Allows to override the default scan consistency.
+ *
+ * @param scanConsistency the custom scan consistency to use for this analytics query.
+ */
+ FindByAnalyticsConsistentWith withConsistency(AnalyticsScanConsistency scanConsistency);
+
+ }
+
+ interface ExecutableFindByAnalytics extends FindByAnalyticsWithConsistency {}
}
diff --git a/src/main/java/org/springframework/data/couchbase/core/ExecutableFindByAnalyticsOperationSupport.java b/src/main/java/org/springframework/data/couchbase/core/ExecutableFindByAnalyticsOperationSupport.java
index 2a3568a7c..d0e517136 100644
--- a/src/main/java/org/springframework/data/couchbase/core/ExecutableFindByAnalyticsOperationSupport.java
+++ b/src/main/java/org/springframework/data/couchbase/core/ExecutableFindByAnalyticsOperationSupport.java
@@ -15,11 +15,10 @@
*/
package org.springframework.data.couchbase.core;
-import org.springframework.data.couchbase.core.ReactiveFindByAnalyticsOperationSupport.ReactiveFindByAnalyticsSupport;
-
import java.util.List;
import java.util.stream.Stream;
+import org.springframework.data.couchbase.core.ReactiveFindByAnalyticsOperationSupport.ReactiveFindByAnalyticsSupport;
import org.springframework.data.couchbase.core.query.AnalyticsQuery;
import com.couchbase.client.java.analytics.AnalyticsScanConsistency;
@@ -79,10 +78,16 @@ public TerminatingFindByAnalytics matching(final AnalyticsQuery query) {
}
@Override
+ @Deprecated
public FindByAnalyticsWithQuery consistentWith(final AnalyticsScanConsistency scanConsistency) {
return new ExecutableFindByAnalyticsSupport<>(template, domainType, query, scanConsistency);
}
+ @Override
+ public FindByAnalyticsWithConsistency withConsistency(final AnalyticsScanConsistency scanConsistency) {
+ return new ExecutableFindByAnalyticsSupport<>(template, domainType, query, scanConsistency);
+ }
+
@Override
public Stream stream() {
return reactiveSupport.all().toStream();
diff --git a/src/main/java/org/springframework/data/couchbase/core/ExecutableFindByIdOperation.java b/src/main/java/org/springframework/data/couchbase/core/ExecutableFindByIdOperation.java
index 04cd58806..ba6fee1fd 100644
--- a/src/main/java/org/springframework/data/couchbase/core/ExecutableFindByIdOperation.java
+++ b/src/main/java/org/springframework/data/couchbase/core/ExecutableFindByIdOperation.java
@@ -17,6 +17,10 @@
import java.util.Collection;
+import org.springframework.data.couchbase.core.support.OneAndAllId;
+import org.springframework.data.couchbase.core.support.WithCollection;
+import org.springframework.data.couchbase.core.support.WithProjectionId;
+
public interface ExecutableFindByIdOperation {
/**
@@ -26,7 +30,7 @@ public interface ExecutableFindByIdOperation {
*/
ExecutableFindById findById(Class domainType);
- interface TerminatingFindById {
+ interface TerminatingFindById extends OneAndAllId {
/**
* Finds one document based on the given ID.
@@ -46,7 +50,7 @@ interface TerminatingFindById {
}
- interface FindByIdWithCollection extends TerminatingFindById {
+ interface FindByIdWithCollection extends TerminatingFindById, WithCollection {
/**
* Allows to specify a different collection than the default one configured.
@@ -57,7 +61,7 @@ interface FindByIdWithCollection extends TerminatingFindById {
}
- interface FindByIdWithProjection extends FindByIdWithCollection {
+ interface FindByIdWithProjection extends FindByIdWithCollection, WithProjectionId {
/**
* Load only certain fields for the document.
diff --git a/src/main/java/org/springframework/data/couchbase/core/ExecutableFindByIdOperationSupport.java b/src/main/java/org/springframework/data/couchbase/core/ExecutableFindByIdOperationSupport.java
index 8f8ca26a6..caaa7c928 100644
--- a/src/main/java/org/springframework/data/couchbase/core/ExecutableFindByIdOperationSupport.java
+++ b/src/main/java/org/springframework/data/couchbase/core/ExecutableFindByIdOperationSupport.java
@@ -15,12 +15,11 @@
*/
package org.springframework.data.couchbase.core;
-import org.springframework.data.couchbase.core.ReactiveFindByIdOperationSupport.ReactiveFindByIdSupport;
-
import java.util.Arrays;
import java.util.Collection;
import java.util.List;
+import org.springframework.data.couchbase.core.ReactiveFindByIdOperationSupport.ReactiveFindByIdSupport;
import org.springframework.util.Assert;
public class ExecutableFindByIdOperationSupport implements ExecutableFindByIdOperation {
diff --git a/src/main/java/org/springframework/data/couchbase/core/ExecutableFindByQueryOperation.java b/src/main/java/org/springframework/data/couchbase/core/ExecutableFindByQueryOperation.java
index 883b6e91f..39e6c990e 100644
--- a/src/main/java/org/springframework/data/couchbase/core/ExecutableFindByQueryOperation.java
+++ b/src/main/java/org/springframework/data/couchbase/core/ExecutableFindByQueryOperation.java
@@ -21,6 +21,13 @@
import org.springframework.dao.IncorrectResultSizeDataAccessException;
import org.springframework.data.couchbase.core.query.Query;
+import org.springframework.data.couchbase.core.query.QueryCriteriaDefinition;
+import org.springframework.data.couchbase.core.support.OneAndAll;
+import org.springframework.data.couchbase.core.support.WithCollection;
+import org.springframework.data.couchbase.core.support.WithConsistency;
+import org.springframework.data.couchbase.core.support.WithDistinct;
+import org.springframework.data.couchbase.core.support.WithProjection;
+import org.springframework.data.couchbase.core.support.WithQuery;
import org.springframework.lang.Nullable;
import com.couchbase.client.java.query.QueryScanConsistency;
@@ -34,7 +41,7 @@ public interface ExecutableFindByQueryOperation {
*/
ExecutableFindByQuery findByQuery(Class domainType);
- interface TerminatingFindByQuery {
+ interface TerminatingFindByQuery extends OneAndAll {
/**
* Get exactly zero or one result.
*
@@ -107,7 +114,7 @@ default Optional first() {
* @author Christoph Strobl
* @since 2.0
*/
- interface FindByQueryWithQuery extends TerminatingFindByQuery {
+ interface FindByQueryWithQuery extends TerminatingFindByQuery, WithQuery {
/**
* Set the filter for the query to be used.
@@ -117,30 +124,90 @@ interface FindByQueryWithQuery extends TerminatingFindByQuery {
*/
TerminatingFindByQuery matching(Query query);
+ /**
+ * Set the filter {@link QueryCriteriaDefinition criteria} to be used.
+ *
+ * @param criteria must not be {@literal null}.
+ * @return new instance of {@link ExecutableFindByQuery}.
+ * @throws IllegalArgumentException if criteria is {@literal null}.
+ */
+ default TerminatingFindByQuery matching(QueryCriteriaDefinition criteria) {
+ return matching(Query.query(criteria));
+ }
+
+ }
+
+ interface FindByQueryInCollection extends FindByQueryWithQuery, WithCollection {
+
+ /**
+ * Allows to override the default scan consistency.
+ *
+ * @param collection the collection to use for this query.
+ */
+ FindByQueryWithQuery inCollection(String collection);
+
}
- interface FindByQueryConsistentWith extends FindByQueryWithQuery {
+ @Deprecated
+ interface FindByQueryConsistentWith extends FindByQueryInCollection {
/**
* Allows to override the default scan consistency.
*
* @param scanConsistency the custom scan consistency to use for this query.
*/
- FindByQueryConsistentWith consistentWith(QueryScanConsistency scanConsistency);
+ @Deprecated
+ FindByQueryInCollection consistentWith(QueryScanConsistency scanConsistency);
}
- interface FindByQueryInCollection extends FindByQueryConsistentWith {
+ interface FindByQueryWithConsistency extends FindByQueryConsistentWith, WithConsistency {
/**
* Allows to override the default scan consistency.
*
- * @param collection the collection to use for this query.
+ * @param scanConsistency the custom scan consistency to use for this query.
+ */
+ FindByQueryConsistentWith withConsistency(QueryScanConsistency scanConsistency);
+
+ }
+
+ /**
+ * Result type override (Optional).
+ */
+ interface FindByQueryWithProjection extends FindByQueryWithConsistency {
+
+ /**
+ * Define the target type fields should be mapped to.
+ * Skip this step if you are anyway only interested in the original domain type.
+ *
+ * @param returnType must not be {@literal null}.
+ * @return new instance of {@link FindByQueryWithProjection}.
+ * @throws IllegalArgumentException if returnType is {@literal null}.
+ */
+ FindByQueryWithConsistency as(Class returnType);
+ }
+
+ /**
+ * Distinct Find support.
+ */
+ interface FindByQueryWithDistinct extends FindByQueryWithProjection, WithDistinct {
+
+ /**
+ * Finds the distinct values for a specified {@literal field} across a single collection
+ *
+ * @param distinctFields name of the field. Must not be {@literal null}.
+ * @return new instance of {@link ExecutableFindByQuery}.
+ * @throws IllegalArgumentException if field is {@literal null}.
*/
- FindByQueryInCollection inCollection(String collection);
+ FindByQueryWithProjection distinct(String[] distinctFields);
}
- interface ExecutableFindByQuery extends FindByQueryInCollection {}
+ /**
+ * {@link ExecutableFindByQuery} provides methods for constructing lookup operations in a fluent way.
+ */
+
+ interface ExecutableFindByQuery extends FindByQueryWithDistinct {}
}
diff --git a/src/main/java/org/springframework/data/couchbase/core/ExecutableFindByQueryOperationSupport.java b/src/main/java/org/springframework/data/couchbase/core/ExecutableFindByQueryOperationSupport.java
index a5c4838c1..ee4908984 100644
--- a/src/main/java/org/springframework/data/couchbase/core/ExecutableFindByQueryOperationSupport.java
+++ b/src/main/java/org/springframework/data/couchbase/core/ExecutableFindByQueryOperationSupport.java
@@ -20,6 +20,7 @@
import org.springframework.data.couchbase.core.ReactiveFindByQueryOperationSupport.ReactiveFindByQuerySupport;
import org.springframework.data.couchbase.core.query.Query;
+import org.springframework.util.Assert;
import com.couchbase.client.java.query.QueryScanConsistency;
@@ -41,28 +42,33 @@ public ExecutableFindByQueryOperationSupport(final CouchbaseTemplate template) {
@Override
public ExecutableFindByQuery findByQuery(final Class domainType) {
- return new ExecutableFindByQuerySupport<>(template, domainType, ALL_QUERY, QueryScanConsistency.NOT_BOUNDED,
- "_default._default");
+ return new ExecutableFindByQuerySupport(template, domainType, domainType, ALL_QUERY,
+ QueryScanConsistency.NOT_BOUNDED, null, null);
}
static class ExecutableFindByQuerySupport implements ExecutableFindByQuery {
private final CouchbaseTemplate template;
- private final Class domainType;
+ private final Class> domainType;
+ private final Class returnType;
private final Query query;
private final ReactiveFindByQuerySupport reactiveSupport;
private final QueryScanConsistency scanConsistency;
private final String collection;
+ private final String[] distinctFields;
- ExecutableFindByQuerySupport(final CouchbaseTemplate template, final Class domainType, final Query query,
- final QueryScanConsistency scanConsistency, final String collection) {
+ ExecutableFindByQuerySupport(final CouchbaseTemplate template, final Class> domainType, final Class returnType,
+ final Query query, final QueryScanConsistency scanConsistency, final String collection,
+ final String[] distinctFields) {
this.template = template;
this.domainType = domainType;
+ this.returnType = returnType;
this.query = query;
- this.reactiveSupport = new ReactiveFindByQuerySupport(template.reactive(), domainType, query, scanConsistency,
- collection);
+ this.reactiveSupport = new ReactiveFindByQuerySupport(template.reactive(), domainType, returnType, query,
+ scanConsistency, collection, distinctFields);
this.scanConsistency = scanConsistency;
this.collection = collection;
+ this.distinctFields = distinctFields;
}
@Override
@@ -88,17 +94,42 @@ public TerminatingFindByQuery matching(final Query query) {
} else {
scanCons = scanConsistency;
}
- return new ExecutableFindByQuerySupport<>(template, domainType, query, scanCons, collection);
+ return new ExecutableFindByQuerySupport<>(template, domainType, returnType, query, scanCons, collection,
+ distinctFields);
}
@Override
- public FindByQueryConsistentWith consistentWith(final QueryScanConsistency scanConsistency) {
- return new ExecutableFindByQuerySupport<>(template, domainType, query, scanConsistency, collection);
+ @Deprecated
+ public FindByQueryInCollection consistentWith(final QueryScanConsistency scanConsistency) {
+ return new ExecutableFindByQuerySupport<>(template, domainType, returnType, query, scanConsistency, collection,
+ distinctFields);
}
@Override
- public FindByQueryInCollection inCollection(final String collection) {
- return new ExecutableFindByQuerySupport<>(template, domainType, query, scanConsistency, collection);
+ public FindByQueryConsistentWith withConsistency(final QueryScanConsistency scanConsistency) {
+ return new ExecutableFindByQuerySupport<>(template, domainType, returnType, query, scanConsistency, collection,
+ distinctFields);
+ }
+
+ @Override
+ public FindByQueryWithConsistency inCollection(final String collection) {
+ Assert.hasText(collection, "Collection must not be null nor empty.");
+ return new ExecutableFindByQuerySupport<>(template, domainType, returnType, query, scanConsistency, collection,
+ distinctFields);
+ }
+
+ @Override
+ public FindByQueryWithConsistency as(final Class resturnType) {
+ Assert.notNull(resturnType, "returnType must not be null!");
+ return new ExecutableFindByQuerySupport<>(template, domainType, resturnType, query, scanConsistency, collection,
+ distinctFields);
+ }
+
+ @Override
+ public FindByQueryWithProjection distinct(final String[] distinctFields) {
+ Assert.notNull(distinctFields, "distinctFields must not be null!");
+ return new ExecutableFindByQuerySupport<>(template, domainType, returnType, query, scanConsistency, collection,
+ distinctFields);
}
@Override
@@ -115,7 +146,6 @@ public long count() {
public boolean exists() {
return count() > 0;
}
-
}
}
diff --git a/src/main/java/org/springframework/data/couchbase/core/ExecutableFindFromReplicasByIdOperation.java b/src/main/java/org/springframework/data/couchbase/core/ExecutableFindFromReplicasByIdOperation.java
index 96897e94e..bc744bceb 100644
--- a/src/main/java/org/springframework/data/couchbase/core/ExecutableFindFromReplicasByIdOperation.java
+++ b/src/main/java/org/springframework/data/couchbase/core/ExecutableFindFromReplicasByIdOperation.java
@@ -17,11 +17,14 @@
import java.util.Collection;
+import org.springframework.data.couchbase.core.support.AnyId;
+import org.springframework.data.couchbase.core.support.WithCollection;
+
public interface ExecutableFindFromReplicasByIdOperation {
ExecutableFindFromReplicasById findFromReplicasById(Class domainType);
- interface TerminatingFindFromReplicasById {
+ interface TerminatingFindFromReplicasById extends AnyId {
T any(String id);
@@ -29,7 +32,7 @@ interface TerminatingFindFromReplicasById {
}
- interface FindFromReplicasByIdWithCollection extends TerminatingFindFromReplicasById {
+ interface FindFromReplicasByIdWithCollection extends TerminatingFindFromReplicasById, WithCollection {
TerminatingFindFromReplicasById inCollection(String collection);
}
diff --git a/src/main/java/org/springframework/data/couchbase/core/ExecutableFindFromReplicasByIdOperationSupport.java b/src/main/java/org/springframework/data/couchbase/core/ExecutableFindFromReplicasByIdOperationSupport.java
index beefe1046..eccebf35c 100644
--- a/src/main/java/org/springframework/data/couchbase/core/ExecutableFindFromReplicasByIdOperationSupport.java
+++ b/src/main/java/org/springframework/data/couchbase/core/ExecutableFindFromReplicasByIdOperationSupport.java
@@ -30,21 +30,25 @@ public class ExecutableFindFromReplicasByIdOperationSupport implements Executabl
@Override
public ExecutableFindFromReplicasById findFromReplicasById(Class domainType) {
- return new ExecutableFindFromReplicasByIdSupport<>(template, domainType, null);
+ return new ExecutableFindFromReplicasByIdSupport<>(template, domainType, domainType, null);
}
static class ExecutableFindFromReplicasByIdSupport implements ExecutableFindFromReplicasById {
private final CouchbaseTemplate template;
- private final Class domainType;
+ private final Class> domainType;
+ private final Class returnType;
private final String collection;
private final ReactiveFindFromReplicasByIdSupport reactiveSupport;
- ExecutableFindFromReplicasByIdSupport(CouchbaseTemplate template, Class domainType, String collection) {
+ ExecutableFindFromReplicasByIdSupport(CouchbaseTemplate template, Class> domainType, Class returnType,
+ String collection) {
this.template = template;
this.domainType = domainType;
this.collection = collection;
- this.reactiveSupport = new ReactiveFindFromReplicasByIdSupport<>(template.reactive(), domainType, collection);
+ this.returnType = returnType;
+ this.reactiveSupport = new ReactiveFindFromReplicasByIdSupport<>(template.reactive(), domainType, returnType,
+ collection);
}
@Override
@@ -60,7 +64,7 @@ public Collection extends T> any(Collection ids) {
@Override
public TerminatingFindFromReplicasById inCollection(final String collection) {
Assert.hasText(collection, "Collection must not be null nor empty.");
- return new ExecutableFindFromReplicasByIdSupport<>(template, domainType, collection);
+ return new ExecutableFindFromReplicasByIdSupport<>(template, domainType, returnType, collection);
}
}
diff --git a/src/main/java/org/springframework/data/couchbase/core/ExecutableInsertByIdOperation.java b/src/main/java/org/springframework/data/couchbase/core/ExecutableInsertByIdOperation.java
index 761f2e74c..7451b631b 100644
--- a/src/main/java/org/springframework/data/couchbase/core/ExecutableInsertByIdOperation.java
+++ b/src/main/java/org/springframework/data/couchbase/core/ExecutableInsertByIdOperation.java
@@ -18,6 +18,9 @@
import java.time.Duration;
import java.util.Collection;
+import org.springframework.data.couchbase.core.support.OneAndAllEntity;
+import org.springframework.data.couchbase.core.support.WithCollection;
+
import com.couchbase.client.core.msg.kv.DurabilityLevel;
import com.couchbase.client.java.kv.PersistTo;
import com.couchbase.client.java.kv.ReplicateTo;
@@ -26,7 +29,7 @@ public interface ExecutableInsertByIdOperation {
ExecutableInsertById insertById(Class domainType);
- interface TerminatingInsertById extends OneAndAll{
+ interface TerminatingInsertById extends OneAndAllEntity {
@Override
T one(T object);
@@ -36,7 +39,7 @@ interface TerminatingInsertById extends OneAndAll{
}
- interface InsertByIdWithCollection extends TerminatingInsertById, InCollection {
+ interface InsertByIdWithCollection extends TerminatingInsertById, WithCollection {
TerminatingInsertById inCollection(String collection);
}
diff --git a/src/main/java/org/springframework/data/couchbase/core/ExecutableRemoveByIdOperation.java b/src/main/java/org/springframework/data/couchbase/core/ExecutableRemoveByIdOperation.java
index 94a6cf682..a53a244ba 100644
--- a/src/main/java/org/springframework/data/couchbase/core/ExecutableRemoveByIdOperation.java
+++ b/src/main/java/org/springframework/data/couchbase/core/ExecutableRemoveByIdOperation.java
@@ -18,6 +18,9 @@
import java.util.Collection;
import java.util.List;
+import org.springframework.data.couchbase.core.support.OneAndAllId;
+import org.springframework.data.couchbase.core.support.WithCollection;
+
import com.couchbase.client.core.msg.kv.DurabilityLevel;
import com.couchbase.client.java.kv.PersistTo;
import com.couchbase.client.java.kv.ReplicateTo;
@@ -26,7 +29,7 @@ public interface ExecutableRemoveByIdOperation {
ExecutableRemoveById removeById();
- interface TerminatingRemoveById {
+ interface TerminatingRemoveById extends OneAndAllId {
RemoveResult one(String id);
@@ -34,12 +37,12 @@ interface TerminatingRemoveById {
}
- interface RemoveByIdWithCollection extends TerminatingRemoveById, InCollection {
+ interface RemoveByIdWithCollection extends TerminatingRemoveById, WithCollection {
TerminatingRemoveById inCollection(String collection);
}
- interface RemoveByIdWithDurability extends RemoveByIdWithCollection, WithDurability {
+ interface RemoveByIdWithDurability extends RemoveByIdWithCollection, WithDurability {
RemoveByIdWithCollection withDurability(DurabilityLevel durabilityLevel);
diff --git a/src/main/java/org/springframework/data/couchbase/core/ExecutableRemoveByQueryOperation.java b/src/main/java/org/springframework/data/couchbase/core/ExecutableRemoveByQueryOperation.java
index 9b50fdedb..788983f44 100644
--- a/src/main/java/org/springframework/data/couchbase/core/ExecutableRemoveByQueryOperation.java
+++ b/src/main/java/org/springframework/data/couchbase/core/ExecutableRemoveByQueryOperation.java
@@ -18,6 +18,10 @@
import java.util.List;
import org.springframework.data.couchbase.core.query.Query;
+import org.springframework.data.couchbase.core.query.QueryCriteriaDefinition;
+import org.springframework.data.couchbase.core.support.WithCollection;
+import org.springframework.data.couchbase.core.support.WithConsistency;
+import org.springframework.data.couchbase.core.support.WithQuery;
import com.couchbase.client.java.query.QueryScanConsistency;
@@ -31,24 +35,36 @@ interface TerminatingRemoveByQuery {
}
- interface RemoveByQueryWithQuery extends TerminatingRemoveByQuery {
+ interface RemoveByQueryWithQuery extends TerminatingRemoveByQuery, WithQuery {
TerminatingRemoveByQuery matching(Query query);
+ default TerminatingRemoveByQuery matching(QueryCriteriaDefinition criteria) {
+ return matching(Query.query(criteria));
+ }
+
+ }
+
+ interface RemoveByQueryInCollection extends RemoveByQueryWithQuery, WithCollection {
+
+ RemoveByQueryWithQuery inCollection(String collection);
+
}
- interface RemoveByQueryConsistentWith extends RemoveByQueryWithQuery {
+ @Deprecated
+ interface RemoveByQueryConsistentWith extends RemoveByQueryInCollection {
- RemoveByQueryWithQuery consistentWith(QueryScanConsistency scanConsistency);
+ @Deprecated
+ RemoveByQueryInCollection consistentWith(QueryScanConsistency scanConsistency);
}
- interface RemoveByQueryInCollection extends RemoveByQueryConsistentWith {
+ interface RemoveByQueryWithConsistency extends RemoveByQueryConsistentWith, WithConsistency {
- RemoveByQueryConsistentWith inCollection(String collection);
+ RemoveByQueryConsistentWith withConsistency(QueryScanConsistency scanConsistency);
}
- interface ExecutableRemoveByQuery extends RemoveByQueryInCollection {}
+ interface ExecutableRemoveByQuery extends RemoveByQueryWithConsistency {}
}
diff --git a/src/main/java/org/springframework/data/couchbase/core/ExecutableRemoveByQueryOperationSupport.java b/src/main/java/org/springframework/data/couchbase/core/ExecutableRemoveByQueryOperationSupport.java
index 32e98a98a..ff0fb7b5b 100644
--- a/src/main/java/org/springframework/data/couchbase/core/ExecutableRemoveByQueryOperationSupport.java
+++ b/src/main/java/org/springframework/data/couchbase/core/ExecutableRemoveByQueryOperationSupport.java
@@ -19,6 +19,7 @@
import org.springframework.data.couchbase.core.ReactiveRemoveByQueryOperationSupport.ReactiveRemoveByQuerySupport;
import org.springframework.data.couchbase.core.query.Query;
+import org.springframework.util.Assert;
import com.couchbase.client.java.query.QueryScanConsistency;
@@ -35,7 +36,7 @@ public ExecutableRemoveByQueryOperationSupport(final CouchbaseTemplate template)
@Override
public ExecutableRemoveByQuery removeByQuery(Class domainType) {
return new ExecutableRemoveByQuerySupport<>(template, domainType, ALL_QUERY, QueryScanConsistency.NOT_BOUNDED,
- "_default._default");
+ null);
}
static class ExecutableRemoveByQuerySupport implements ExecutableRemoveByQuery {
@@ -69,12 +70,19 @@ public TerminatingRemoveByQuery matching(final Query query) {
}
@Override
- public RemoveByQueryWithQuery consistentWith(final QueryScanConsistency scanConsistency) {
+ @Deprecated
+ public RemoveByQueryInCollection consistentWith(final QueryScanConsistency scanConsistency) {
return new ExecutableRemoveByQuerySupport<>(template, domainType, query, scanConsistency, collection);
}
@Override
- public RemoveByQueryInCollection inCollection(final String collection) {
+ public RemoveByQueryConsistentWith withConsistency(final QueryScanConsistency scanConsistency) {
+ return new ExecutableRemoveByQuerySupport<>(template, domainType, query, scanConsistency, collection);
+ }
+
+ @Override
+ public RemoveByQueryWithConsistency inCollection(final String collection) {
+ Assert.hasText(collection, "Collection must not be null nor empty.");
return new ExecutableRemoveByQuerySupport<>(template, domainType, query, scanConsistency, collection);
}
diff --git a/src/main/java/org/springframework/data/couchbase/core/ExecutableReplaceByIdOperation.java b/src/main/java/org/springframework/data/couchbase/core/ExecutableReplaceByIdOperation.java
index b89c7ae89..c7aa94e1e 100644
--- a/src/main/java/org/springframework/data/couchbase/core/ExecutableReplaceByIdOperation.java
+++ b/src/main/java/org/springframework/data/couchbase/core/ExecutableReplaceByIdOperation.java
@@ -18,8 +18,10 @@
import java.time.Duration;
import java.util.Collection;
+import org.springframework.data.couchbase.core.support.OneAndAllEntity;
+import org.springframework.data.couchbase.core.support.WithCollection;
+
import com.couchbase.client.core.msg.kv.DurabilityLevel;
-import com.couchbase.client.java.kv.IncrementOptions;
import com.couchbase.client.java.kv.PersistTo;
import com.couchbase.client.java.kv.ReplicateTo;
@@ -27,7 +29,7 @@ public interface ExecutableReplaceByIdOperation {
ExecutableReplaceById replaceById(Class domainType);
- interface TerminatingReplaceById extends OneAndAll {
+ interface TerminatingReplaceById extends OneAndAllEntity {
@Override
T one(T object);
@@ -37,7 +39,7 @@ interface TerminatingReplaceById extends OneAndAll {
}
- interface ReplaceByIdWithCollection extends TerminatingReplaceById , InCollection {
+ interface ReplaceByIdWithCollection extends TerminatingReplaceById, WithCollection {
TerminatingReplaceById inCollection(String collection);
}
diff --git a/src/main/java/org/springframework/data/couchbase/core/ExecutableUpsertByIdOperation.java b/src/main/java/org/springframework/data/couchbase/core/ExecutableUpsertByIdOperation.java
index a21ba69d7..eb0d9522e 100644
--- a/src/main/java/org/springframework/data/couchbase/core/ExecutableUpsertByIdOperation.java
+++ b/src/main/java/org/springframework/data/couchbase/core/ExecutableUpsertByIdOperation.java
@@ -18,6 +18,9 @@
import java.time.Duration;
import java.util.Collection;
+import org.springframework.data.couchbase.core.support.OneAndAllEntity;
+import org.springframework.data.couchbase.core.support.WithCollection;
+
import com.couchbase.client.core.msg.kv.DurabilityLevel;
import com.couchbase.client.java.kv.PersistTo;
import com.couchbase.client.java.kv.ReplicateTo;
@@ -26,7 +29,7 @@ public interface ExecutableUpsertByIdOperation {
ExecutableUpsertById upsertById(Class domainType);
- interface TerminatingUpsertById extends OneAndAll{
+ interface TerminatingUpsertById extends OneAndAllEntity {
@Override
T one(T object);
@@ -36,7 +39,7 @@ interface TerminatingUpsertById extends OneAndAll{
}
- interface UpsertByIdWithCollection extends TerminatingUpsertById, InCollection {
+ interface UpsertByIdWithCollection extends TerminatingUpsertById, WithCollection {
TerminatingUpsertById inCollection(String collection);
}
diff --git a/src/main/java/org/springframework/data/couchbase/core/ReactiveExistsByIdOperation.java b/src/main/java/org/springframework/data/couchbase/core/ReactiveExistsByIdOperation.java
index cd85162cf..23251d923 100644
--- a/src/main/java/org/springframework/data/couchbase/core/ReactiveExistsByIdOperation.java
+++ b/src/main/java/org/springframework/data/couchbase/core/ReactiveExistsByIdOperation.java
@@ -20,6 +20,9 @@
import java.util.Collection;
import java.util.Map;
+import org.springframework.data.couchbase.core.support.OneAndAllExistsReactive;
+import org.springframework.data.couchbase.core.support.WithCollection;
+
public interface ReactiveExistsByIdOperation {
/**
@@ -27,7 +30,7 @@ public interface ReactiveExistsByIdOperation {
*/
ReactiveExistsById existsById();
- interface TerminatingExistsById {
+ interface TerminatingExistsById extends OneAndAllExistsReactive {
/**
* Performs the operation on the ID given.
@@ -47,7 +50,7 @@ interface TerminatingExistsById {
}
- interface ExistsByIdWithCollection extends TerminatingExistsById {
+ interface ExistsByIdWithCollection extends TerminatingExistsById, WithCollection {
/**
* Allows to specify a different collection than the default one configured.
diff --git a/src/main/java/org/springframework/data/couchbase/core/ReactiveFindByAnalyticsOperation.java b/src/main/java/org/springframework/data/couchbase/core/ReactiveFindByAnalyticsOperation.java
index ff9f65fb9..8fd47e663 100644
--- a/src/main/java/org/springframework/data/couchbase/core/ReactiveFindByAnalyticsOperation.java
+++ b/src/main/java/org/springframework/data/couchbase/core/ReactiveFindByAnalyticsOperation.java
@@ -15,14 +15,16 @@
*/
package org.springframework.data.couchbase.core;
-import com.couchbase.client.java.analytics.AnalyticsScanConsistency;
-import org.springframework.dao.IncorrectResultSizeDataAccessException;
import reactor.core.publisher.Flux;
import reactor.core.publisher.Mono;
+import org.springframework.dao.IncorrectResultSizeDataAccessException;
import org.springframework.data.couchbase.core.query.AnalyticsQuery;
+import org.springframework.data.couchbase.core.support.OneAndAllReactive;
+import org.springframework.data.couchbase.core.support.WithAnalyticsConsistency;
+import org.springframework.data.couchbase.core.support.WithAnalyticsQuery;
-import java.util.Optional;
+import com.couchbase.client.java.analytics.AnalyticsScanConsistency;
public interface ReactiveFindByAnalyticsOperation {
@@ -36,7 +38,7 @@ public interface ReactiveFindByAnalyticsOperation {
/**
* Compose find execution by calling one of the terminating methods.
*/
- interface TerminatingFindByAnalytics {
+ interface TerminatingFindByAnalytics extends OneAndAllReactive {
/**
* Get exactly zero or one result.
@@ -76,7 +78,7 @@ interface TerminatingFindByAnalytics {
}
- interface FindByAnalyticsWithQuery extends TerminatingFindByAnalytics {
+ interface FindByAnalyticsWithQuery extends TerminatingFindByAnalytics, WithAnalyticsQuery {
/**
* Set the filter for the analytics query to be used.
@@ -88,6 +90,7 @@ interface FindByAnalyticsWithQuery extends TerminatingFindByAnalytics {
}
+ @Deprecated
interface FindByAnalyticsConsistentWith extends FindByAnalyticsWithQuery {
/**
@@ -95,10 +98,22 @@ interface FindByAnalyticsConsistentWith extends FindByAnalyticsWithQuery {
*
* @param scanConsistency the custom scan consistency to use for this analytics query.
*/
+ @Deprecated
FindByAnalyticsWithQuery consistentWith(AnalyticsScanConsistency scanConsistency);
}
- interface ReactiveFindByAnalytics extends FindByAnalyticsConsistentWith {}
+ interface FindByAnalyticsWithConsistency extends FindByAnalyticsConsistentWith