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
This commit is contained in:
@@ -38,7 +38,7 @@ import java.util.Map;
|
|||||||
*/
|
*/
|
||||||
public class ChangeField {
|
public class ChangeField {
|
||||||
/** Increment whenever making schema changes. */
|
/** Increment whenever making schema changes. */
|
||||||
public static final int SCHEMA_VERSION = 1;
|
public static final int SCHEMA_VERSION = 2;
|
||||||
|
|
||||||
/** Legacy change ID. */
|
/** Legacy change ID. */
|
||||||
public static final FieldDef<ChangeData, Integer> CHANGE_ID =
|
public static final FieldDef<ChangeData, Integer> CHANGE_ID =
|
||||||
@@ -62,6 +62,28 @@ public class ChangeField {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/** 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. */
|
/** List of filenames modified in the current patch set. */
|
||||||
public static final FieldDef<ChangeData, Iterable<String>> FILE =
|
public static final FieldDef<ChangeData, Iterable<String>> FILE =
|
||||||
new FieldDef.Repeatable<ChangeData, String>(
|
new FieldDef.Repeatable<ChangeData, String>(
|
||||||
|
|||||||
@@ -17,15 +17,16 @@ package com.google.gerrit.server.query.change;
|
|||||||
import com.google.gerrit.reviewdb.client.Change;
|
import com.google.gerrit.reviewdb.client.Change;
|
||||||
import com.google.gerrit.reviewdb.client.Project;
|
import com.google.gerrit.reviewdb.client.Project;
|
||||||
import com.google.gerrit.reviewdb.server.ReviewDb;
|
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.gwtorm.server.OrmException;
|
||||||
import com.google.inject.Provider;
|
import com.google.inject.Provider;
|
||||||
|
|
||||||
class ProjectPredicate extends OperatorPredicate<ChangeData> {
|
class ProjectPredicate extends IndexPredicate<ChangeData> {
|
||||||
private final Provider<ReviewDb> dbProvider;
|
private final Provider<ReviewDb> dbProvider;
|
||||||
|
|
||||||
ProjectPredicate(Provider<ReviewDb> dbProvider, String id) {
|
ProjectPredicate(Provider<ReviewDb> dbProvider, String id) {
|
||||||
super(ChangeQueryBuilder.FIELD_PROJECT, id);
|
super(ChangeField.PROJECT, id);
|
||||||
this.dbProvider = dbProvider;
|
this.dbProvider = dbProvider;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -16,15 +16,16 @@ package com.google.gerrit.server.query.change;
|
|||||||
|
|
||||||
import com.google.gerrit.reviewdb.client.Change;
|
import com.google.gerrit.reviewdb.client.Change;
|
||||||
import com.google.gerrit.reviewdb.server.ReviewDb;
|
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.gwtorm.server.OrmException;
|
||||||
import com.google.inject.Provider;
|
import com.google.inject.Provider;
|
||||||
|
|
||||||
class RefPredicate extends OperatorPredicate<ChangeData> {
|
class RefPredicate extends IndexPredicate<ChangeData> {
|
||||||
private final Provider<ReviewDb> dbProvider;
|
private final Provider<ReviewDb> dbProvider;
|
||||||
|
|
||||||
RefPredicate(Provider<ReviewDb> dbProvider, String ref) {
|
RefPredicate(Provider<ReviewDb> dbProvider, String ref) {
|
||||||
super(ChangeQueryBuilder.FIELD_REF, ref);
|
super(ChangeField.REF, ref);
|
||||||
this.dbProvider = dbProvider;
|
this.dbProvider = dbProvider;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user