From 5f3671f349f623fc40908590cb87c4f6973084c9 Mon Sep 17 00:00:00 2001 From: Oliver Gierke Date: Fri, 18 Jul 2014 19:01:44 +0200 Subject: [PATCH] DATAMONGO-996 - Fixed boundary detection in pagination. The fix for DATAMONGO-950 introduced a tiny glitch so that retrieving pages after the first one was broken in the repository query execution. We now correctly use the previously detected number of elements to detect whether the Pageable given is out of scope. Related ticket: DATAMONGO-950. --- .../repository/query/AbstractMongoQuery.java | 2 +- .../AbstractPersonRepositoryIntegrationTests.java | 13 +++++++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/query/AbstractMongoQuery.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/query/AbstractMongoQuery.java index ef61aae62..611bd0f9f 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/query/AbstractMongoQuery.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/query/AbstractMongoQuery.java @@ -260,7 +260,7 @@ public abstract class AbstractMongoQuery implements RepositoryQuery { long count = operations.count(query, metadata.getCollectionName()); count = overallLimit != 0 ? Math.min(count, query.getLimit()) : count; - boolean pageableOutOfScope = pageable.getOffset() > query.getLimit(); + boolean pageableOutOfScope = pageable.getOffset() > count; if (pageableOutOfScope) { return new PageImpl(Collections.emptyList(), pageable, count); 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 b07103f67..c7be14f9f 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 @@ -969,6 +969,19 @@ public abstract class AbstractPersonRepositoryIntegrationTests { assertThat(result.getContent().size(), is(0)); } + /** + * @see DATAMONGO-996, DATAMONGO-950 + */ + @Test + public void gettingNonFirstPageWorksWithoutLimitBeingSet() { + + Page slice = repository.findByLastnameLike("Matthews", new PageRequest(1, 1)); + + assertThat(slice.getContent(), hasSize(1)); + assertThat(slice.hasPrevious(), is(true)); + assertThat(slice.hasNext(), is(false)); + } + /** * Ignored for now as this requires Querydsl 3.4.1 to succeed. *