Search is:reviewed operator to ChangeIndex
Store "1" on a field if the change has at least one non-zero
approval record on the current revision.
Change-Id: I22eef3fb9cd778e2eb00b9b0f5097fd90d4271f6
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/index/ChangeField.java b/gerrit-server/src/main/java/com/google/gerrit/server/index/ChangeField.java
index 62acf5b..f214dce 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/index/ChangeField.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/index/ChangeField.java
@@ -49,7 +49,7 @@
*/
public class ChangeField {
/** Increment whenever making schema changes. */
- public static final int SCHEMA_VERSION = 14;
+ public static final int SCHEMA_VERSION = 15;
/** Legacy change ID. */
public static final FieldDef<ChangeData, Integer> LEGACY_ID =
@@ -228,6 +228,22 @@
}
};
+ /** Set true if the change has a non-zero label score. */
+ public static final FieldDef<ChangeData, String> REVIEWED =
+ new FieldDef.Single<ChangeData, String>(
+ "reviewed", FieldType.EXACT, false) {
+ @Override
+ public String get(ChangeData input, FillArgs args)
+ throws OrmException {
+ for (PatchSetApproval a : input.currentApprovals(args.db)) {
+ if (a.getValue() != 0) {
+ return "1";
+ }
+ }
+ return null;
+ }
+ };
+
public static String formatLabel(String label, int value) {
return formatLabel(label, value, null);
}
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 639be517c..6832e4e 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
@@ -18,15 +18,16 @@
import com.google.gerrit.reviewdb.client.PatchSet;
import com.google.gerrit.reviewdb.client.PatchSetApproval;
import com.google.gerrit.reviewdb.server.ReviewDb;
-import com.google.gerrit.server.query.OperatorPredicate;
+import com.google.gerrit.server.index.ChangeField;
+import com.google.gerrit.server.index.IndexPredicate;
import com.google.gwtorm.server.OrmException;
import com.google.inject.Provider;
-class IsReviewedPredicate extends OperatorPredicate<ChangeData> {
+class IsReviewedPredicate extends IndexPredicate<ChangeData> {
private final Provider<ReviewDb> dbProvider;
IsReviewedPredicate(Provider<ReviewDb> dbProvider) {
- super(ChangeQueryBuilder.FIELD_IS, "reviewed");
+ super(ChangeField.REVIEWED, "1");
this.dbProvider = dbProvider;
}
@@ -51,4 +52,9 @@
public int getCost() {
return 2;
}
+
+ @Override
+ public String toString() {
+ return "is:reviewed";
+ }
}