From 36abbd88f3abd1af0b0dd0f61ab29d5f2702e39c Mon Sep 17 00:00:00 2001 From: Shawn Pearce Date: Mon, 24 Jun 2013 14:55:18 -0600 Subject: [PATCH] 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 --- .../gerrit/server/index/ChangeField.java | 24 ++++++++++++++++++- .../server/query/change/ProjectPredicate.java | 7 +++--- .../server/query/change/RefPredicate.java | 7 +++--- 3 files changed, 31 insertions(+), 7 deletions(-) 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 e52f80d1ee..2b548ef7dd 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 @@ import java.util.Map; */ 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 CHANGE_ID = @@ -62,6 +62,28 @@ public class ChangeField { } }; + /** Project containing the change. */ + public static final FieldDef PROJECT = + new FieldDef.Single( + 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 REF = + new FieldDef.Single( + 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> FILE = new FieldDef.Repeatable( 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 cce2f2aa81..fe8d937ace 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 @@ 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.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 { +class ProjectPredicate extends IndexPredicate { private final Provider dbProvider; ProjectPredicate(Provider 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 4811f9abd3..df0150f371 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 @@ package com.google.gerrit.server.query.change; 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 { +class RefPredicate extends IndexPredicate { private final Provider dbProvider; RefPredicate(Provider dbProvider, String ref) { - super(ChangeQueryBuilder.FIELD_REF, ref); + super(ChangeField.REF, ref); this.dbProvider = dbProvider; }