summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorShawn O. Pearce <sop@google.com>2010-07-19 10:37:41 -0700
committerShawn O. Pearce <sop@google.com>2010-07-19 10:39:22 -0700
commite96a2367b4aba34673f19452db3b991a05ad4fd0 (patch)
treefbb47760b24a9ef56b20bbc29aefab884862886b
parent51e058f626c4636e929916c1fb198d6e3e0e2d1d (diff)
Always use the smallest limit: in a query
If there are multiple limit operators in the same AND node, pick the one with the smaller value as the rewritten result. This way if a user puts "limit:5" in a search query we only show them 5 results, even if their page size was bigger. This however may break pagination in the web UI because we don't detect the limit as the page size. Change-Id: Id6e7494d7753f72ddaa9a5cfa4fda694bd540001 Signed-off-by: Shawn O. Pearce <sop@google.com>
-rw-r--r--gerrit-server/src/main/java/com/google/gerrit/server/query/change/ChangeQueryRewriter.java9
1 files changed, 9 insertions, 0 deletions
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/query/change/ChangeQueryRewriter.java b/gerrit-server/src/main/java/com/google/gerrit/server/query/change/ChangeQueryRewriter.java
index 78d47a03fe..4ca2a626dd 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/query/change/ChangeQueryRewriter.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/query/change/ChangeQueryRewriter.java
@@ -96,6 +96,15 @@ public class ChangeQueryRewriter extends QueryRewriter<ChangeData> {
return and(new SortKeyPredicate.Before(dbProvider, cut), a);
}
+ @SuppressWarnings("unchecked")
+ @NoCostComputation
+ @Rewrite("A=(limit:*) B=(limit:*)")
+ public Predicate<ChangeData> r00_smallestLimit(
+ @Named("A") IntPredicate<ChangeData> a,
+ @Named("B") IntPredicate<ChangeData> b) {
+ return a.intValue() <= b.intValue() ? a : b;
+ }
+
@Rewrite("status:open P=(project:*) S=(sortkey_after:*) L=(limit:*)")
public Predicate<ChangeData> r10_byProjectOpenPrev(
@Named("P") final ProjectPredicate p,