Don't add 1 to limit for index queries The comment in AbstractQueryChangesTest incorrectly claimed the SQL implementation was broken when it was actually the index implementation. Change-Id: I63b46a893937176ae02cd8141da9dc97db1d9e54
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/index/IndexRewriteImpl.java b/gerrit-server/src/main/java/com/google/gerrit/server/index/IndexRewriteImpl.java index 4d8c951..414715d 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/index/IndexRewriteImpl.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/index/IndexRewriteImpl.java
@@ -147,9 +147,8 @@ return sqlRewriter.rewrite(in); } in = basicRewrites.rewrite(in); - // Add 1 to specified limit to match behavior of QueryProcessor. int limit = ChangeQueryBuilder.hasLimit(in) - ? ChangeQueryBuilder.getLimit(in) + 1 + ? ChangeQueryBuilder.getLimit(in) : MAX_LIMIT; Predicate<ChangeData> out = rewriteImpl(in, index, limit);
diff --git a/gerrit-server/src/test/java/com/google/gerrit/server/index/IndexRewriteTest.java b/gerrit-server/src/test/java/com/google/gerrit/server/index/IndexRewriteTest.java index f9bb4f3..d9016e9 100644 --- a/gerrit-server/src/test/java/com/google/gerrit/server/index/IndexRewriteTest.java +++ b/gerrit-server/src/test/java/com/google/gerrit/server/index/IndexRewriteTest.java
@@ -152,7 +152,7 @@ Predicate<ChangeData> out = rewrite(in); assertSame(AndSource.class, out.getClass()); assertEquals(ImmutableList.of( - query(in.getChild(0), 4), + query(in.getChild(0), 3), in.getChild(1)), out.getChildren()); }
diff --git a/gerrit-server/src/test/java/com/google/gerrit/server/query/change/AbstractQueryChangesTest.java b/gerrit-server/src/test/java/com/google/gerrit/server/query/change/AbstractQueryChangesTest.java index 87fdb18..9578da1 100644 --- a/gerrit-server/src/test/java/com/google/gerrit/server/query/change/AbstractQueryChangesTest.java +++ b/gerrit-server/src/test/java/com/google/gerrit/server/query/change/AbstractQueryChangesTest.java
@@ -23,6 +23,7 @@ import com.google.common.base.Charsets; import com.google.common.base.Objects; import com.google.common.collect.ImmutableMap; +import com.google.common.collect.Lists; import com.google.common.hash.Hashing; import com.google.gerrit.common.Nullable; import com.google.gerrit.extensions.restapi.TopLevelResource; @@ -400,16 +401,18 @@ @Test public void limit() throws Exception { TestRepository<InMemoryRepository> repo = createProject("repo"); - Change change1 = newChange(repo, null, null, null, null).insert(); - Change change2 = newChange(repo, null, null, null, null).insert(); + Change last = null; + int n = 5; + for (int i = 0; i < n; i++) { + last = newChange(repo, null, null, null, null).insert(); + } - // TODO(dborowitz): Limit is broken in SQL (returns N+1 results) with some - // kinds of predicates but not others. - //assertResultEquals(change2, queryOne("status:new limit:1")); - List<ChangeInfo> results = query("status:new limit:2"); - assertEquals(2, results.size()); - assertResultEquals(change2, results.get(0)); - assertResultEquals(change1, results.get(1)); + List<ChangeInfo> results; + for (int i = 1; i <= n + 2; i++) { + results = query("status:new limit:" + i); + assertEquals(Math.min(i, n), results.size()); + assertResultEquals(last, results.get(0)); + } } protected ChangeInserter newChange(