Search project, branch, ref with ChangeIndex
Index changes by project and reference in the secondary index.
The branch operator is derived from the RefPredicate.
Only the exact match operators are supported. Regex operators
fall back to database scans.
Change-Id: I2fc09bb2af2df9d0c911d804d8f8fd6fe617a804
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 e52f80d..2b548ef 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
@@ -38,7 +38,7 @@
*/
public class ChangeField {
/** Increment whenever making schema changes. */
- public static final int SCHEMA_VERSION = 1;
+ public static final int SCHEMA_VERSION = 2;
/** Legacy change ID. */
public static final FieldDef<ChangeData, Integer> CHANGE_ID =
@@ -62,6 +62,28 @@
}
};
+ /** Project containing the change. */
+ public static final FieldDef<ChangeData, String> PROJECT =
+ new FieldDef.Single<ChangeData, String>(
+ ChangeQueryBuilder.FIELD_PROJECT, FieldType.EXACT, false) {
+ @Override
+ public String get(ChangeData input, FillArgs args)
+ throws OrmException {
+ return input.change(args.db).getProject().get();
+ }
+ };
+
+ /** Reference (aka branch) the change will submit onto. */
+ public static final FieldDef<ChangeData, String> REF =
+ new FieldDef.Single<ChangeData, String>(
+ ChangeQueryBuilder.FIELD_REF, FieldType.EXACT, false) {
+ @Override
+ public String get(ChangeData input, FillArgs args)
+ throws OrmException {
+ return input.change(args.db).getDest().get();
+ }
+ };
+
/** List of filenames modified in the current patch set. */
public static final FieldDef<ChangeData, Iterable<String>> FILE =
new FieldDef.Repeatable<ChangeData, String>(
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 cce2f2a..fe8d937 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
@@ -17,15 +17,16 @@
import com.google.gerrit.reviewdb.client.Change;
import com.google.gerrit.reviewdb.client.Project;
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 ProjectPredicate extends OperatorPredicate<ChangeData> {
+class ProjectPredicate extends IndexPredicate<ChangeData> {
private final Provider<ReviewDb> dbProvider;
ProjectPredicate(Provider<ReviewDb> dbProvider, String id) {
- super(ChangeQueryBuilder.FIELD_PROJECT, id);
+ super(ChangeField.PROJECT, id);
this.dbProvider = dbProvider;
}
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 4811f9a..df0150f 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
@@ -16,15 +16,16 @@
import com.google.gerrit.reviewdb.client.Change;
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 RefPredicate extends OperatorPredicate<ChangeData> {
+class RefPredicate extends IndexPredicate<ChangeData> {
private final Provider<ReviewDb> dbProvider;
RefPredicate(Provider<ReviewDb> dbProvider, String ref) {
- super(ChangeQueryBuilder.FIELD_REF, ref);
+ super(ChangeField.REF, ref);
this.dbProvider = dbProvider;
}