diff --git a/Documentation/dev-plugins.txt b/Documentation/dev-plugins.txt index 2a5804171d..0b275c104a 100644 --- a/Documentation/dev-plugins.txt +++ b/Documentation/dev-plugins.txt @@ -633,7 +633,7 @@ defintion which creates a `MyPredicate`: @Singleton public class SampleOperator implements ChangeQueryBuilder.ChangeOperatorFactory { - public static class MyPredicate extends OperatorPredicate { + public static class MyPredicate extends OperatorChangePredicate { ... } diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/index/IndexPredicate.java b/gerrit-server/src/main/java/com/google/gerrit/server/index/IndexPredicate.java index d3b9e95a7c..ff9ff03dcf 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/index/IndexPredicate.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/index/IndexPredicate.java @@ -20,7 +20,7 @@ import com.google.gerrit.server.query.OperatorPredicate; public abstract class IndexPredicate extends OperatorPredicate { private final FieldDef def; - public IndexPredicate(FieldDef def, String value) { + protected IndexPredicate(FieldDef def, String value) { super(def.getName(), value); this.def = def; } diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/index/IndexedQuery.java b/gerrit-server/src/main/java/com/google/gerrit/server/index/IndexedQuery.java index 3040ca68e1..65097b477a 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/index/IndexedQuery.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/index/IndexedQuery.java @@ -14,10 +14,8 @@ package com.google.gerrit.server.index; -import com.google.common.base.Function; import com.google.common.base.MoreObjects; import com.google.common.collect.ImmutableList; -import com.google.common.collect.Iterables; import com.google.gerrit.server.query.DataSource; import com.google.gerrit.server.query.Paginated; import com.google.gerrit.server.query.Predicate; @@ -26,10 +24,7 @@ import com.google.gwtorm.server.OrmException; import com.google.gwtorm.server.ResultSet; import java.util.Collection; -import java.util.HashMap; -import java.util.Iterator; import java.util.List; -import java.util.Map; /** * Wrapper combining an {@link IndexPredicate} together with a @@ -48,8 +43,7 @@ public class IndexedQuery extends Predicate private QueryOptions opts; private final Predicate pred; - private DataSource source; - private final Map> fromSource; + protected DataSource source; public IndexedQuery(Index index, Predicate pred, QueryOptions opts) throws QueryParseException { @@ -57,7 +51,6 @@ public class IndexedQuery extends Predicate this.opts = opts; this.pred = pred; this.source = index.getSource(pred, this.opts); - this.fromSource = new HashMap<>(); } @Override @@ -90,38 +83,7 @@ public class IndexedQuery extends Predicate @Override public ResultSet read() throws OrmException { - final DataSource currSource = source; - final ResultSet rs = currSource.read(); - - return new ResultSet() { - @Override - public Iterator iterator() { - return Iterables.transform( - rs, - new Function() { - @Override - public - T apply(T t) { - fromSource.put(t, currSource); - return t; - } - }).iterator(); - } - - @Override - public List toList() { - List r = rs.toList(); - for (T t : r) { - fromSource.put(t, currSource); - } - return r; - } - - @Override - public void close() { - rs.close(); - } - }; + return source.read(); } @Override @@ -145,19 +107,6 @@ public class IndexedQuery extends Predicate return this; } - @Override - public boolean match(T t) throws OrmException { - return (source != null && fromSource.get(t) == source) || pred.match(t); - } - - @Override - public int getCost() { - // Index queries are assumed to be cheaper than any other type of query, so - // so try to make sure they get picked. Note that pred's cost may be higher - // because it doesn't know whether it's being used in an index query or not. - return 1; - } - @Override public int hashCode() { return pred.hashCode(); diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/index/IntegerRangePredicate.java b/gerrit-server/src/main/java/com/google/gerrit/server/index/IntegerRangePredicate.java index 125995152d..52c120190b 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/index/IntegerRangePredicate.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/index/IntegerRangePredicate.java @@ -33,7 +33,6 @@ public abstract class IntegerRangePredicate extends IndexPredicate { protected abstract int getValueInt(T object) throws OrmException; - @Override public boolean match(T object) throws OrmException { int valueInt = getValueInt(object); return valueInt >= range.min && valueInt <= range.max; @@ -48,9 +47,4 @@ public abstract class IntegerRangePredicate extends IndexPredicate { public int getMaximumValue() { return range.max; } - - @Override - public int getCost() { - return 1; - } } diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/index/TimestampRangePredicate.java b/gerrit-server/src/main/java/com/google/gerrit/server/index/TimestampRangePredicate.java index 8ba7df92a2..1e2e80b188 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/index/TimestampRangePredicate.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/index/TimestampRangePredicate.java @@ -38,9 +38,4 @@ public abstract class TimestampRangePredicate extends IndexPredicate { public abstract Date getMinTimestamp(); public abstract Date getMaxTimestamp(); - - @Override - public int getCost() { - return 1; - } } diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/index/change/IndexedChangeQuery.java b/gerrit-server/src/main/java/com/google/gerrit/server/index/change/IndexedChangeQuery.java index 8fe02f4d06..996caa7f0e 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/index/change/IndexedChangeQuery.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/index/change/IndexedChangeQuery.java @@ -14,22 +14,33 @@ package com.google.gerrit.server.index.change; +import static com.google.common.base.Preconditions.checkState; import static com.google.gerrit.server.index.change.ChangeField.CHANGE; import static com.google.gerrit.server.index.change.ChangeField.PROJECT; import com.google.common.annotations.VisibleForTesting; +import com.google.common.base.Function; import com.google.common.collect.ImmutableSet; +import com.google.common.collect.Iterables; import com.google.gerrit.reviewdb.client.Change; import com.google.gerrit.server.index.IndexConfig; import com.google.gerrit.server.index.IndexPredicate; import com.google.gerrit.server.index.IndexedQuery; import com.google.gerrit.server.index.QueryOptions; +import com.google.gerrit.server.query.DataSource; +import com.google.gerrit.server.query.Matchable; import com.google.gerrit.server.query.Predicate; import com.google.gerrit.server.query.QueryParseException; import com.google.gerrit.server.query.change.ChangeData; import com.google.gerrit.server.query.change.ChangeDataSource; +import com.google.gwtorm.server.OrmException; +import com.google.gwtorm.server.ResultSet; +import java.util.HashMap; import java.util.HashSet; +import java.util.Iterator; +import java.util.List; +import java.util.Map; import java.util.Set; /** @@ -41,7 +52,7 @@ import java.util.Set; * {@link ChangeDataSource} to be chosen by the query processor. */ public class IndexedChangeQuery extends IndexedQuery - implements ChangeDataSource { + implements ChangeDataSource, Matchable { public static QueryOptions oneResult() { return createOptions(IndexConfig.createDefault(), 0, 1, ImmutableSet. of()); @@ -65,9 +76,68 @@ public class IndexedChangeQuery extends IndexedQuery opts.limit(), opts.fields()); } + private final Map> fromSource; + public IndexedChangeQuery(ChangeIndex index, Predicate pred, QueryOptions opts) throws QueryParseException { super(index, pred, convertOptions(opts)); + this.fromSource = new HashMap<>(); + } + + @Override + public ResultSet read() throws OrmException { + final DataSource currSource = source; + final ResultSet rs = currSource.read(); + + return new ResultSet() { + @Override + public Iterator iterator() { + return Iterables.transform( + rs, + new Function() { + @Override + public ChangeData apply(ChangeData cd) { + fromSource.put(cd, currSource); + return cd; + } + }).iterator(); + } + + @Override + public List toList() { + List r = rs.toList(); + for (ChangeData cd : r) { + fromSource.put(cd, currSource); + } + return r; + } + + @Override + public void close() { + rs.close(); + } + }; + } + + @Override + public boolean match(ChangeData cd) throws OrmException { + if (source != null && fromSource.get(cd) == source) { + return true; + } + + Predicate pred = getChild(0); + checkState(pred.isMatchable(), + "match invoked, but child predicate %s " + "doesn't implement %s", pred, + Matchable.class.getName()); + return pred.asMatchable().match(cd); + } + + @Override + public int getCost() { + // Index queries are assumed to be cheaper than any other type of query, so + // so try to make sure they get picked. Note that pred's cost may be higher + // because it doesn't know whether it's being used in an index query or not. + return 1; } @Override diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/mail/ProjectWatch.java b/gerrit-server/src/main/java/com/google/gerrit/server/mail/ProjectWatch.java index 8a80bfed63..6e4e1d405e 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/mail/ProjectWatch.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/mail/ProjectWatch.java @@ -211,6 +211,6 @@ public class ProjectWatch { p = Predicate.and(filterPredicate, p); } } - return p == null || p.match(changeData); + return p == null || p.asMatchable().match(changeData); } } diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/query/AndPredicate.java b/gerrit-server/src/main/java/com/google/gerrit/server/query/AndPredicate.java index 39b0fa300a..899e7891df 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/query/AndPredicate.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/query/AndPredicate.java @@ -14,6 +14,8 @@ package com.google.gerrit.server.query; +import static com.google.common.base.Preconditions.checkState; + import com.google.gwtorm.server.OrmException; import java.util.ArrayList; @@ -23,7 +25,7 @@ import java.util.Collections; import java.util.List; /** Requires all predicates to be true. */ -public class AndPredicate extends Predicate { +public class AndPredicate extends Predicate implements Matchable { private final List> children; private final int cost; @@ -39,11 +41,11 @@ public class AndPredicate extends Predicate { if (getClass() == p.getClass()) { for (Predicate gp : p.getChildren()) { t.add(gp); - c += gp.getCost(); + c += gp.estimateCost(); } } else { t.add(p); - c += p.getCost(); + c += p.estimateCost(); } } children = t; @@ -70,10 +72,22 @@ public class AndPredicate extends Predicate { return new AndPredicate<>(children); } + @Override + public boolean isMatchable() { + for (Predicate c : children) { + if (!c.isMatchable()) { + return false; + } + } + return true; + } + @Override public boolean match(final T object) throws OrmException { - for (final Predicate c : children) { - if (!c.match(object)) { + for (Predicate c : children) { + checkState(c.isMatchable(), "match invoked, but child predicate %s " + + "doesn't implement %s", c, Matchable.class.getName()); + if (!c.asMatchable().match(object)) { return false; } } diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/query/AndSource.java b/gerrit-server/src/main/java/com/google/gerrit/server/query/AndSource.java index 4b623332af..168be5d784 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/query/AndSource.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/query/AndSource.java @@ -36,17 +36,29 @@ public class AndSource extends AndPredicate implements DataSource, Comparator> { protected final DataSource source; + private final IsVisibleToPredicate isVisibleToPredicate; private final int start; private final int cardinality; - public AndSource(Collection> that) { - this(that, 0); + this(that, null, 0); } - public AndSource(Collection> that, int start) { + public AndSource(Predicate that, + IsVisibleToPredicate isVisibleToPredicate) { + this(that, isVisibleToPredicate, 0); + } + + public AndSource(Predicate that, + IsVisibleToPredicate isVisibleToPredicate, int start) { + this(ImmutableList.of(that), isVisibleToPredicate, start); + } + + public AndSource(Collection> that, + IsVisibleToPredicate isVisibleToPredicate, int start) { super(that); checkArgument(start >= 0, "negative start: %s", start); + this.isVisibleToPredicate = isVisibleToPredicate; this.start = start; int c = Integer.MAX_VALUE; @@ -56,9 +68,10 @@ public class AndSource extends AndPredicate if (p instanceof DataSource) { c = Math.min(c, ((DataSource) p).getCardinality()); - if (p.getCost() < minCost) { + int cost = p.estimateCost(); + if (cost < minCost) { s = toDataSource(p); - minCost = p.getCost(); + minCost = cost; } } } @@ -85,7 +98,7 @@ public class AndSource extends AndPredicate int nextStart = 0; boolean skipped = false; for (T data : buffer(source.read())) { - if (match(data)) { + if (!isMatchable() || match(data)) { r.add(data); } else { skipped = true; @@ -124,6 +137,24 @@ public class AndSource extends AndPredicate return new ListResultSet<>(r); } + @Override + public boolean isMatchable() { + return isVisibleToPredicate != null || super.isMatchable(); + } + + @Override + public boolean match(T object) throws OrmException { + if (isVisibleToPredicate != null && !isVisibleToPredicate.match(object)) { + return false; + } + + if (super.isMatchable() && !super.match(object)) { + return false; + } + + return true; + } + private Iterable buffer(ResultSet scanner) { return FluentIterable.from(Iterables.partition(scanner, 50)) .transformAndConcat(new Function, List>() { @@ -156,7 +187,7 @@ public class AndSource extends AndPredicate int cmp = ai - bi; if (cmp == 0) { - cmp = a.getCost() - b.getCost(); + cmp = a.estimateCost() - b.estimateCost(); } if (cmp == 0 diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/query/IsVisibleToPredicate.java b/gerrit-server/src/main/java/com/google/gerrit/server/query/IsVisibleToPredicate.java new file mode 100644 index 0000000000..38411e3a51 --- /dev/null +++ b/gerrit-server/src/main/java/com/google/gerrit/server/query/IsVisibleToPredicate.java @@ -0,0 +1,22 @@ +// Copyright (C) 2016 The Android Open Source Project +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package com.google.gerrit.server.query; + +public abstract class IsVisibleToPredicate extends OperatorPredicate + implements Matchable { + public IsVisibleToPredicate(String name, String value) { + super(name, value); + } +} diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/query/LimitPredicate.java b/gerrit-server/src/main/java/com/google/gerrit/server/query/LimitPredicate.java index d4e7440545..7c38e5a847 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/query/LimitPredicate.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/query/LimitPredicate.java @@ -14,7 +14,7 @@ package com.google.gerrit.server.query; -public class LimitPredicate extends IntPredicate { +public class LimitPredicate extends IntPredicate implements Matchable { @SuppressWarnings("unchecked") public static Integer getLimit(String fieldName, Predicate p) { IntPredicate ip = QueryBuilder.find(p, IntPredicate.class, fieldName); diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/query/Matchable.java b/gerrit-server/src/main/java/com/google/gerrit/server/query/Matchable.java new file mode 100644 index 0000000000..b37e1121d6 --- /dev/null +++ b/gerrit-server/src/main/java/com/google/gerrit/server/query/Matchable.java @@ -0,0 +1,29 @@ +// Copyright (C) 2016 The Android Open Source Project +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package com.google.gerrit.server.query; + +import com.google.gwtorm.server.OrmException; + +public interface Matchable { + /** + * Does this predicate match this object? + * + * @throws OrmException + */ + boolean match(T object) throws OrmException; + + /** @return a cost estimate to run this predicate, higher figures cost more. */ + int getCost(); +} diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/query/NotPredicate.java b/gerrit-server/src/main/java/com/google/gerrit/server/query/NotPredicate.java index 248fb9caef..8ffba72f9b 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/query/NotPredicate.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/query/NotPredicate.java @@ -14,6 +14,8 @@ package com.google.gerrit.server.query; +import static com.google.common.base.Preconditions.checkState; + import com.google.gwtorm.server.OrmException; import java.util.Collection; @@ -21,7 +23,7 @@ import java.util.Collections; import java.util.List; /** Negates the result of another predicate. */ -public class NotPredicate extends Predicate { +public class NotPredicate extends Predicate implements Matchable { private final Predicate that; protected NotPredicate(final Predicate that) { @@ -57,14 +59,21 @@ public class NotPredicate extends Predicate { return new NotPredicate<>(children.iterator().next()); } + @Override + public boolean isMatchable() { + return that.isMatchable(); + } + @Override public boolean match(final T object) throws OrmException { - return !that.match(object); + checkState(that.isMatchable(), "match invoked, but child predicate %s " + + "doesn't implement %s", that, Matchable.class.getName()); + return !that.asMatchable().match(object); } @Override public int getCost() { - return that.getCost(); + return that.estimateCost(); } @Override diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/query/OperatorPredicate.java b/gerrit-server/src/main/java/com/google/gerrit/server/query/OperatorPredicate.java index e9fea02091..2cb70afd19 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/query/OperatorPredicate.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/query/OperatorPredicate.java @@ -22,7 +22,7 @@ public abstract class OperatorPredicate extends Predicate { private final String name; private final String value; - public OperatorPredicate(final String name, final String value) { + protected OperatorPredicate(final String name, final String value) { this.name = name; this.value = value; } diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/query/OrPredicate.java b/gerrit-server/src/main/java/com/google/gerrit/server/query/OrPredicate.java index 2432a41a41..ad15286e31 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/query/OrPredicate.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/query/OrPredicate.java @@ -14,6 +14,8 @@ package com.google.gerrit.server.query; +import static com.google.common.base.Preconditions.checkState; + import com.google.gwtorm.server.OrmException; import java.util.ArrayList; @@ -23,7 +25,7 @@ import java.util.Collections; import java.util.List; /** Requires one predicate to be true. */ -public class OrPredicate extends Predicate { +public class OrPredicate extends Predicate implements Matchable { private final List> children; private final int cost; @@ -39,11 +41,11 @@ public class OrPredicate extends Predicate { if (getClass() == p.getClass()) { for (Predicate gp : p.getChildren()) { t.add(gp); - c += gp.getCost(); + c += gp.estimateCost(); } } else { t.add(p); - c += p.getCost(); + c += p.estimateCost(); } } children = t; @@ -70,10 +72,22 @@ public class OrPredicate extends Predicate { return new OrPredicate<>(children); } + @Override + public boolean isMatchable() { + for (Predicate c : children) { + if (!c.isMatchable()) { + return false; + } + } + return true; + } + @Override public boolean match(final T object) throws OrmException { for (final Predicate c : children) { - if (c.match(object)) { + checkState(c.isMatchable(), "match invoked, but child predicate %s " + + "doesn't implement %s", c, Matchable.class.getName()); + if (c.asMatchable().match(object)) { return true; } } diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/query/Predicate.java b/gerrit-server/src/main/java/com/google/gerrit/server/query/Predicate.java index f4be013473..3a38da6ddd 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/query/Predicate.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/query/Predicate.java @@ -14,8 +14,9 @@ package com.google.gerrit.server.query; +import static com.google.common.base.Preconditions.checkState; + import com.google.common.collect.Iterables; -import com.google.gwtorm.server.OrmException; import java.util.Collection; import java.util.Collections; @@ -113,15 +114,23 @@ public abstract class Predicate { /** Create a copy of this predicate, with new children. */ public abstract Predicate copy(Collection> children); - /** - * Does this predicate match this object? - * - * @throws OrmException - */ - public abstract boolean match(T object) throws OrmException; + public boolean isMatchable() { + return this instanceof Matchable; + } + + @SuppressWarnings("unchecked") + public Matchable asMatchable() { + checkState(isMatchable(), "not matchable"); + return (Matchable) this; + } /** @return a cost estimate to run this predicate, higher figures cost more. */ - public abstract int getCost(); + public int estimateCost() { + if (!isMatchable()) { + return 1; + } + return asMatchable().getCost(); + } @Override public abstract int hashCode(); @@ -129,7 +138,7 @@ public abstract class Predicate { @Override public abstract boolean equals(Object other); - private static class Any extends Predicate { + private static class Any extends Predicate implements Matchable { private static final Any INSTANCE = new Any<>(); private Any() { diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/query/account/AccountIdPredicate.java b/gerrit-server/src/main/java/com/google/gerrit/server/query/account/AccountIdPredicate.java index 659f5d8bbe..8fda4c0b2d 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/query/account/AccountIdPredicate.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/query/account/AccountIdPredicate.java @@ -18,25 +18,10 @@ import com.google.gerrit.reviewdb.client.Account; import com.google.gerrit.server.account.AccountState; import com.google.gerrit.server.index.IndexPredicate; import com.google.gerrit.server.index.account.AccountField; -import com.google.gwtorm.server.OrmException; public class AccountIdPredicate extends IndexPredicate { - private final Account.Id accountId; - public AccountIdPredicate(Account.Id accountId) { super(AccountField.ID, AccountQueryBuilder.FIELD_ACCOUNT, accountId.toString()); - this.accountId = accountId; } - - @Override - public boolean match(AccountState accountState) throws OrmException { - return accountId.equals(accountState.getAccount().getId()); - } - - @Override - public int getCost() { - return 1; - } - } diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/query/account/IsVisibleToPredicate.java b/gerrit-server/src/main/java/com/google/gerrit/server/query/account/AccountIsVisibleToPredicate.java similarity index 88% rename from gerrit-server/src/main/java/com/google/gerrit/server/query/account/IsVisibleToPredicate.java rename to gerrit-server/src/main/java/com/google/gerrit/server/query/account/AccountIsVisibleToPredicate.java index 8fbe4cfee5..dc68a61342 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/query/account/IsVisibleToPredicate.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/query/account/AccountIsVisibleToPredicate.java @@ -17,11 +17,12 @@ package com.google.gerrit.server.query.account; import com.google.gerrit.server.CurrentUser; import com.google.gerrit.server.account.AccountControl; import com.google.gerrit.server.account.AccountState; -import com.google.gerrit.server.query.OperatorPredicate; +import com.google.gerrit.server.query.IsVisibleToPredicate; import com.google.gerrit.server.query.change.SingleGroupUser; import com.google.gwtorm.server.OrmException; -public class IsVisibleToPredicate extends OperatorPredicate { +public class AccountIsVisibleToPredicate + extends IsVisibleToPredicate { private static String describe(CurrentUser user) { if (user.isIdentifiedUser()) { return user.getAccountId().toString(); @@ -35,7 +36,7 @@ public class IsVisibleToPredicate extends OperatorPredicate { private final AccountControl accountControl; - IsVisibleToPredicate(AccountControl accountControl) { + AccountIsVisibleToPredicate(AccountControl accountControl) { super(AccountQueryBuilder.FIELD_VISIBLETO, describe(accountControl.getUser())); this.accountControl = accountControl; diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/query/account/AccountQueryProcessor.java b/gerrit-server/src/main/java/com/google/gerrit/server/query/account/AccountQueryProcessor.java index b2be7b5113..4819404fef 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/query/account/AccountQueryProcessor.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/query/account/AccountQueryProcessor.java @@ -14,13 +14,14 @@ package com.google.gerrit.server.query.account; +import static com.google.common.base.Preconditions.checkState; import static com.google.gerrit.server.query.account.AccountQueryBuilder.FIELD_LIMIT; -import com.google.common.collect.ImmutableList; import com.google.gerrit.server.CurrentUser; import com.google.gerrit.server.account.AccountControl; import com.google.gerrit.server.account.AccountState; import com.google.gerrit.server.index.IndexConfig; +import com.google.gerrit.server.index.IndexPredicate; import com.google.gerrit.server.index.account.AccountIndexCollection; import com.google.gerrit.server.index.account.AccountIndexRewriter; import com.google.gerrit.server.index.account.AccountSchemaDefinitions; @@ -33,6 +34,13 @@ import com.google.inject.Provider; public class AccountQueryProcessor extends QueryProcessor { private final AccountControl.Factory accountControlFactory; + static { + // It is assumed that basic rewrites do not touch visibleto predicates. + checkState( + !AccountIsVisibleToPredicate.class.isAssignableFrom(IndexPredicate.class), + "AccountQueryProcessor assumes visibleto is not used by the index rewriter."); + } + @Inject protected AccountQueryProcessor(Provider userProvider, Metrics metrics, @@ -48,7 +56,7 @@ public class AccountQueryProcessor extends QueryProcessor { @Override protected Predicate enforceVisibility( Predicate pred) { - return new AndSource<>(ImmutableList.of(pred, - new IsVisibleToPredicate(accountControlFactory.get()))); + return new AndSource<>(pred, + new AccountIsVisibleToPredicate(accountControlFactory.get())); } } diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/query/change/AddedPredicate.java b/gerrit-server/src/main/java/com/google/gerrit/server/query/change/AddedPredicate.java index b20a1946cc..241b7fc815 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/query/change/AddedPredicate.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/query/change/AddedPredicate.java @@ -14,12 +14,11 @@ package com.google.gerrit.server.query.change; -import com.google.gerrit.server.index.IntegerRangePredicate; import com.google.gerrit.server.index.change.ChangeField; import com.google.gerrit.server.query.QueryParseException; import com.google.gwtorm.server.OrmException; -public class AddedPredicate extends IntegerRangePredicate { +public class AddedPredicate extends IntegerRangeChangePredicate { AddedPredicate(String value) throws QueryParseException { super(ChangeField.ADDED, value); } diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/query/change/AfterPredicate.java b/gerrit-server/src/main/java/com/google/gerrit/server/query/change/AfterPredicate.java index 5ed871a0b8..477bf16293 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/query/change/AfterPredicate.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/query/change/AfterPredicate.java @@ -14,14 +14,13 @@ package com.google.gerrit.server.query.change; -import com.google.gerrit.server.index.TimestampRangePredicate; import com.google.gerrit.server.index.change.ChangeField; import com.google.gerrit.server.query.QueryParseException; import com.google.gwtorm.server.OrmException; import java.util.Date; -public class AfterPredicate extends TimestampRangePredicate { +public class AfterPredicate extends TimestampRangeChangePredicate { private final Date cut; AfterPredicate(String value) throws QueryParseException { diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/query/change/AgePredicate.java b/gerrit-server/src/main/java/com/google/gerrit/server/query/change/AgePredicate.java index 2b140d34c7..fd6cbee292 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/query/change/AgePredicate.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/query/change/AgePredicate.java @@ -20,13 +20,12 @@ import static java.util.concurrent.TimeUnit.SECONDS; import com.google.gerrit.common.TimeUtil; import com.google.gerrit.reviewdb.client.Change; import com.google.gerrit.server.config.ConfigUtil; -import com.google.gerrit.server.index.TimestampRangePredicate; import com.google.gerrit.server.index.change.ChangeField; import com.google.gwtorm.server.OrmException; import java.sql.Timestamp; -public class AgePredicate extends TimestampRangePredicate { +public class AgePredicate extends TimestampRangeChangePredicate { private final long cut; AgePredicate(String value) { diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/query/change/AndChangeSource.java b/gerrit-server/src/main/java/com/google/gerrit/server/query/change/AndChangeSource.java index d40e53f1ca..bd7daede9d 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/query/change/AndChangeSource.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/query/change/AndChangeSource.java @@ -15,6 +15,7 @@ package com.google.gerrit.server.query.change; import com.google.gerrit.server.query.AndSource; +import com.google.gerrit.server.query.IsVisibleToPredicate; import com.google.gerrit.server.query.Predicate; import com.google.gwtorm.server.OrmException; import com.google.gwtorm.server.OrmRuntimeException; @@ -25,13 +26,13 @@ import java.util.List; public class AndChangeSource extends AndSource implements ChangeDataSource { - public AndChangeSource(Collection> that) { - super(that, 0); + public AndChangeSource(Collection> that) { + super(that); } - public AndChangeSource(Collection> that, - int start) { - super(that, start); + public AndChangeSource(Predicate that, + IsVisibleToPredicate isVisibleToPredicate, int start) { + super(that, isVisibleToPredicate, start); } @Override diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/query/change/AuthorPredicate.java b/gerrit-server/src/main/java/com/google/gerrit/server/query/change/AuthorPredicate.java index ae192ab959..ebaaab9fbd 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/query/change/AuthorPredicate.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/query/change/AuthorPredicate.java @@ -17,11 +17,10 @@ package com.google.gerrit.server.query.change; import static com.google.gerrit.server.index.change.ChangeField.AUTHOR; import static com.google.gerrit.server.query.change.ChangeQueryBuilder.FIELD_AUTHOR; -import com.google.gerrit.server.index.IndexPredicate; import com.google.gerrit.server.index.change.ChangeField; import com.google.gwtorm.server.OrmException; -public class AuthorPredicate extends IndexPredicate { +public class AuthorPredicate extends ChangeIndexPredicate { AuthorPredicate(String value) { super(AUTHOR, FIELD_AUTHOR, value.toLowerCase()); } diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/query/change/BeforePredicate.java b/gerrit-server/src/main/java/com/google/gerrit/server/query/change/BeforePredicate.java index 0618cc20fa..f36a163126 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/query/change/BeforePredicate.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/query/change/BeforePredicate.java @@ -14,14 +14,13 @@ package com.google.gerrit.server.query.change; -import com.google.gerrit.server.index.TimestampRangePredicate; import com.google.gerrit.server.index.change.ChangeField; import com.google.gerrit.server.query.QueryParseException; import com.google.gwtorm.server.OrmException; import java.util.Date; -public class BeforePredicate extends TimestampRangePredicate { +public class BeforePredicate extends TimestampRangeChangePredicate { private final Date cut; BeforePredicate(String value) throws QueryParseException { diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/query/change/ChangeIdPredicate.java b/gerrit-server/src/main/java/com/google/gerrit/server/query/change/ChangeIdPredicate.java index 1fbeb86634..85d433a5b1 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/query/change/ChangeIdPredicate.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/query/change/ChangeIdPredicate.java @@ -15,12 +15,11 @@ package com.google.gerrit.server.query.change; import com.google.gerrit.reviewdb.client.Change; -import com.google.gerrit.server.index.IndexPredicate; import com.google.gerrit.server.index.change.ChangeField; import com.google.gwtorm.server.OrmException; /** Predicate over Change-Id strings (aka Change.Key). */ -class ChangeIdPredicate extends IndexPredicate { +class ChangeIdPredicate extends ChangeIndexPredicate { ChangeIdPredicate(String id) { super(ChangeField.ID, ChangeQueryBuilder.FIELD_CHANGE, id); } diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/query/change/ChangeIndexPredicate.java b/gerrit-server/src/main/java/com/google/gerrit/server/query/change/ChangeIndexPredicate.java new file mode 100644 index 0000000000..80951fdea6 --- /dev/null +++ b/gerrit-server/src/main/java/com/google/gerrit/server/query/change/ChangeIndexPredicate.java @@ -0,0 +1,31 @@ +// Copyright (C) 2016 The Android Open Source Project +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package com.google.gerrit.server.query.change; + +import com.google.gerrit.server.index.FieldDef; +import com.google.gerrit.server.index.IndexPredicate; +import com.google.gerrit.server.query.Matchable; + +public abstract class ChangeIndexPredicate extends IndexPredicate + implements Matchable { + protected ChangeIndexPredicate(FieldDef def, String value) { + super(def, value); + } + + protected ChangeIndexPredicate(FieldDef def, String name, + String value) { + super(def, name, value); + } +} diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/query/change/IsVisibleToPredicate.java b/gerrit-server/src/main/java/com/google/gerrit/server/query/change/ChangeIsVisibleToPredicate.java similarity index 91% rename from gerrit-server/src/main/java/com/google/gerrit/server/query/change/IsVisibleToPredicate.java rename to gerrit-server/src/main/java/com/google/gerrit/server/query/change/ChangeIsVisibleToPredicate.java index c4214f28f5..303c9f8402 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/query/change/IsVisibleToPredicate.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/query/change/ChangeIsVisibleToPredicate.java @@ -20,11 +20,11 @@ import com.google.gerrit.server.CurrentUser; import com.google.gerrit.server.notedb.ChangeNotes; import com.google.gerrit.server.project.ChangeControl; import com.google.gerrit.server.project.NoSuchChangeException; -import com.google.gerrit.server.query.OperatorPredicate; +import com.google.gerrit.server.query.IsVisibleToPredicate; import com.google.gwtorm.server.OrmException; import com.google.inject.Provider; -class IsVisibleToPredicate extends OperatorPredicate { +class ChangeIsVisibleToPredicate extends IsVisibleToPredicate { private static String describe(CurrentUser user) { if (user.isIdentifiedUser()) { return user.getAccountId().toString(); @@ -41,7 +41,8 @@ class IsVisibleToPredicate extends OperatorPredicate { private final ChangeControl.GenericFactory changeControl; private final CurrentUser user; - IsVisibleToPredicate(Provider db, ChangeNotes.Factory notesFactory, + ChangeIsVisibleToPredicate(Provider db, + ChangeNotes.Factory notesFactory, ChangeControl.GenericFactory changeControlFactory, CurrentUser user) { super(ChangeQueryBuilder.FIELD_VISIBLETO, describe(user)); this.db = db; diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/query/change/ChangeOperatorPredicate.java b/gerrit-server/src/main/java/com/google/gerrit/server/query/change/ChangeOperatorPredicate.java new file mode 100644 index 0000000000..6bec5989f0 --- /dev/null +++ b/gerrit-server/src/main/java/com/google/gerrit/server/query/change/ChangeOperatorPredicate.java @@ -0,0 +1,26 @@ +// Copyright (C) 2016 The Android Open Source Project +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package com.google.gerrit.server.query.change; + +import com.google.gerrit.server.query.Matchable; +import com.google.gerrit.server.query.OperatorPredicate; + +public abstract class ChangeOperatorPredicate extends + OperatorPredicate implements Matchable { + + protected ChangeOperatorPredicate(String name, String value) { + super(name, value); + } +} 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 34128533dc..a150c9367f 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 @@ -768,7 +768,7 @@ public class ChangeQueryBuilder extends QueryBuilder { } public Predicate visibleto(CurrentUser user) { - return new IsVisibleToPredicate(args.db, args.notesFactory, + return new ChangeIsVisibleToPredicate(args.db, args.notesFactory, args.changeControlGenericFactory, user); } diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/query/change/ChangeQueryProcessor.java b/gerrit-server/src/main/java/com/google/gerrit/server/query/change/ChangeQueryProcessor.java index 4e534c81ab..44e5e7ec86 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/query/change/ChangeQueryProcessor.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/query/change/ChangeQueryProcessor.java @@ -17,7 +17,6 @@ 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 com.google.common.collect.ImmutableList; import com.google.gerrit.reviewdb.server.ReviewDb; import com.google.gerrit.server.CurrentUser; import com.google.gerrit.server.index.IndexConfig; @@ -44,7 +43,7 @@ public class ChangeQueryProcessor extends QueryProcessor { static { // It is assumed that basic rewrites do not touch visibleto predicates. checkState( - !IsVisibleToPredicate.class.isAssignableFrom(IndexPredicate.class), + !ChangeIsVisibleToPredicate.class.isAssignableFrom(IndexPredicate.class), "ChangeQueryProcessor assumes visibleto is not used by the index rewriter."); } @@ -80,7 +79,7 @@ public class ChangeQueryProcessor extends QueryProcessor { @Override protected Predicate enforceVisibility( Predicate pred) { - return new AndChangeSource(ImmutableList.of(pred, new IsVisibleToPredicate(db, - notesFactory, changeControlFactory, userProvider.get())), start); + return new AndChangeSource(pred, new ChangeIsVisibleToPredicate(db, + notesFactory, changeControlFactory, userProvider.get()), start); } } diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/query/change/ChangeRegexPredicate.java b/gerrit-server/src/main/java/com/google/gerrit/server/query/change/ChangeRegexPredicate.java new file mode 100644 index 0000000000..747d72da2f --- /dev/null +++ b/gerrit-server/src/main/java/com/google/gerrit/server/query/change/ChangeRegexPredicate.java @@ -0,0 +1,31 @@ +// Copyright (C) 2016 The Android Open Source Project +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package com.google.gerrit.server.query.change; + +import com.google.gerrit.server.index.FieldDef; +import com.google.gerrit.server.index.RegexPredicate; +import com.google.gerrit.server.query.Matchable; + +public abstract class ChangeRegexPredicate extends RegexPredicate + implements Matchable { + protected ChangeRegexPredicate(FieldDef def, String value) { + super(def, value); + } + + protected ChangeRegexPredicate(FieldDef def, String name, + String value) { + super(def, name, value); + } +} diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/query/change/ChangeStatusPredicate.java b/gerrit-server/src/main/java/com/google/gerrit/server/query/change/ChangeStatusPredicate.java index 4d42c33e5c..1c92ecfc90 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/query/change/ChangeStatusPredicate.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/query/change/ChangeStatusPredicate.java @@ -16,7 +16,6 @@ package com.google.gerrit.server.query.change; import com.google.gerrit.reviewdb.client.Change; import com.google.gerrit.reviewdb.client.Change.Status; -import com.google.gerrit.server.index.IndexPredicate; import com.google.gerrit.server.index.change.ChangeField; import com.google.gerrit.server.query.Predicate; import com.google.gwtorm.server.OrmException; @@ -36,7 +35,7 @@ import java.util.TreeMap; *

* Status names are looked up by prefix case-insensitively. */ -public final class ChangeStatusPredicate extends IndexPredicate { +public final class ChangeStatusPredicate extends ChangeIndexPredicate { private static final TreeMap> PREDICATES; private static final Predicate CLOSED; private static final Predicate OPEN; diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/query/change/CommentByPredicate.java b/gerrit-server/src/main/java/com/google/gerrit/server/query/change/CommentByPredicate.java index 1967a06658..48d6e050f8 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/query/change/CommentByPredicate.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/query/change/CommentByPredicate.java @@ -17,13 +17,12 @@ package com.google.gerrit.server.query.change; import com.google.gerrit.reviewdb.client.Account; import com.google.gerrit.reviewdb.client.ChangeMessage; import com.google.gerrit.reviewdb.client.PatchLineComment; -import com.google.gerrit.server.index.IndexPredicate; import com.google.gerrit.server.index.change.ChangeField; import com.google.gwtorm.server.OrmException; import java.util.Objects; -class CommentByPredicate extends IndexPredicate { +class CommentByPredicate extends ChangeIndexPredicate { private final Account.Id id; CommentByPredicate(Account.Id id) { diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/query/change/CommentPredicate.java b/gerrit-server/src/main/java/com/google/gerrit/server/query/change/CommentPredicate.java index 5e3fa3dc12..b351740b33 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/query/change/CommentPredicate.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/query/change/CommentPredicate.java @@ -14,7 +14,6 @@ package com.google.gerrit.server.query.change; -import com.google.gerrit.server.index.IndexPredicate; import com.google.gerrit.server.index.change.ChangeField; import com.google.gerrit.server.index.change.ChangeIndex; import com.google.gerrit.server.index.change.IndexedChangeQuery; @@ -22,7 +21,7 @@ import com.google.gerrit.server.query.Predicate; import com.google.gerrit.server.query.QueryParseException; import com.google.gwtorm.server.OrmException; -class CommentPredicate extends IndexPredicate { +class CommentPredicate extends ChangeIndexPredicate { private final ChangeIndex index; CommentPredicate(ChangeIndex index, String value) { diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/query/change/CommitPredicate.java b/gerrit-server/src/main/java/com/google/gerrit/server/query/change/CommitPredicate.java index 91b2c58aff..aa3dde3d0d 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/query/change/CommitPredicate.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/query/change/CommitPredicate.java @@ -20,10 +20,9 @@ import static org.eclipse.jgit.lib.Constants.OBJECT_ID_STRING_LENGTH; import com.google.gerrit.reviewdb.client.PatchSet; import com.google.gerrit.server.index.FieldDef; -import com.google.gerrit.server.index.IndexPredicate; import com.google.gwtorm.server.OrmException; -class CommitPredicate extends IndexPredicate { +class CommitPredicate extends ChangeIndexPredicate { static FieldDef commitField(String id) { if (id.length() == OBJECT_ID_STRING_LENGTH) { return EXACT_COMMIT; diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/query/change/CommitterPredicate.java b/gerrit-server/src/main/java/com/google/gerrit/server/query/change/CommitterPredicate.java index f923d0004c..06f537939d 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/query/change/CommitterPredicate.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/query/change/CommitterPredicate.java @@ -17,11 +17,10 @@ package com.google.gerrit.server.query.change; import static com.google.gerrit.server.index.change.ChangeField.COMMITTER; import static com.google.gerrit.server.query.change.ChangeQueryBuilder.FIELD_COMMITTER; -import com.google.gerrit.server.index.IndexPredicate; import com.google.gerrit.server.index.change.ChangeField; import com.google.gwtorm.server.OrmException; -public class CommitterPredicate extends IndexPredicate { +public class CommitterPredicate extends ChangeIndexPredicate { CommitterPredicate(String value) { super(COMMITTER, FIELD_COMMITTER, value.toLowerCase()); } diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/query/change/ConflictsPredicate.java b/gerrit-server/src/main/java/com/google/gerrit/server/query/change/ConflictsPredicate.java index 74865ecd5c..69bc2caa84 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/query/change/ConflictsPredicate.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/query/change/ConflictsPredicate.java @@ -25,7 +25,6 @@ import com.google.gerrit.server.git.strategy.SubmitDryRun; import com.google.gerrit.server.project.NoSuchProjectException; import com.google.gerrit.server.project.ProjectCache; import com.google.gerrit.server.project.ProjectState; -import com.google.gerrit.server.query.OperatorPredicate; import com.google.gerrit.server.query.OrPredicate; import com.google.gerrit.server.query.Predicate; import com.google.gerrit.server.query.change.ChangeQueryBuilder.Arguments; @@ -84,7 +83,7 @@ class ConflictsPredicate extends OrPredicate { predicatesForOneChange.add(or(or(filePredicates), new IsMergePredicate(args, value))); - predicatesForOneChange.add(new OperatorPredicate( + predicatesForOneChange.add(new ChangeOperatorPredicate( ChangeQueryBuilder.FIELD_CONFLICTS, value) { @Override diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/query/change/DeletedPredicate.java b/gerrit-server/src/main/java/com/google/gerrit/server/query/change/DeletedPredicate.java index 8e9ac739c0..9bd69568e1 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/query/change/DeletedPredicate.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/query/change/DeletedPredicate.java @@ -14,12 +14,11 @@ package com.google.gerrit.server.query.change; -import com.google.gerrit.server.index.IntegerRangePredicate; import com.google.gerrit.server.index.change.ChangeField; import com.google.gerrit.server.query.QueryParseException; import com.google.gwtorm.server.OrmException; -public class DeletedPredicate extends IntegerRangePredicate { +public class DeletedPredicate extends IntegerRangeChangePredicate { DeletedPredicate(String value) throws QueryParseException { super(ChangeField.DELETED, value); } diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/query/change/DeltaPredicate.java b/gerrit-server/src/main/java/com/google/gerrit/server/query/change/DeltaPredicate.java index a3eaa8a112..07e6590ac8 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/query/change/DeltaPredicate.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/query/change/DeltaPredicate.java @@ -14,13 +14,12 @@ package com.google.gerrit.server.query.change; -import com.google.gerrit.server.index.IntegerRangePredicate; import com.google.gerrit.server.index.change.ChangeField; import com.google.gerrit.server.query.QueryParseException; import com.google.gerrit.server.query.change.ChangeData.ChangedLines; import com.google.gwtorm.server.OrmException; -public class DeltaPredicate extends IntegerRangePredicate { +public class DeltaPredicate extends IntegerRangeChangePredicate { DeltaPredicate(String value) throws QueryParseException { super(ChangeField.DELTA, value); } diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/query/change/DestinationPredicate.java b/gerrit-server/src/main/java/com/google/gerrit/server/query/change/DestinationPredicate.java index 25fa09f71b..7e573dc944 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/query/change/DestinationPredicate.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/query/change/DestinationPredicate.java @@ -16,12 +16,11 @@ package com.google.gerrit.server.query.change; import com.google.gerrit.reviewdb.client.Branch; import com.google.gerrit.reviewdb.client.Change; -import com.google.gerrit.server.query.OperatorPredicate; import com.google.gwtorm.server.OrmException; import java.util.Set; -class DestinationPredicate extends OperatorPredicate { +class DestinationPredicate extends ChangeOperatorPredicate { Set destinations; DestinationPredicate(Set destinations, String value) { diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/query/change/EditByPredicate.java b/gerrit-server/src/main/java/com/google/gerrit/server/query/change/EditByPredicate.java index f1fa000f3d..8be5235590 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/query/change/EditByPredicate.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/query/change/EditByPredicate.java @@ -15,11 +15,10 @@ package com.google.gerrit.server.query.change; import com.google.gerrit.reviewdb.client.Account; -import com.google.gerrit.server.index.IndexPredicate; import com.google.gerrit.server.index.change.ChangeField; import com.google.gwtorm.server.OrmException; -class EditByPredicate extends IndexPredicate { +class EditByPredicate extends ChangeIndexPredicate { private final Account.Id id; EditByPredicate(Account.Id id) { diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/query/change/EqualsFilePredicate.java b/gerrit-server/src/main/java/com/google/gerrit/server/query/change/EqualsFilePredicate.java index 8c98b6f5ef..6877761c50 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/query/change/EqualsFilePredicate.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/query/change/EqualsFilePredicate.java @@ -14,13 +14,12 @@ package com.google.gerrit.server.query.change; -import com.google.gerrit.server.index.IndexPredicate; import com.google.gerrit.server.index.change.ChangeField; import com.google.gerrit.server.query.Predicate; import com.google.gerrit.server.query.change.ChangeQueryBuilder.Arguments; import com.google.gwtorm.server.OrmException; -class EqualsFilePredicate extends IndexPredicate { +class EqualsFilePredicate extends ChangeIndexPredicate { static Predicate create(Arguments args, String value) { Predicate eqPath = new EqualsPathPredicate(ChangeQueryBuilder.FIELD_FILE, value); diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/query/change/EqualsLabelPredicate.java b/gerrit-server/src/main/java/com/google/gerrit/server/query/change/EqualsLabelPredicate.java index b01fdbe446..e752b05c35 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/query/change/EqualsLabelPredicate.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/query/change/EqualsLabelPredicate.java @@ -23,7 +23,6 @@ import com.google.gerrit.reviewdb.client.Change; import com.google.gerrit.reviewdb.client.PatchSetApproval; import com.google.gerrit.reviewdb.server.ReviewDb; import com.google.gerrit.server.IdentifiedUser; -import com.google.gerrit.server.index.IndexPredicate; import com.google.gerrit.server.index.change.ChangeField; import com.google.gerrit.server.project.ChangeControl; import com.google.gerrit.server.project.NoSuchChangeException; @@ -32,7 +31,7 @@ import com.google.gerrit.server.project.ProjectState; import com.google.gwtorm.server.OrmException; import com.google.inject.Provider; -class EqualsLabelPredicate extends IndexPredicate { +class EqualsLabelPredicate extends ChangeIndexPredicate { private final ProjectCache projectCache; private final ChangeControl.GenericFactory ccFactory; private final IdentifiedUser.GenericFactory userFactory; diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/query/change/EqualsPathPredicate.java b/gerrit-server/src/main/java/com/google/gerrit/server/query/change/EqualsPathPredicate.java index 85c3cd5db2..5edd06ccd2 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/query/change/EqualsPathPredicate.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/query/change/EqualsPathPredicate.java @@ -14,14 +14,13 @@ package com.google.gerrit.server.query.change; -import com.google.gerrit.server.index.IndexPredicate; import com.google.gerrit.server.index.change.ChangeField; import com.google.gwtorm.server.OrmException; import java.util.Collections; import java.util.List; -class EqualsPathPredicate extends IndexPredicate { +class EqualsPathPredicate extends ChangeIndexPredicate { private final String value; EqualsPathPredicate(String fieldName, String value) { diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/query/change/ExactTopicPredicate.java b/gerrit-server/src/main/java/com/google/gerrit/server/query/change/ExactTopicPredicate.java index 6658577d69..510910e9be 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/query/change/ExactTopicPredicate.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/query/change/ExactTopicPredicate.java @@ -17,10 +17,9 @@ package com.google.gerrit.server.query.change; import static com.google.gerrit.server.index.change.ChangeField.EXACT_TOPIC; import com.google.gerrit.reviewdb.client.Change; -import com.google.gerrit.server.index.IndexPredicate; import com.google.gwtorm.server.OrmException; -class ExactTopicPredicate extends IndexPredicate { +class ExactTopicPredicate extends ChangeIndexPredicate { ExactTopicPredicate(String topic) { super(EXACT_TOPIC, topic); } diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/query/change/FuzzyTopicPredicate.java b/gerrit-server/src/main/java/com/google/gerrit/server/query/change/FuzzyTopicPredicate.java index 23b3ee6189..5651544d22 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/query/change/FuzzyTopicPredicate.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/query/change/FuzzyTopicPredicate.java @@ -18,14 +18,13 @@ import static com.google.gerrit.server.index.change.ChangeField.FUZZY_TOPIC; import com.google.common.collect.Iterables; import com.google.gerrit.reviewdb.client.Change; -import com.google.gerrit.server.index.IndexPredicate; import com.google.gerrit.server.index.change.ChangeIndex; import com.google.gerrit.server.index.change.IndexedChangeQuery; import com.google.gerrit.server.query.Predicate; import com.google.gerrit.server.query.QueryParseException; import com.google.gwtorm.server.OrmException; -class FuzzyTopicPredicate extends IndexPredicate { +class FuzzyTopicPredicate extends ChangeIndexPredicate { private final ChangeIndex index; FuzzyTopicPredicate(String topic, ChangeIndex index) { diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/query/change/GroupPredicate.java b/gerrit-server/src/main/java/com/google/gerrit/server/query/change/GroupPredicate.java index ff9c544cd8..9e9bc8d227 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/query/change/GroupPredicate.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/query/change/GroupPredicate.java @@ -15,13 +15,12 @@ package com.google.gerrit.server.query.change; import com.google.gerrit.reviewdb.client.PatchSet; -import com.google.gerrit.server.index.IndexPredicate; import com.google.gerrit.server.index.change.ChangeField; import com.google.gwtorm.server.OrmException; import java.util.List; -class GroupPredicate extends IndexPredicate { +class GroupPredicate extends ChangeIndexPredicate { GroupPredicate(String group) { super(ChangeField.GROUP, group); } diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/query/change/HasDraftByLegacyPredicate.java b/gerrit-server/src/main/java/com/google/gerrit/server/query/change/HasDraftByLegacyPredicate.java index f85a9ed765..45a00c61a5 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/query/change/HasDraftByLegacyPredicate.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/query/change/HasDraftByLegacyPredicate.java @@ -17,7 +17,6 @@ package com.google.gerrit.server.query.change; import com.google.gerrit.reviewdb.client.Account; import com.google.gerrit.reviewdb.client.Change; import com.google.gerrit.reviewdb.client.PatchLineComment; -import com.google.gerrit.server.query.OperatorPredicate; import com.google.gerrit.server.query.change.ChangeQueryBuilder.Arguments; import com.google.gwtorm.server.ListResultSet; import com.google.gwtorm.server.OrmException; @@ -29,8 +28,8 @@ import java.util.List; import java.util.Set; @Deprecated -class HasDraftByLegacyPredicate extends OperatorPredicate implements - ChangeDataSource { +class HasDraftByLegacyPredicate extends ChangeOperatorPredicate + implements ChangeDataSource { private final Arguments args; private final Account.Id accountId; diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/query/change/HasDraftByPredicate.java b/gerrit-server/src/main/java/com/google/gerrit/server/query/change/HasDraftByPredicate.java index c18e19cfc5..244589cb7c 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/query/change/HasDraftByPredicate.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/query/change/HasDraftByPredicate.java @@ -15,11 +15,10 @@ package com.google.gerrit.server.query.change; import com.google.gerrit.reviewdb.client.Account; -import com.google.gerrit.server.index.IndexPredicate; import com.google.gerrit.server.index.change.ChangeField; import com.google.gwtorm.server.OrmException; -class HasDraftByPredicate extends IndexPredicate { +class HasDraftByPredicate extends ChangeIndexPredicate { private final Account.Id accountId; HasDraftByPredicate(Account.Id accountId) { diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/query/change/HasStarsPredicate.java b/gerrit-server/src/main/java/com/google/gerrit/server/query/change/HasStarsPredicate.java index 83990bc58e..eb3a13794e 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/query/change/HasStarsPredicate.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/query/change/HasStarsPredicate.java @@ -15,11 +15,10 @@ package com.google.gerrit.server.query.change; import com.google.gerrit.reviewdb.client.Account; -import com.google.gerrit.server.index.IndexPredicate; import com.google.gerrit.server.index.change.ChangeField; import com.google.gwtorm.server.OrmException; -public class HasStarsPredicate extends IndexPredicate { +public class HasStarsPredicate extends ChangeIndexPredicate { private final Account.Id accountId; HasStarsPredicate(Account.Id accountId) { diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/query/change/HashtagPredicate.java b/gerrit-server/src/main/java/com/google/gerrit/server/query/change/HashtagPredicate.java index 3f952d3652..185a5390ea 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/query/change/HashtagPredicate.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/query/change/HashtagPredicate.java @@ -15,11 +15,10 @@ package com.google.gerrit.server.query.change; import com.google.gerrit.server.change.HashtagsUtil; -import com.google.gerrit.server.index.IndexPredicate; import com.google.gerrit.server.index.change.ChangeField; import com.google.gwtorm.server.OrmException; -class HashtagPredicate extends IndexPredicate { +class HashtagPredicate extends ChangeIndexPredicate { HashtagPredicate(String hashtag) { super(ChangeField.HASHTAG, HashtagsUtil.cleanupHashtag(hashtag)); } diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/query/change/IntegerRangeChangePredicate.java b/gerrit-server/src/main/java/com/google/gerrit/server/query/change/IntegerRangeChangePredicate.java new file mode 100644 index 0000000000..a272fbb0af --- /dev/null +++ b/gerrit-server/src/main/java/com/google/gerrit/server/query/change/IntegerRangeChangePredicate.java @@ -0,0 +1,34 @@ +// Copyright (C) 2016 The Android Open Source Project +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package com.google.gerrit.server.query.change; + +import com.google.gerrit.server.index.FieldDef; +import com.google.gerrit.server.index.IntegerRangePredicate; +import com.google.gerrit.server.query.Matchable; +import com.google.gerrit.server.query.QueryParseException; + +public abstract class IntegerRangeChangePredicate + extends IntegerRangePredicate implements Matchable { + + protected IntegerRangeChangePredicate(FieldDef type, + String value) throws QueryParseException { + super(type, value); + } + + @Override + public int getCost() { + return 1; + } +} diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/query/change/IsMergePredicate.java b/gerrit-server/src/main/java/com/google/gerrit/server/query/change/IsMergePredicate.java index 3c02babaf3..376ad847ae 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/query/change/IsMergePredicate.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/query/change/IsMergePredicate.java @@ -15,7 +15,6 @@ package com.google.gerrit.server.query.change; import com.google.gerrit.server.git.CodeReviewCommit; -import com.google.gerrit.server.query.OperatorPredicate; import com.google.gerrit.server.query.change.ChangeQueryBuilder.Arguments; import com.google.gwtorm.server.OrmException; @@ -26,7 +25,7 @@ import org.eclipse.jgit.revwalk.RevWalk; import java.io.IOException; -public class IsMergePredicate extends OperatorPredicate { +public class IsMergePredicate extends ChangeOperatorPredicate { private final Arguments args; public IsMergePredicate(Arguments args, String value) { diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/query/change/IsMergeablePredicate.java b/gerrit-server/src/main/java/com/google/gerrit/server/query/change/IsMergeablePredicate.java index 5dd7dd20c6..d998fa3879 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/query/change/IsMergeablePredicate.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/query/change/IsMergeablePredicate.java @@ -15,11 +15,10 @@ package com.google.gerrit.server.query.change; import com.google.gerrit.server.index.FieldDef.FillArgs; -import com.google.gerrit.server.index.IndexPredicate; import com.google.gerrit.server.index.change.ChangeField; import com.google.gwtorm.server.OrmException; -class IsMergeablePredicate extends IndexPredicate { +class IsMergeablePredicate extends ChangeIndexPredicate { private final FillArgs args; IsMergeablePredicate(FillArgs args) { diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/query/change/IsReviewedPredicate.java b/gerrit-server/src/main/java/com/google/gerrit/server/query/change/IsReviewedPredicate.java index 604f84b9c8..24fcd6b655 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/query/change/IsReviewedPredicate.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/query/change/IsReviewedPredicate.java @@ -17,7 +17,6 @@ package com.google.gerrit.server.query.change; import static com.google.gerrit.server.index.change.ChangeField.REVIEWEDBY; import com.google.gerrit.reviewdb.client.Account; -import com.google.gerrit.server.index.IndexPredicate; import com.google.gerrit.server.index.change.ChangeField; import com.google.gerrit.server.query.Predicate; import com.google.gwtorm.server.OrmException; @@ -27,7 +26,7 @@ import java.util.Collection; import java.util.List; import java.util.Set; -class IsReviewedPredicate extends IndexPredicate { +class IsReviewedPredicate extends ChangeIndexPredicate { private static final Account.Id NOT_REVIEWED = new Account.Id(ChangeField.NOT_REVIEWED); diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/query/change/IsStarredByPredicate.java b/gerrit-server/src/main/java/com/google/gerrit/server/query/change/IsStarredByPredicate.java index 634bc4a667..929ed18110 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/query/change/IsStarredByPredicate.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/query/change/IsStarredByPredicate.java @@ -15,12 +15,11 @@ package com.google.gerrit.server.query.change; import com.google.gerrit.reviewdb.client.Account; -import com.google.gerrit.server.index.IndexPredicate; import com.google.gerrit.server.index.change.ChangeField; import com.google.gwtorm.server.OrmException; @Deprecated -class IsStarredByPredicate extends IndexPredicate { +class IsStarredByPredicate extends ChangeIndexPredicate { private final Account.Id accountId; IsStarredByPredicate(Account.Id accountId) { diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/query/change/LegacyChangeIdPredicate.java b/gerrit-server/src/main/java/com/google/gerrit/server/query/change/LegacyChangeIdPredicate.java index 656eca09a6..425eb009d2 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/query/change/LegacyChangeIdPredicate.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/query/change/LegacyChangeIdPredicate.java @@ -17,10 +17,9 @@ package com.google.gerrit.server.query.change; import static com.google.gerrit.server.index.change.ChangeField.LEGACY_ID; import com.google.gerrit.reviewdb.client.Change; -import com.google.gerrit.server.index.IndexPredicate; /** Predicate over change number (aka legacy ID or Change.Id). */ -public class LegacyChangeIdPredicate extends IndexPredicate { +public class LegacyChangeIdPredicate extends ChangeIndexPredicate { private final Change.Id id; LegacyChangeIdPredicate(Change.Id id) { diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/query/change/LegacyReviewerPredicate.java b/gerrit-server/src/main/java/com/google/gerrit/server/query/change/LegacyReviewerPredicate.java index db10670274..cd93ed3fee 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/query/change/LegacyReviewerPredicate.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/query/change/LegacyReviewerPredicate.java @@ -15,12 +15,11 @@ package com.google.gerrit.server.query.change; import com.google.gerrit.reviewdb.client.Account; -import com.google.gerrit.server.index.IndexPredicate; import com.google.gerrit.server.index.change.ChangeField; import com.google.gwtorm.server.OrmException; @Deprecated -class LegacyReviewerPredicate extends IndexPredicate { +class LegacyReviewerPredicate extends ChangeIndexPredicate { private final Account.Id id; LegacyReviewerPredicate(Account.Id id) { diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/query/change/MessagePredicate.java b/gerrit-server/src/main/java/com/google/gerrit/server/query/change/MessagePredicate.java index 021b6d7421..722a8ad984 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/query/change/MessagePredicate.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/query/change/MessagePredicate.java @@ -14,7 +14,6 @@ package com.google.gerrit.server.query.change; -import com.google.gerrit.server.index.IndexPredicate; import com.google.gerrit.server.index.change.ChangeField; import com.google.gerrit.server.index.change.ChangeIndex; import com.google.gerrit.server.index.change.IndexedChangeQuery; @@ -26,7 +25,7 @@ import com.google.gwtorm.server.OrmException; * Predicate to match changes that contains specified text in commit messages * body. */ -class MessagePredicate extends IndexPredicate { +class MessagePredicate extends ChangeIndexPredicate { private final ChangeIndex index; MessagePredicate(ChangeIndex index, String value) { diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/query/change/OwnerPredicate.java b/gerrit-server/src/main/java/com/google/gerrit/server/query/change/OwnerPredicate.java index bb7cb403a4..dfaac08656 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/query/change/OwnerPredicate.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/query/change/OwnerPredicate.java @@ -16,11 +16,10 @@ package com.google.gerrit.server.query.change; import com.google.gerrit.reviewdb.client.Account; import com.google.gerrit.reviewdb.client.Change; -import com.google.gerrit.server.index.IndexPredicate; import com.google.gerrit.server.index.change.ChangeField; import com.google.gwtorm.server.OrmException; -class OwnerPredicate extends IndexPredicate { +class OwnerPredicate extends ChangeIndexPredicate { private final Account.Id id; OwnerPredicate(Account.Id id) { diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/query/change/OwnerinPredicate.java b/gerrit-server/src/main/java/com/google/gerrit/server/query/change/OwnerinPredicate.java index 467e4c5d55..72327ba82a 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/query/change/OwnerinPredicate.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/query/change/OwnerinPredicate.java @@ -17,10 +17,9 @@ package com.google.gerrit.server.query.change; import com.google.gerrit.reviewdb.client.AccountGroup; import com.google.gerrit.reviewdb.client.Change; import com.google.gerrit.server.IdentifiedUser; -import com.google.gerrit.server.query.OperatorPredicate; import com.google.gwtorm.server.OrmException; -class OwnerinPredicate extends OperatorPredicate { +class OwnerinPredicate extends ChangeOperatorPredicate { private final IdentifiedUser.GenericFactory userFactory; private final AccountGroup.UUID uuid; diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/query/change/ProjectPredicate.java b/gerrit-server/src/main/java/com/google/gerrit/server/query/change/ProjectPredicate.java index 0bb5650a01..644870dd42 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/query/change/ProjectPredicate.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/query/change/ProjectPredicate.java @@ -16,11 +16,10 @@ package com.google.gerrit.server.query.change; import com.google.gerrit.reviewdb.client.Change; import com.google.gerrit.reviewdb.client.Project; -import com.google.gerrit.server.index.IndexPredicate; import com.google.gerrit.server.index.change.ChangeField; import com.google.gwtorm.server.OrmException; -class ProjectPredicate extends IndexPredicate { +class ProjectPredicate extends ChangeIndexPredicate { ProjectPredicate(String id) { super(ChangeField.PROJECT, id); } diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/query/change/ProjectPrefixPredicate.java b/gerrit-server/src/main/java/com/google/gerrit/server/query/change/ProjectPrefixPredicate.java index 400a204dea..4c06d1b758 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/query/change/ProjectPrefixPredicate.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/query/change/ProjectPrefixPredicate.java @@ -15,11 +15,10 @@ package com.google.gerrit.server.query.change; import com.google.gerrit.reviewdb.client.Change; -import com.google.gerrit.server.index.IndexPredicate; import com.google.gerrit.server.index.change.ChangeField; import com.google.gwtorm.server.OrmException; -class ProjectPrefixPredicate extends IndexPredicate { +class ProjectPrefixPredicate extends ChangeIndexPredicate { ProjectPrefixPredicate(String prefix) { super(ChangeField.PROJECTS, prefix); } diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/query/change/RefPredicate.java b/gerrit-server/src/main/java/com/google/gerrit/server/query/change/RefPredicate.java index e62855f29a..491aed963e 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/query/change/RefPredicate.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/query/change/RefPredicate.java @@ -15,11 +15,10 @@ package com.google.gerrit.server.query.change; import com.google.gerrit.reviewdb.client.Change; -import com.google.gerrit.server.index.IndexPredicate; import com.google.gerrit.server.index.change.ChangeField; import com.google.gwtorm.server.OrmException; -class RefPredicate extends IndexPredicate { +class RefPredicate extends ChangeIndexPredicate { RefPredicate(String ref) { super(ChangeField.REF, ref); } diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/query/change/RegexPathPredicate.java b/gerrit-server/src/main/java/com/google/gerrit/server/query/change/RegexPathPredicate.java index d1e0f02d71..67efd69d5c 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/query/change/RegexPathPredicate.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/query/change/RegexPathPredicate.java @@ -14,14 +14,13 @@ package com.google.gerrit.server.query.change; -import com.google.gerrit.server.index.RegexPredicate; import com.google.gerrit.server.index.change.ChangeField; import com.google.gerrit.server.util.RegexListSearcher; import com.google.gwtorm.server.OrmException; import java.util.List; -class RegexPathPredicate extends RegexPredicate { +class RegexPathPredicate extends ChangeRegexPredicate { RegexPathPredicate(String re) { super(ChangeField.PATH, re); } diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/query/change/RegexProjectPredicate.java b/gerrit-server/src/main/java/com/google/gerrit/server/query/change/RegexProjectPredicate.java index 48c815f99b..007566ee3a 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/query/change/RegexProjectPredicate.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/query/change/RegexProjectPredicate.java @@ -16,14 +16,13 @@ package com.google.gerrit.server.query.change; import com.google.gerrit.reviewdb.client.Change; import com.google.gerrit.reviewdb.client.Project; -import com.google.gerrit.server.index.RegexPredicate; import com.google.gerrit.server.index.change.ChangeField; import com.google.gwtorm.server.OrmException; import dk.brics.automaton.RegExp; import dk.brics.automaton.RunAutomaton; -class RegexProjectPredicate extends RegexPredicate { +class RegexProjectPredicate extends ChangeRegexPredicate { private final RunAutomaton pattern; RegexProjectPredicate(String re) { diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/query/change/RegexRefPredicate.java b/gerrit-server/src/main/java/com/google/gerrit/server/query/change/RegexRefPredicate.java index 00c1dfe37a..c6d15770fa 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/query/change/RegexRefPredicate.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/query/change/RegexRefPredicate.java @@ -15,14 +15,13 @@ package com.google.gerrit.server.query.change; import com.google.gerrit.reviewdb.client.Change; -import com.google.gerrit.server.index.RegexPredicate; import com.google.gerrit.server.index.change.ChangeField; import com.google.gwtorm.server.OrmException; import dk.brics.automaton.RegExp; import dk.brics.automaton.RunAutomaton; -class RegexRefPredicate extends RegexPredicate { +class RegexRefPredicate extends ChangeRegexPredicate { private final RunAutomaton pattern; RegexRefPredicate(String re) { diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/query/change/RegexTopicPredicate.java b/gerrit-server/src/main/java/com/google/gerrit/server/query/change/RegexTopicPredicate.java index d51aaa4cee..2d6567094b 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/query/change/RegexTopicPredicate.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/query/change/RegexTopicPredicate.java @@ -17,13 +17,12 @@ package com.google.gerrit.server.query.change; import static com.google.gerrit.server.index.change.ChangeField.FUZZY_TOPIC; import com.google.gerrit.reviewdb.client.Change; -import com.google.gerrit.server.index.RegexPredicate; import com.google.gwtorm.server.OrmException; import dk.brics.automaton.RegExp; import dk.brics.automaton.RunAutomaton; -class RegexTopicPredicate extends RegexPredicate { +class RegexTopicPredicate extends ChangeRegexPredicate { private final RunAutomaton pattern; RegexTopicPredicate(String re) { diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/query/change/ReviewerPredicate.java b/gerrit-server/src/main/java/com/google/gerrit/server/query/change/ReviewerPredicate.java index d655a5f7c6..1c4fbbba3e 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/query/change/ReviewerPredicate.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/query/change/ReviewerPredicate.java @@ -16,7 +16,6 @@ package com.google.gerrit.server.query.change; import com.google.gerrit.reviewdb.client.Account; import com.google.gerrit.reviewdb.client.Change; -import com.google.gerrit.server.index.IndexPredicate; import com.google.gerrit.server.index.change.ChangeField; import com.google.gerrit.server.notedb.ReviewerStateInternal; import com.google.gerrit.server.query.Predicate; @@ -26,7 +25,7 @@ import com.google.gwtorm.server.OrmException; import java.util.ArrayList; import java.util.List; -class ReviewerPredicate extends IndexPredicate { +class ReviewerPredicate extends ChangeIndexPredicate { @SuppressWarnings("deprecation") static Predicate create(Arguments args, Account.Id id) { List> and = new ArrayList<>(2); diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/query/change/ReviewerinPredicate.java b/gerrit-server/src/main/java/com/google/gerrit/server/query/change/ReviewerinPredicate.java index 76a02432a5..34c10e3180 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/query/change/ReviewerinPredicate.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/query/change/ReviewerinPredicate.java @@ -17,10 +17,9 @@ package com.google.gerrit.server.query.change; import com.google.gerrit.reviewdb.client.Account; import com.google.gerrit.reviewdb.client.AccountGroup; import com.google.gerrit.server.IdentifiedUser; -import com.google.gerrit.server.query.OperatorPredicate; import com.google.gwtorm.server.OrmException; -class ReviewerinPredicate extends OperatorPredicate { +class ReviewerinPredicate extends ChangeOperatorPredicate { private final IdentifiedUser.GenericFactory userFactory; private final AccountGroup.UUID uuid; diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/query/change/StarPredicate.java b/gerrit-server/src/main/java/com/google/gerrit/server/query/change/StarPredicate.java index 2facdb7afb..a31254f4a6 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/query/change/StarPredicate.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/query/change/StarPredicate.java @@ -16,11 +16,10 @@ package com.google.gerrit.server.query.change; import com.google.gerrit.reviewdb.client.Account; import com.google.gerrit.server.StarredChangesUtil; -import com.google.gerrit.server.index.IndexPredicate; import com.google.gerrit.server.index.change.ChangeField; import com.google.gwtorm.server.OrmException; -public class StarPredicate extends IndexPredicate { +public class StarPredicate extends ChangeIndexPredicate { private final Account.Id accountId; private final String label; diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/query/change/SubmissionIdPredicate.java b/gerrit-server/src/main/java/com/google/gerrit/server/query/change/SubmissionIdPredicate.java index 35a5a29398..d8d5258e35 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/query/change/SubmissionIdPredicate.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/query/change/SubmissionIdPredicate.java @@ -15,11 +15,10 @@ package com.google.gerrit.server.query.change; import com.google.gerrit.reviewdb.client.Change; -import com.google.gerrit.server.index.IndexPredicate; import com.google.gerrit.server.index.change.ChangeField; import com.google.gwtorm.server.OrmException; -class SubmissionIdPredicate extends IndexPredicate { +class SubmissionIdPredicate extends ChangeIndexPredicate { SubmissionIdPredicate(String changeSet) { super(ChangeField.SUBMISSIONID, changeSet); diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/query/change/TimestampRangeChangePredicate.java b/gerrit-server/src/main/java/com/google/gerrit/server/query/change/TimestampRangeChangePredicate.java new file mode 100644 index 0000000000..9242d9d136 --- /dev/null +++ b/gerrit-server/src/main/java/com/google/gerrit/server/query/change/TimestampRangeChangePredicate.java @@ -0,0 +1,34 @@ +// Copyright (C) 2016 The Android Open Source Project +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package com.google.gerrit.server.query.change; + +import com.google.gerrit.server.index.FieldDef; +import com.google.gerrit.server.index.TimestampRangePredicate; +import com.google.gerrit.server.query.Matchable; + +import java.sql.Timestamp; + +public abstract class TimestampRangeChangePredicate extends + TimestampRangePredicate implements Matchable { + protected TimestampRangeChangePredicate(FieldDef def, + String name, String value) { + super(def, name, value); + } + + @Override + public int getCost() { + return 1; + } +} diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/query/change/TrackingIdPredicate.java b/gerrit-server/src/main/java/com/google/gerrit/server/query/change/TrackingIdPredicate.java index aed8831abd..e9be4cde99 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/query/change/TrackingIdPredicate.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/query/change/TrackingIdPredicate.java @@ -16,7 +16,6 @@ package com.google.gerrit.server.query.change; import com.google.gerrit.reviewdb.client.Change; import com.google.gerrit.server.config.TrackingFooters; -import com.google.gerrit.server.index.IndexPredicate; import com.google.gerrit.server.index.change.ChangeField; import com.google.gwtorm.server.OrmException; @@ -27,7 +26,7 @@ import org.slf4j.LoggerFactory; import java.io.IOException; import java.util.List; -class TrackingIdPredicate extends IndexPredicate { +class TrackingIdPredicate extends ChangeIndexPredicate { private static final Logger log = LoggerFactory.getLogger(TrackingIdPredicate.class); private final TrackingFooters trackingFooters; diff --git a/gerrit-server/src/test/java/com/google/gerrit/server/index/change/FakeQueryBuilder.java b/gerrit-server/src/test/java/com/google/gerrit/server/index/change/FakeQueryBuilder.java index 5316bcb4f7..0b5ed32eff 100644 --- a/gerrit-server/src/test/java/com/google/gerrit/server/index/change/FakeQueryBuilder.java +++ b/gerrit-server/src/test/java/com/google/gerrit/server/index/change/FakeQueryBuilder.java @@ -18,7 +18,6 @@ import com.google.gerrit.server.query.OperatorPredicate; import com.google.gerrit.server.query.Predicate; import com.google.gerrit.server.query.change.ChangeData; import com.google.gerrit.server.query.change.ChangeQueryBuilder; -import com.google.gwtorm.server.OrmException; import org.junit.Ignore; @@ -44,16 +43,6 @@ public class FakeQueryBuilder extends ChangeQueryBuilder { } private Predicate predicate(String name, String value) { - return new OperatorPredicate(name, value) { - @Override - public boolean match(ChangeData object) throws OrmException { - return false; - } - - @Override - public int getCost() { - return 0; - } - }; + return new OperatorPredicate(name, value) {}; } } diff --git a/gerrit-server/src/test/java/com/google/gerrit/server/query/PredicateTest.java b/gerrit-server/src/test/java/com/google/gerrit/server/query/PredicateTest.java index a0a6e40e43..7762e50c63 100644 --- a/gerrit-server/src/test/java/com/google/gerrit/server/query/PredicateTest.java +++ b/gerrit-server/src/test/java/com/google/gerrit/server/query/PredicateTest.java @@ -24,16 +24,6 @@ public abstract class PredicateTest extends GerritBaseTests { protected TestPredicate(String name, String value) { super(name, value); } - - @Override - public boolean match(String object) { - return false; - } - - @Override - public int getCost() { - return 0; - } } protected static TestPredicate f(String name, String value) { diff --git a/plugins/cookbook-plugin b/plugins/cookbook-plugin index 6eecd42fd6..2d40ee25a0 160000 --- a/plugins/cookbook-plugin +++ b/plugins/cookbook-plugin @@ -1 +1 @@ -Subproject commit 6eecd42fd629c700409826273d9ed02499a1d12c +Subproject commit 2d40ee25a029deaefeddb6ffe5679a68aa10d8db