diff options
author | Shawn O. Pearce <sop@google.com> | 2010-07-19 10:37:41 -0700 |
---|---|---|
committer | Shawn O. Pearce <sop@google.com> | 2010-07-19 10:39:22 -0700 |
commit | e96a2367b4aba34673f19452db3b991a05ad4fd0 (patch) | |
tree | fbb47760b24a9ef56b20bbc29aefab884862886b | |
parent | 51e058f626c4636e929916c1fb198d6e3e0e2d1d (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.java | 9 |
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, |