diff --git a/pom.xml b/pom.xml index d7cf78de79..64b7e135e6 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ org.springframework.data spring-data-mongodb-parent - 4.3.3-SNAPSHOT + 4.3.x-GH-4758-SNAPSHOT pom Spring Data MongoDB diff --git a/spring-data-mongodb-benchmarks/pom.xml b/spring-data-mongodb-benchmarks/pom.xml index 76dff60b0d..e3e9427af8 100644 --- a/spring-data-mongodb-benchmarks/pom.xml +++ b/spring-data-mongodb-benchmarks/pom.xml @@ -7,7 +7,7 @@ org.springframework.data spring-data-mongodb-parent - 4.3.3-SNAPSHOT + 4.3.x-GH-4758-SNAPSHOT ../pom.xml diff --git a/spring-data-mongodb-distribution/pom.xml b/spring-data-mongodb-distribution/pom.xml index 21d97b7213..589a81a8a4 100644 --- a/spring-data-mongodb-distribution/pom.xml +++ b/spring-data-mongodb-distribution/pom.xml @@ -15,7 +15,7 @@ org.springframework.data spring-data-mongodb-parent - 4.3.3-SNAPSHOT + 4.3.x-GH-4758-SNAPSHOT ../pom.xml diff --git a/spring-data-mongodb/pom.xml b/spring-data-mongodb/pom.xml index 9594370085..820a23a869 100644 --- a/spring-data-mongodb/pom.xml +++ b/spring-data-mongodb/pom.xml @@ -13,7 +13,7 @@ org.springframework.data spring-data-mongodb-parent - 4.3.3-SNAPSHOT + 4.3.x-GH-4758-SNAPSHOT ../pom.xml diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/query/QueryUtils.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/query/QueryUtils.java index c7cb84d091..c2542efa44 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/query/QueryUtils.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/query/QueryUtils.java @@ -23,6 +23,7 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.bson.Document; + import org.springframework.aop.framework.ProxyFactory; import org.springframework.data.mongodb.core.query.Collation; import org.springframework.data.mongodb.core.query.Query; @@ -116,13 +117,13 @@ static int indexOfAssignableParameter(Class type, Class[] parameters) { */ static int indexOfAssignableParameter(Class type, List> parameters) { - if(parameters.isEmpty()) { + if (parameters.isEmpty()) { return -1; } int i = 0; - for(Class parameterType : parameters) { - if(ClassUtils.isAssignable(type, parameterType)) { + for (Class parameterType : parameters) { + if (ClassUtils.isAssignable(type, parameterType)) { return i; } i++; @@ -151,6 +152,12 @@ public DefaultSortingInterceptor(Document defaultSort) { @Override public Object invoke(@NonNull MethodInvocation invocation) throws Throwable { + if (invocation.getMethod().getName().equals("isSorted")) { + + boolean result = (Boolean) invocation.proceed(); + return result || !defaultSort.isEmpty(); + } + if (!invocation.getMethod().getName().equals("getSortObject")) { return invocation.proceed(); } diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/query/AbstractMongoQueryUnitTests.java b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/query/AbstractMongoQueryUnitTests.java index c35a328a1f..5ddf4534dd 100644 --- a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/query/AbstractMongoQueryUnitTests.java +++ b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/query/AbstractMongoQueryUnitTests.java @@ -37,12 +37,15 @@ import org.mockito.junit.jupiter.MockitoSettings; import org.mockito.quality.Strictness; import org.springframework.data.domain.Limit; +import org.springframework.data.domain.OffsetScrollPosition; import org.springframework.data.domain.Page; import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Pageable; +import org.springframework.data.domain.ScrollPosition; import org.springframework.data.domain.Slice; import org.springframework.data.domain.Sort; import org.springframework.data.domain.Sort.Direction; +import org.springframework.data.domain.Window; import org.springframework.data.mongodb.MongoDatabaseFactory; import org.springframework.data.mongodb.core.ExecutableFindOperation.ExecutableFind; import org.springframework.data.mongodb.core.ExecutableFindOperation.FindWithQuery; @@ -329,6 +332,20 @@ void usesAnnotatedSortWhenPresent() { assertThat(captor.getValue().getSortObject()).isEqualTo(new Document("age", 1)); } + @Test // GH-4758 + void scrollUsesAnnotatedSortWhenPresent() { + + createQueryForMethod("scrollByAge", Integer.class, ScrollPosition.class) // + .execute(new Object[] { 1000, ScrollPosition.keyset()}); + + ArgumentCaptor captor = ArgumentCaptor.forClass(Query.class); + verify(withQueryMock).matching(captor.capture()); + + Query query = captor.getValue(); + assertThat(query.getSortObject()).isEqualTo(new Document("age", 1)); + assertThat(query.isSorted()).isTrue(); + } + @Test // DATAMONGO-1979 void usesExplicitSortOverridesAnnotatedSortWhenPresent() { @@ -637,6 +654,9 @@ private interface Repo extends MongoRepository { @org.springframework.data.mongodb.repository.Query(sort = "{ age : 1 }") List findByAge(Integer age); + @org.springframework.data.mongodb.repository.Query(sort = "{ age : 1 }") + Window scrollByAge(Integer age, ScrollPosition position); + @org.springframework.data.mongodb.repository.Query(sort = "{ age : 1 }") List findByAge(Integer age, Sort page); @@ -670,6 +690,7 @@ private interface Repo extends MongoRepository { @ReadPreference(value = "secondaryPreferred") List findWithReadPreferenceByFirstname(String firstname); + } // DATAMONGO-1872