diff --git a/pom.xml b/pom.xml
index 018dd48e27..f8160da8de 100644
--- a/pom.xml
+++ b/pom.xml
@@ -5,7 +5,7 @@
org.springframework.data
spring-data-mongodb-parent
- 4.2.0-SNAPSHOT
+ 4.2.x-4397-SNAPSHOT
pom
Spring Data MongoDB
@@ -26,7 +26,7 @@
multi
spring-data-mongodb
- 3.2.0-SNAPSHOT
+ 3.2.x-2827-SNAPSHOT
4.9.1
${mongo}
1.19
diff --git a/spring-data-mongodb-benchmarks/pom.xml b/spring-data-mongodb-benchmarks/pom.xml
index 2de4b6b635..b90f2435e1 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.2.0-SNAPSHOT
+ 4.2.x-4397-SNAPSHOT
../pom.xml
diff --git a/spring-data-mongodb-distribution/pom.xml b/spring-data-mongodb-distribution/pom.xml
index 3bc1ab9df2..bacee67813 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.2.0-SNAPSHOT
+ 4.2.x-4397-SNAPSHOT
../pom.xml
diff --git a/spring-data-mongodb/pom.xml b/spring-data-mongodb/pom.xml
index 921254ca44..0640c436d0 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.2.0-SNAPSHOT
+ 4.2.x-4397-SNAPSHOT
../pom.xml
diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/query/ConvertingParameterAccessor.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/query/ConvertingParameterAccessor.java
index 6e74538572..2596d0f1d3 100644
--- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/query/ConvertingParameterAccessor.java
+++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/query/ConvertingParameterAccessor.java
@@ -21,6 +21,7 @@
import java.util.Iterator;
import java.util.List;
+import org.springframework.data.domain.Limit;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Range;
import org.springframework.data.domain.ScrollPosition;
@@ -117,6 +118,11 @@ public UpdateDefinition getUpdate() {
return delegate.getUpdate();
}
+ @Override
+ public Limit getLimit() {
+ return delegate.getLimit();
+ }
+
/**
* Converts the given value with the underlying {@link MongoWriter}.
*
diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/AbstractPersonRepositoryIntegrationTests.java b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/AbstractPersonRepositoryIntegrationTests.java
index 646a268e0e..fae8fe9cf1 100644
--- a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/AbstractPersonRepositoryIntegrationTests.java
+++ b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/AbstractPersonRepositoryIntegrationTests.java
@@ -213,6 +213,17 @@ void appliesScrollPositionCorrectly() {
assertThat(page).contains(carter);
}
+ @Test // GH-4397
+ void appliesLimitToScrollingCorrectly() {
+
+ Window page = repository.findByLastnameLikeOrderByLastnameAscFirstnameAsc("*a*",
+ ScrollPosition.keyset(), Limit.of(2));
+
+ assertThat(page.isLast()).isFalse();
+ assertThat(page.size()).isEqualTo(2);
+ assertThat(page).contains(carter);
+ }
+
@Test // GH-4308
void appliesScrollPositionWithProjectionCorrectly() {
@@ -236,6 +247,14 @@ void executesPagedFinderCorrectly() {
assertThat(page).contains(carter, stefan);
}
+ @Test // GH-4397
+ void executesFinderCorrectlyWithSortAndLimit() {
+
+ List page = repository.findByLastnameLike("*a*", Sort.by(Direction.ASC, "lastname", "firstname"), Limit.of(2));
+
+ assertThat(page).containsExactly(carter, stefan);
+ }
+
@Test
void executesPagedFinderWithAnnotatedQueryCorrectly() {
diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/PersonRepository.java b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/PersonRepository.java
index 1e6a37b0a9..7e158b5055 100644
--- a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/PersonRepository.java
+++ b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/PersonRepository.java
@@ -23,6 +23,7 @@
import java.util.regex.Pattern;
import java.util.stream.Stream;
+import org.springframework.data.domain.Limit;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Range;
@@ -126,6 +127,9 @@ public interface PersonRepository extends MongoRepository, Query
Window findTop2ByLastnameLikeOrderByLastnameAscFirstnameAsc(String lastname,
ScrollPosition scrollPosition);
+ Window findByLastnameLikeOrderByLastnameAscFirstnameAsc(String lastname,
+ ScrollPosition scrollPosition, Limit limit);
+
/**
* Returns a scroll of {@link Person}s applying projections with a lastname matching the given one (*-wildcards
* supported).
@@ -145,6 +149,8 @@ Window findTop2ByLastnameLikeOrderByLastnameAscFirstnameAsc(String lastn
*/
Page findByLastnameLike(String lastname, Pageable pageable);
+ List findByLastnameLike(String lastname, Sort sort, Limit limit);
+
@Query("{ 'lastname' : { '$regex' : '?0', '$options' : 'i'}}")
Page findByLastnameLikeWithPageable(String lastname, Pageable pageable);
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 a6c7d3ed94..0fc4d8b73f 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
@@ -36,6 +36,7 @@
import org.mockito.junit.jupiter.MockitoExtension;
import org.mockito.junit.jupiter.MockitoSettings;
import org.mockito.quality.Strictness;
+import org.springframework.data.domain.Limit;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
@@ -493,6 +494,30 @@ void updateShouldApplyHint() {
assertThat(captor.getValue().getHint()).isEqualTo("idx-ln");
}
+ @Test // GH-4397
+ void limitShouldBeAppliedToQuery() {
+
+ createQueryForMethod("findWithLimit", String.class, Limit.class).execute(new Object[] { "dalinar", Limit.of(42) });
+
+ ArgumentCaptor captor = ArgumentCaptor.forClass(Query.class);
+ verify(withQueryMock).matching(captor.capture());
+
+ assertThat(captor.getValue().getLimit()).isEqualTo(42);
+ }
+
+ @Test // GH-4397
+ void sortAndLimitShouldBeAppliedToQuery() {
+
+ createQueryForMethod("findWithSortAndLimit", String.class, Sort.class, Limit.class)
+ .execute(new Object[] { "dalinar", Sort.by("fn"), Limit.of(42) });
+
+ ArgumentCaptor captor = ArgumentCaptor.forClass(Query.class);
+ verify(withQueryMock).matching(captor.capture());
+
+ assertThat(captor.getValue().getLimit()).isEqualTo(42);
+ assertThat(captor.getValue().getSortObject()).isEqualTo(new Document("fn", 1));
+ }
+
private MongoQueryFake createQueryForMethod(String methodName, Class>... paramTypes) {
return createQueryForMethod(Repo.class, methodName, paramTypes);
}
@@ -614,6 +639,10 @@ private interface Repo extends MongoRepository {
@Hint("idx-fn")
void findWithHintByFirstname(String firstname);
+
+ List findWithLimit(String firstname, Limit limit);
+
+ List findWithSortAndLimit(String firstname, Sort sort, Limit limit);
}
// DATAMONGO-1872