DATACOUCH-148 - Allow to configure repository queries consistency globally.

The consistency to apply on generated view queries (Stale) and N1QL queries (ScanConsistency) can now be chosen via the configuration, through a more abstract Consistency enumeration.

It is accessed from the CouchbaseOperations interface but is used in the repository only. In xml, the consistency attribute is on the couchbase:template element (string value of the enum to be passed in).

Documentation has been amended to describe this feature.
This commit is contained in:
Simon Baslé
2015-07-27 17:17:21 +02:00
parent 508f190270
commit f543e2b037
15 changed files with 343 additions and 100 deletions

View File

@@ -20,6 +20,7 @@ import org.springframework.context.annotation.Configuration;
import org.springframework.data.couchbase.config.AbstractCouchbaseConfiguration;
import org.springframework.data.couchbase.core.CouchbaseTemplate;
import org.springframework.data.couchbase.core.WriteResultChecking;
import org.springframework.data.couchbase.core.view.Consistency;
@Configuration
public class UnitTestApplicationConfig extends AbstractCouchbaseConfiguration {
@@ -73,4 +74,9 @@ public class UnitTestApplicationConfig extends AbstractCouchbaseConfiguration {
template.setWriteResultChecking(WriteResultChecking.LOG);
return template;
}
@Override
protected Consistency getDefaultConsistency() {
return Consistency.READ_YOUR_OWN_WRITES;
}
}

View File

@@ -11,11 +11,16 @@ import com.couchbase.client.java.document.json.JsonArray;
import com.couchbase.client.java.document.json.JsonObject;
import com.couchbase.client.java.query.ParameterizedQuery;
import com.couchbase.client.java.query.Query;
import com.couchbase.client.java.query.QueryParams;
import com.couchbase.client.java.query.SimpleQuery;
import com.couchbase.client.java.query.Statement;
import com.couchbase.client.java.query.consistency.ScanConsistency;
import org.junit.Test;
import org.mockito.Matchers;
import org.mockito.Mockito;
import org.springframework.data.couchbase.core.CouchbaseOperations;
import org.springframework.data.repository.query.ParameterAccessor;
import org.springframework.data.repository.query.QueryMethod;
public class AbstractN1qlBasedQueryTest {
@@ -23,12 +28,12 @@ public class AbstractN1qlBasedQueryTest {
@Test
public void testEmptyArgumentsShouldProduceSimpleQuery() throws Exception {
Statement st = select("*");
Query query = AbstractN1qlBasedQuery.buildQuery(st, JsonArray.empty());
Query query = AbstractN1qlBasedQuery.buildQuery(st, JsonArray.empty(), ScanConsistency.NOT_BOUNDED);
JsonObject queryObject = query.n1ql();
assertTrue(query instanceof SimpleQuery);
assertEquals(st.toString(), query.statement().toString());
assertNull(query.params());
assertEquals(QueryParams.build().consistency(ScanConsistency.NOT_BOUNDED), query.params());
assertFalse(queryObject.containsKey("args"));
}
@@ -38,12 +43,12 @@ public class AbstractN1qlBasedQueryTest {
List<Object> params = new ArrayList<Object>(2);
params.add("test");
JsonArray placeholderValues = JsonArray.from(params);
Query query = AbstractN1qlBasedQuery.buildQuery(st, placeholderValues);
Query query = AbstractN1qlBasedQuery.buildQuery(st, placeholderValues, ScanConsistency.NOT_BOUNDED);
JsonObject queryObject = query.n1ql();
assertTrue(query instanceof ParameterizedQuery);
assertEquals(st.toString(), query.statement().toString());
assertNull(query.params());
assertEquals(QueryParams.build().consistency(ScanConsistency.NOT_BOUNDED), query.params());
assertTrue(queryObject.containsKey("args"));
JsonArray args = queryObject.getArray("args");
assertEquals(1, args.size());
@@ -57,12 +62,12 @@ public class AbstractN1qlBasedQueryTest {
params.add(123L);
params.add("test");
JsonArray placeholderValues = JsonArray.from(params);
Query query = AbstractN1qlBasedQuery.buildQuery(st, placeholderValues);
Query query = AbstractN1qlBasedQuery.buildQuery(st, placeholderValues, ScanConsistency.NOT_BOUNDED);
JsonObject queryObject = query.n1ql();
assertTrue(query instanceof ParameterizedQuery);
assertEquals(st.toString(), query.statement().toString());
assertNull(query.params());
assertEquals(QueryParams.build().consistency(ScanConsistency.NOT_BOUNDED), query.params());
assertTrue(queryObject.containsKey("args"));
JsonArray args = queryObject.getArray("args");
assertEquals(2, args.size());