From a70fbbcd5ed55ac2eef090c0c16706f4b76e51c5 Mon Sep 17 00:00:00 2001 From: Edwin Kempin Date: Tue, 21 Jun 2016 13:37:06 +0200 Subject: [PATCH] Make LimitPredicate generic This way it can be used for queries on any index. Change-Id: I1dfda31021aacf344e28439271293956d25fa507 Signed-off-by: Edwin Kempin --- .../index/change/ChangeIndexRewriter.java | 5 +++-- .../query/{change => }/LimitPredicate.java | 21 +++++++------------ .../query/change/ChangeQueryBuilder.java | 4 +++- .../server/query/change/QueryProcessor.java | 4 +++- 4 files changed, 16 insertions(+), 18 deletions(-) rename gerrit-server/src/main/java/com/google/gerrit/server/query/{change => }/LimitPredicate.java (59%) diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/index/change/ChangeIndexRewriter.java b/gerrit-server/src/main/java/com/google/gerrit/server/index/change/ChangeIndexRewriter.java index c6b4d50278..71c575dcd4 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/index/change/ChangeIndexRewriter.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/index/change/ChangeIndexRewriter.java @@ -23,14 +23,15 @@ import com.google.gerrit.server.index.IndexPredicate; import com.google.gerrit.server.index.IndexRewriter; import com.google.gerrit.server.index.QueryOptions; import com.google.gerrit.server.query.AndPredicate; +import com.google.gerrit.server.query.LimitPredicate; import com.google.gerrit.server.query.NotPredicate; import com.google.gerrit.server.query.OrPredicate; import com.google.gerrit.server.query.Predicate; import com.google.gerrit.server.query.QueryParseException; import com.google.gerrit.server.query.change.AndSource; import com.google.gerrit.server.query.change.ChangeData; +import com.google.gerrit.server.query.change.ChangeQueryBuilder; import com.google.gerrit.server.query.change.ChangeStatusPredicate; -import com.google.gerrit.server.query.change.LimitPredicate; import com.google.gerrit.server.query.change.OrSource; import com.google.inject.Inject; import com.google.inject.Singleton; @@ -174,7 +175,7 @@ public class ChangeIndexRewriter implements IndexRewriter { // Replace any limits with the limit provided by the caller. The caller // should have already searched the predicate tree for limit predicates // and included that in their limit computation. - return new LimitPredicate(opts.limit()); + return new LimitPredicate<>(ChangeQueryBuilder.FIELD_LIMIT, opts.limit()); } else if (!isRewritePossible(in)) { return null; // magic to indicate "in" cannot be rewritten } diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/query/change/LimitPredicate.java b/gerrit-server/src/main/java/com/google/gerrit/server/query/LimitPredicate.java similarity index 59% rename from gerrit-server/src/main/java/com/google/gerrit/server/query/change/LimitPredicate.java rename to gerrit-server/src/main/java/com/google/gerrit/server/query/LimitPredicate.java index 0e90ddf761..d4e7440545 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/query/change/LimitPredicate.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/query/LimitPredicate.java @@ -12,31 +12,24 @@ // See the License for the specific language governing permissions and // limitations under the License. -package com.google.gerrit.server.query.change; +package com.google.gerrit.server.query; -import static com.google.gerrit.server.query.change.ChangeQueryBuilder.FIELD_LIMIT; - -import com.google.gerrit.server.query.IntPredicate; -import com.google.gerrit.server.query.Predicate; -import com.google.gerrit.server.query.QueryBuilder; -import com.google.gerrit.server.query.QueryParseException; - -public class LimitPredicate extends IntPredicate { +public class LimitPredicate extends IntPredicate { @SuppressWarnings("unchecked") - public static Integer getLimit(Predicate p) { - IntPredicate ip = QueryBuilder.find(p, IntPredicate.class, FIELD_LIMIT); + public static Integer getLimit(String fieldName, Predicate p) { + IntPredicate ip = QueryBuilder.find(p, IntPredicate.class, fieldName); return ip != null ? ip.intValue() : null; } - public LimitPredicate(int limit) throws QueryParseException { - super(ChangeQueryBuilder.FIELD_LIMIT, limit); + public LimitPredicate(String fieldName, int limit) throws QueryParseException { + super(fieldName, limit); if (limit <= 0) { throw new QueryParseException("limit must be positive: " + limit); } } @Override - public boolean match(ChangeData object) { + public boolean match(T object) { return true; } diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/query/change/ChangeQueryBuilder.java b/gerrit-server/src/main/java/com/google/gerrit/server/query/change/ChangeQueryBuilder.java index 6274fd98eb..515a3fce8c 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/query/change/ChangeQueryBuilder.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/query/change/ChangeQueryBuilder.java @@ -63,6 +63,7 @@ import com.google.gerrit.server.patch.PatchListCache; import com.google.gerrit.server.project.ChangeControl; import com.google.gerrit.server.project.ListChildProjects; import com.google.gerrit.server.project.ProjectCache; +import com.google.gerrit.server.query.LimitPredicate; import com.google.gerrit.server.query.Predicate; import com.google.gerrit.server.query.QueryBuilder; import com.google.gerrit.server.query.QueryParseException; @@ -843,7 +844,8 @@ public class ChangeQueryBuilder extends QueryBuilder { @Operator public Predicate limit(String limit) throws QueryParseException { - return new LimitPredicate(Integer.parseInt(limit)); + return new LimitPredicate<>(ChangeQueryBuilder.FIELD_LIMIT, + Integer.parseInt(limit)); } @Operator diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/query/change/QueryProcessor.java b/gerrit-server/src/main/java/com/google/gerrit/server/query/change/QueryProcessor.java index 09196e58bc..54726569f2 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/query/change/QueryProcessor.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/query/change/QueryProcessor.java @@ -15,6 +15,7 @@ package com.google.gerrit.server.query.change; import static com.google.common.base.Preconditions.checkState; +import static com.google.gerrit.server.query.change.ChangeQueryBuilder.FIELD_LIMIT; import static com.google.gerrit.server.query.change.ChangeStatusPredicate.open; import com.google.common.base.Throwables; @@ -36,6 +37,7 @@ import com.google.gerrit.server.index.change.ChangeIndexRewriter; import com.google.gerrit.server.index.change.IndexedChangeQuery; import com.google.gerrit.server.notedb.ChangeNotes; import com.google.gerrit.server.project.ChangeControl; +import com.google.gerrit.server.query.LimitPredicate; import com.google.gerrit.server.query.Predicate; import com.google.gerrit.server.query.QueryParseException; import com.google.gwtorm.server.OrmException; @@ -245,7 +247,7 @@ public class QueryProcessor { if (limitFromCaller > 0) { possibleLimits.add(limitFromCaller); } - Integer limitFromPredicate = LimitPredicate.getLimit(p); + Integer limitFromPredicate = LimitPredicate.getLimit(FIELD_LIMIT, p); if (limitFromPredicate != null) { possibleLimits.add(limitFromPredicate); }