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(