DATACOUCH-227 - Keep isOrderRetained view param, bump to SDK 2.2.8

This commit is contained in:
Simon Baslé
2016-06-13 16:02:21 +02:00
parent b5ae111787
commit d6b63c305a
3 changed files with 30 additions and 14 deletions

View File

@@ -21,8 +21,8 @@
<dist.key>DATACOUCH</dist.key> <dist.key>DATACOUCH</dist.key>
<couchbase>2.2.7</couchbase> <couchbase>2.2.8</couchbase>
<couchbase.osgi>2.2.7</couchbase.osgi> <couchbase.osgi>2.2.8</couchbase.osgi>
<springdata.commons>1.13.0.BUILD-SNAPSHOT</springdata.commons> <springdata.commons>1.13.0.BUILD-SNAPSHOT</springdata.commons>
<validation>1.0.0.GA</validation> <validation>1.0.0.GA</validation>
</properties> </properties>

View File

@@ -17,17 +17,13 @@
package org.springframework.data.couchbase.core; package org.springframework.data.couchbase.core;
import static com.couchbase.client.java.query.Select.select; import static com.couchbase.client.java.query.Select.select;
import static com.couchbase.client.java.query.dsl.Expression.i; import static com.couchbase.client.java.query.dsl.Expression.*;
import static com.couchbase.client.java.query.dsl.Expression.s;
import static com.couchbase.client.java.query.dsl.Expression.x;
import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.core.IsEqual.equalTo; import static org.hamcrest.core.IsEqual.equalTo;
import static org.junit.Assert.*; import static org.junit.Assert.*;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.Date; import java.util.Date;
import java.util.HashMap; import java.util.HashMap;
import java.util.LinkedList; import java.util.LinkedList;
@@ -35,10 +31,6 @@ import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Random; import java.util.Random;
import java.util.concurrent.Callable; import java.util.concurrent.Callable;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicLong; import java.util.concurrent.atomic.AtomicLong;
import com.couchbase.client.java.Bucket; import com.couchbase.client.java.Bucket;
@@ -48,6 +40,7 @@ import com.couchbase.client.java.query.N1qlParams;
import com.couchbase.client.java.query.N1qlQuery; import com.couchbase.client.java.query.N1qlQuery;
import com.couchbase.client.java.query.N1qlQueryResult; import com.couchbase.client.java.query.N1qlQueryResult;
import com.couchbase.client.java.query.consistency.ScanConsistency; import com.couchbase.client.java.query.consistency.ScanConsistency;
import com.couchbase.client.java.repository.annotation.Field;
import com.couchbase.client.java.view.Stale; import com.couchbase.client.java.view.Stale;
import com.couchbase.client.java.view.ViewQuery; import com.couchbase.client.java.view.ViewQuery;
import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.core.type.TypeReference;
@@ -64,7 +57,6 @@ import org.springframework.data.annotation.Version;
import org.springframework.data.couchbase.IntegrationTestApplicationConfig; import org.springframework.data.couchbase.IntegrationTestApplicationConfig;
import org.springframework.data.couchbase.core.convert.MappingCouchbaseConverter; import org.springframework.data.couchbase.core.convert.MappingCouchbaseConverter;
import org.springframework.data.couchbase.core.mapping.Document; import org.springframework.data.couchbase.core.mapping.Document;
import com.couchbase.client.java.repository.annotation.Field;
import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.TestExecutionListeners; import org.springframework.test.context.TestExecutionListeners;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
@@ -499,6 +491,27 @@ public class CouchbaseTemplateTests {
assertNull(template.findById(id, DocumentWithTouchOnRead.class)); assertNull(template.findById(id, DocumentWithTouchOnRead.class));
} }
/**
* @see DATACOUCH-227
*/
@Test
public void shouldRetainOrderWhenQueryingViewOrdered() {
ViewQuery q = ViewQuery.from("test_beers", "by_name");
q.descending().includeDocsOrdered(true);
String prev = null;
List<Beer> beers = template.findByView(q, Beer.class);
assertTrue(q.isIncludeDocs());
assertTrue(q.isOrderRetained());
assertEquals(RawJsonDocument.class, q.includeDocsTarget());
for (Beer beer : beers) {
if (prev != null) {
assertThat(beer.getName() + " not alphabetically < to " + prev, beer.getName().compareTo(prev) < 0);
}
prev = beer.getName();
}
}
/** /**
* A sample document with just an id and property. * A sample document with just an id and property.
*/ */

View File

@@ -304,9 +304,12 @@ public class CouchbaseTemplate implements CouchbaseOperations, ApplicationEventP
public <T> List<T> findByView(ViewQuery query, final Class<T> entityClass) { public <T> List<T> findByView(ViewQuery query, final Class<T> entityClass) {
//we'll always need to get documents, as a RawJsonDocument, so we should force that target class //we'll always need to get documents, as a RawJsonDocument, so we should force that target class
//so that the caller doesn't set a bad target class unintentionally, pre-loading with a bad type. //so that the caller doesn't set a bad target class unintentionally, pre-loading with a bad type.
//TODO DATACOUCH-227 reproduce retainOrder parameter
if (!query.isIncludeDocs() || !query.includeDocsTarget().equals(RawJsonDocument.class)) { if (!query.isIncludeDocs() || !query.includeDocsTarget().equals(RawJsonDocument.class)) {
query.includeDocs(RawJsonDocument.class); if (query.isOrderRetained()) {
query.includeDocsOrdered(RawJsonDocument.class);
} else {
query.includeDocs(RawJsonDocument.class);
}
} }
//we'll always map the document to the entity, hence reduce never makes sense. //we'll always map the document to the entity, hence reduce never makes sense.
query.reduce(false); query.reduce(false);