Prune old index schema versions and fields
Gerrit 2.12 still needs to support v14-v25 to do the online upgrade from 2.11; now that the release branch has been cut, we no longer need these old schema versions. Change-Id: I3fa2e52814c3a0df45376cf1a90e318b479ed3d8
This commit is contained in:
parent
141c01a4e9
commit
2c3abe28c6
|
@ -18,6 +18,7 @@ import static com.google.common.base.Preconditions.checkNotNull;
|
||||||
import static com.google.common.base.Preconditions.checkState;
|
import static com.google.common.base.Preconditions.checkState;
|
||||||
import static com.google.common.collect.Iterables.getOnlyElement;
|
import static com.google.common.collect.Iterables.getOnlyElement;
|
||||||
import static com.google.gerrit.server.git.QueueProvider.QueueType.INTERACTIVE;
|
import static com.google.gerrit.server.git.QueueProvider.QueueType.INTERACTIVE;
|
||||||
|
import static com.google.gerrit.server.index.ChangeField.LEGACY_ID2;
|
||||||
import static com.google.gerrit.server.index.IndexRewriter.CLOSED_STATUSES;
|
import static com.google.gerrit.server.index.IndexRewriter.CLOSED_STATUSES;
|
||||||
import static com.google.gerrit.server.index.IndexRewriter.OPEN_STATUSES;
|
import static com.google.gerrit.server.index.IndexRewriter.OPEN_STATUSES;
|
||||||
import static java.util.concurrent.TimeUnit.MILLISECONDS;
|
import static java.util.concurrent.TimeUnit.MILLISECONDS;
|
||||||
|
@ -54,7 +55,6 @@ import com.google.gerrit.server.query.Predicate;
|
||||||
import com.google.gerrit.server.query.QueryParseException;
|
import com.google.gerrit.server.query.QueryParseException;
|
||||||
import com.google.gerrit.server.query.change.ChangeData;
|
import com.google.gerrit.server.query.change.ChangeData;
|
||||||
import com.google.gerrit.server.query.change.ChangeDataSource;
|
import com.google.gerrit.server.query.change.ChangeDataSource;
|
||||||
import com.google.gerrit.server.query.change.LegacyChangeIdPredicate;
|
|
||||||
import com.google.gerrit.server.query.change.QueryOptions;
|
import com.google.gerrit.server.query.change.QueryOptions;
|
||||||
import com.google.gwtorm.protobuf.ProtobufCodec;
|
import com.google.gwtorm.protobuf.ProtobufCodec;
|
||||||
import com.google.gwtorm.server.OrmException;
|
import com.google.gwtorm.server.OrmException;
|
||||||
|
@ -236,7 +236,7 @@ public class LuceneChangeIndex implements ChangeIndex {
|
||||||
this.changeDataFactory = changeDataFactory;
|
this.changeDataFactory = changeDataFactory;
|
||||||
this.schema = schema;
|
this.schema = schema;
|
||||||
this.useDocValuesForSorting = schema.getVersion() >= 15;
|
this.useDocValuesForSorting = schema.getVersion() >= 15;
|
||||||
this.idSortField = sortFieldName(LegacyChangeIdPredicate.idField(schema));
|
this.idSortField = sortFieldName(LEGACY_ID2);
|
||||||
|
|
||||||
CustomMappingAnalyzer analyzer =
|
CustomMappingAnalyzer analyzer =
|
||||||
new CustomMappingAnalyzer(new StandardAnalyzer(CharArraySet.EMPTY_SET),
|
new CustomMappingAnalyzer(new StandardAnalyzer(CharArraySet.EMPTY_SET),
|
||||||
|
@ -271,9 +271,9 @@ public class LuceneChangeIndex implements ChangeIndex {
|
||||||
if (useDocValuesForSorting) {
|
if (useDocValuesForSorting) {
|
||||||
return new SearcherFactory();
|
return new SearcherFactory();
|
||||||
}
|
}
|
||||||
@SuppressWarnings("deprecation")
|
|
||||||
final Map<String, UninvertingReader.Type> mapping = ImmutableMap.of(
|
final Map<String, UninvertingReader.Type> mapping = ImmutableMap.of(
|
||||||
ChangeField.LEGACY_ID.getName(), UninvertingReader.Type.INTEGER,
|
// TODO(dborowitz): Remove; this is dead code anyway.
|
||||||
|
"_id", UninvertingReader.Type.INTEGER,
|
||||||
ChangeField.UPDATED.getName(), UninvertingReader.Type.LONG);
|
ChangeField.UPDATED.getName(), UninvertingReader.Type.LONG);
|
||||||
return new SearcherFactory() {
|
return new SearcherFactory() {
|
||||||
@Override
|
@Override
|
||||||
|
@ -312,7 +312,7 @@ public class LuceneChangeIndex implements ChangeIndex {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void replace(ChangeData cd) throws IOException {
|
public void replace(ChangeData cd) throws IOException {
|
||||||
Term id = QueryBuilder.idTerm(schema, cd);
|
Term id = QueryBuilder.idTerm(cd);
|
||||||
Document doc = toDocument(cd);
|
Document doc = toDocument(cd);
|
||||||
try {
|
try {
|
||||||
if (cd.change().getStatus().isOpen()) {
|
if (cd.change().getStatus().isOpen()) {
|
||||||
|
@ -331,7 +331,7 @@ public class LuceneChangeIndex implements ChangeIndex {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void delete(Change.Id id) throws IOException {
|
public void delete(Change.Id id) throws IOException {
|
||||||
Term idTerm = QueryBuilder.idTerm(schema, id);
|
Term idTerm = QueryBuilder.idTerm(id);
|
||||||
try {
|
try {
|
||||||
Futures.allAsList(
|
Futures.allAsList(
|
||||||
openIndex.delete(idTerm),
|
openIndex.delete(idTerm),
|
||||||
|
@ -367,7 +367,6 @@ public class LuceneChangeIndex implements ChangeIndex {
|
||||||
setReady(sitePaths, schema.getVersion(), ready);
|
setReady(sitePaths, schema.getVersion(), ready);
|
||||||
}
|
}
|
||||||
|
|
||||||
@SuppressWarnings("deprecation")
|
|
||||||
private Sort getSort() {
|
private Sort getSort() {
|
||||||
if (useDocValuesForSorting) {
|
if (useDocValuesForSorting) {
|
||||||
return new Sort(
|
return new Sort(
|
||||||
|
@ -378,7 +377,8 @@ public class LuceneChangeIndex implements ChangeIndex {
|
||||||
new SortField(
|
new SortField(
|
||||||
ChangeField.UPDATED.getName(), SortField.Type.LONG, true),
|
ChangeField.UPDATED.getName(), SortField.Type.LONG, true),
|
||||||
new SortField(
|
new SortField(
|
||||||
ChangeField.LEGACY_ID.getName(), SortField.Type.INT, true));
|
// TODO(dborowitz): Remove; this is dead code anyway.
|
||||||
|
"_id", SortField.Type.INT, true));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -434,7 +434,7 @@ public class LuceneChangeIndex implements ChangeIndex {
|
||||||
List<ChangeData> result =
|
List<ChangeData> result =
|
||||||
Lists.newArrayListWithCapacity(docs.scoreDocs.length);
|
Lists.newArrayListWithCapacity(docs.scoreDocs.length);
|
||||||
Set<String> fields = fields(opts);
|
Set<String> fields = fields(opts);
|
||||||
String idFieldName = idFieldName();
|
String idFieldName = LEGACY_ID2.getName();
|
||||||
for (int i = opts.start(); i < docs.scoreDocs.length; i++) {
|
for (int i = opts.start(); i < docs.scoreDocs.length; i++) {
|
||||||
ScoreDoc sd = docs.scoreDocs[i];
|
ScoreDoc sd = docs.scoreDocs[i];
|
||||||
Document doc = searchers[sd.shardIndex].doc(sd.doc, fields);
|
Document doc = searchers[sd.shardIndex].doc(sd.doc, fields);
|
||||||
|
@ -474,16 +474,14 @@ public class LuceneChangeIndex implements ChangeIndex {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@SuppressWarnings("deprecation")
|
|
||||||
private Set<String> fields(QueryOptions opts) {
|
private Set<String> fields(QueryOptions opts) {
|
||||||
if (schemaHasRequestedField(ChangeField.LEGACY_ID2, opts.fields())
|
if (schemaHasRequestedField(ChangeField.LEGACY_ID2, opts.fields())
|
||||||
|| schemaHasRequestedField(ChangeField.CHANGE, opts.fields())
|
|| schemaHasRequestedField(ChangeField.CHANGE, opts.fields())) {
|
||||||
|| schemaHasRequestedField(ChangeField.LEGACY_ID, opts.fields())) {
|
|
||||||
return opts.fields();
|
return opts.fields();
|
||||||
}
|
}
|
||||||
// Request the numeric ID field even if the caller did not request it,
|
// Request the numeric ID field even if the caller did not request it,
|
||||||
// otherwise we can't actually construct a ChangeData.
|
// otherwise we can't actually construct a ChangeData.
|
||||||
return Sets.union(opts.fields(), ImmutableSet.of(idFieldName()));
|
return Sets.union(opts.fields(), ImmutableSet.of(LEGACY_ID2.getName()));
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean schemaHasRequestedField(FieldDef<ChangeData, ?> field,
|
private boolean schemaHasRequestedField(FieldDef<ChangeData, ?> field,
|
||||||
|
@ -491,12 +489,6 @@ public class LuceneChangeIndex implements ChangeIndex {
|
||||||
return schema.hasField(field) && requested.contains(field.getName());
|
return schema.hasField(field) && requested.contains(field.getName());
|
||||||
}
|
}
|
||||||
|
|
||||||
@SuppressWarnings("deprecation")
|
|
||||||
private String idFieldName() {
|
|
||||||
return schema.getField(ChangeField.LEGACY_ID2, ChangeField.LEGACY_ID).get()
|
|
||||||
.getName();
|
|
||||||
}
|
|
||||||
|
|
||||||
private ChangeData toChangeData(Document doc, Set<String> fields,
|
private ChangeData toChangeData(Document doc, Set<String> fields,
|
||||||
String idFieldName) {
|
String idFieldName) {
|
||||||
ChangeData cd;
|
ChangeData cd;
|
||||||
|
@ -602,7 +594,6 @@ public class LuceneChangeIndex implements ChangeIndex {
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
@SuppressWarnings("deprecation")
|
|
||||||
private void add(Document doc, Values<ChangeData> values) {
|
private void add(Document doc, Values<ChangeData> values) {
|
||||||
String name = values.getField().getName();
|
String name = values.getField().getName();
|
||||||
FieldType<?> type = values.getField().getType();
|
FieldType<?> type = values.getField().getType();
|
||||||
|
@ -610,7 +601,7 @@ public class LuceneChangeIndex implements ChangeIndex {
|
||||||
|
|
||||||
if (useDocValuesForSorting) {
|
if (useDocValuesForSorting) {
|
||||||
FieldDef<ChangeData, ?> f = values.getField();
|
FieldDef<ChangeData, ?> f = values.getField();
|
||||||
if (f == ChangeField.LEGACY_ID || f == ChangeField.LEGACY_ID2) {
|
if (f == ChangeField.LEGACY_ID2) {
|
||||||
int v = (Integer) getOnlyElement(values.getValues());
|
int v = (Integer) getOnlyElement(values.getValues());
|
||||||
doc.add(new NumericDocValuesField(sortFieldName(f), v));
|
doc.add(new NumericDocValuesField(sortFieldName(f), v));
|
||||||
} else if (f == ChangeField.UPDATED) {
|
} else if (f == ChangeField.UPDATED) {
|
||||||
|
|
|
@ -14,7 +14,7 @@
|
||||||
|
|
||||||
package com.google.gerrit.lucene;
|
package com.google.gerrit.lucene;
|
||||||
|
|
||||||
import static com.google.gerrit.server.query.change.LegacyChangeIdPredicate.idField;
|
import static com.google.gerrit.server.index.ChangeField.LEGACY_ID2;
|
||||||
import static org.apache.lucene.search.BooleanClause.Occur.MUST;
|
import static org.apache.lucene.search.BooleanClause.Occur.MUST;
|
||||||
import static org.apache.lucene.search.BooleanClause.Occur.MUST_NOT;
|
import static org.apache.lucene.search.BooleanClause.Occur.MUST_NOT;
|
||||||
import static org.apache.lucene.search.BooleanClause.Occur.SHOULD;
|
import static org.apache.lucene.search.BooleanClause.Occur.SHOULD;
|
||||||
|
@ -25,7 +25,6 @@ import com.google.gerrit.server.index.FieldType;
|
||||||
import com.google.gerrit.server.index.IndexPredicate;
|
import com.google.gerrit.server.index.IndexPredicate;
|
||||||
import com.google.gerrit.server.index.IntegerRangePredicate;
|
import com.google.gerrit.server.index.IntegerRangePredicate;
|
||||||
import com.google.gerrit.server.index.RegexPredicate;
|
import com.google.gerrit.server.index.RegexPredicate;
|
||||||
import com.google.gerrit.server.index.Schema;
|
|
||||||
import com.google.gerrit.server.index.TimestampRangePredicate;
|
import com.google.gerrit.server.index.TimestampRangePredicate;
|
||||||
import com.google.gerrit.server.query.AndPredicate;
|
import com.google.gerrit.server.query.AndPredicate;
|
||||||
import com.google.gerrit.server.query.NotPredicate;
|
import com.google.gerrit.server.query.NotPredicate;
|
||||||
|
@ -51,12 +50,12 @@ import java.util.List;
|
||||||
|
|
||||||
public class QueryBuilder {
|
public class QueryBuilder {
|
||||||
|
|
||||||
public static Term idTerm(Schema<ChangeData> schema, ChangeData cd) {
|
public static Term idTerm(ChangeData cd) {
|
||||||
return intTerm(idField(schema).getName(), cd.getId().get());
|
return intTerm(LEGACY_ID2.getName(), cd.getId().get());
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Term idTerm(Schema<ChangeData> schema, Change.Id id) {
|
public static Term idTerm(Change.Id id) {
|
||||||
return intTerm(idField(schema).getName(), id.get());
|
return intTerm(LEGACY_ID2.getName(), id.get());
|
||||||
}
|
}
|
||||||
|
|
||||||
private final org.apache.lucene.util.QueryBuilder queryBuilder;
|
private final org.apache.lucene.util.QueryBuilder queryBuilder;
|
||||||
|
|
|
@ -65,18 +65,7 @@ import java.util.Set;
|
||||||
* characters.
|
* characters.
|
||||||
*/
|
*/
|
||||||
public class ChangeField {
|
public class ChangeField {
|
||||||
@Deprecated
|
|
||||||
/** Legacy change ID. */
|
/** Legacy change ID. */
|
||||||
public static final FieldDef<ChangeData, Integer> LEGACY_ID =
|
|
||||||
new FieldDef.Single<ChangeData, Integer>("_id",
|
|
||||||
FieldType.INTEGER, true) {
|
|
||||||
@Override
|
|
||||||
public Integer get(ChangeData input, FillArgs args) {
|
|
||||||
return input.getId().get();
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
/** Legacy change ID without underscore prefix. */
|
|
||||||
public static final FieldDef<ChangeData, Integer> LEGACY_ID2 =
|
public static final FieldDef<ChangeData, Integer> LEGACY_ID2 =
|
||||||
new FieldDef.Single<ChangeData, Integer>("legacy_id",
|
new FieldDef.Single<ChangeData, Integer>("legacy_id",
|
||||||
FieldType.INTEGER, true) {
|
FieldType.INTEGER, true) {
|
||||||
|
@ -161,30 +150,6 @@ public class ChangeField {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@Deprecated
|
|
||||||
/** Topic, a short annotation on the branch. */
|
|
||||||
public static final FieldDef<ChangeData, String> LEGACY_TOPIC2 =
|
|
||||||
new FieldDef.Single<ChangeData, String>(
|
|
||||||
"topic2", FieldType.EXACT, false) {
|
|
||||||
@Override
|
|
||||||
public String get(ChangeData input, FillArgs args)
|
|
||||||
throws OrmException {
|
|
||||||
return getTopic(input);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
@Deprecated
|
|
||||||
/** Topic, a short annotation on the branch. */
|
|
||||||
public static final FieldDef<ChangeData, String> LEGACY_TOPIC3 =
|
|
||||||
new FieldDef.Single<ChangeData, String>(
|
|
||||||
"topic3", FieldType.PREFIX, false) {
|
|
||||||
@Override
|
|
||||||
public String get(ChangeData input, FillArgs args)
|
|
||||||
throws OrmException {
|
|
||||||
return getTopic(input);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
/** Topic, a short annotation on the branch. */
|
/** Topic, a short annotation on the branch. */
|
||||||
public static final FieldDef<ChangeData, String> EXACT_TOPIC =
|
public static final FieldDef<ChangeData, String> EXACT_TOPIC =
|
||||||
new FieldDef.Single<ChangeData, String>(
|
new FieldDef.Single<ChangeData, String>(
|
||||||
|
@ -405,23 +370,6 @@ public class ChangeField {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
/** Set true if the change has a non-zero label score. */
|
|
||||||
@Deprecated
|
|
||||||
public static final FieldDef<ChangeData, String> LEGACY_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()) {
|
|
||||||
if (a.getValue() != 0) {
|
|
||||||
return "1";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
private static Set<String> getPersonParts(PersonIdent person) {
|
private static Set<String> getPersonParts(PersonIdent person) {
|
||||||
if (person == null) {
|
if (person == null) {
|
||||||
return ImmutableSet.of();
|
return ImmutableSet.of();
|
||||||
|
|
|
@ -30,353 +30,6 @@ import java.util.Map;
|
||||||
|
|
||||||
/** Secondary index schemas for changes. */
|
/** Secondary index schemas for changes. */
|
||||||
public class ChangeSchemas {
|
public class ChangeSchemas {
|
||||||
@SuppressWarnings("deprecation")
|
|
||||||
static final Schema<ChangeData> V14 = schema(
|
|
||||||
ChangeField.LEGACY_ID,
|
|
||||||
ChangeField.ID,
|
|
||||||
ChangeField.STATUS,
|
|
||||||
ChangeField.PROJECT,
|
|
||||||
ChangeField.PROJECTS,
|
|
||||||
ChangeField.REF,
|
|
||||||
ChangeField.LEGACY_TOPIC2,
|
|
||||||
ChangeField.UPDATED,
|
|
||||||
ChangeField.FILE_PART,
|
|
||||||
ChangeField.PATH,
|
|
||||||
ChangeField.OWNER,
|
|
||||||
ChangeField.REVIEWER,
|
|
||||||
ChangeField.COMMIT,
|
|
||||||
ChangeField.TR,
|
|
||||||
ChangeField.LABEL,
|
|
||||||
ChangeField.LEGACY_REVIEWED,
|
|
||||||
ChangeField.COMMIT_MESSAGE,
|
|
||||||
ChangeField.COMMENT,
|
|
||||||
ChangeField.CHANGE,
|
|
||||||
ChangeField.APPROVAL,
|
|
||||||
ChangeField.MERGEABLE,
|
|
||||||
ChangeField.ADDED,
|
|
||||||
ChangeField.DELETED,
|
|
||||||
ChangeField.DELTA,
|
|
||||||
ChangeField.HASHTAG);
|
|
||||||
|
|
||||||
@SuppressWarnings("deprecation")
|
|
||||||
static final Schema<ChangeData> V15 = schema(
|
|
||||||
ChangeField.LEGACY_ID,
|
|
||||||
ChangeField.ID,
|
|
||||||
ChangeField.STATUS,
|
|
||||||
ChangeField.PROJECT,
|
|
||||||
ChangeField.PROJECTS,
|
|
||||||
ChangeField.REF,
|
|
||||||
ChangeField.LEGACY_TOPIC2,
|
|
||||||
ChangeField.UPDATED,
|
|
||||||
ChangeField.FILE_PART,
|
|
||||||
ChangeField.PATH,
|
|
||||||
ChangeField.OWNER,
|
|
||||||
ChangeField.REVIEWER,
|
|
||||||
ChangeField.COMMIT,
|
|
||||||
ChangeField.TR,
|
|
||||||
ChangeField.LABEL,
|
|
||||||
ChangeField.LEGACY_REVIEWED,
|
|
||||||
ChangeField.COMMIT_MESSAGE,
|
|
||||||
ChangeField.COMMENT,
|
|
||||||
ChangeField.CHANGE,
|
|
||||||
ChangeField.APPROVAL,
|
|
||||||
ChangeField.MERGEABLE,
|
|
||||||
ChangeField.ADDED,
|
|
||||||
ChangeField.DELETED,
|
|
||||||
ChangeField.DELTA,
|
|
||||||
ChangeField.HASHTAG,
|
|
||||||
ChangeField.COMMENTBY);
|
|
||||||
|
|
||||||
@SuppressWarnings("deprecation")
|
|
||||||
static final Schema<ChangeData> V16 = schema(
|
|
||||||
ChangeField.LEGACY_ID,
|
|
||||||
ChangeField.ID,
|
|
||||||
ChangeField.STATUS,
|
|
||||||
ChangeField.PROJECT,
|
|
||||||
ChangeField.PROJECTS,
|
|
||||||
ChangeField.REF,
|
|
||||||
ChangeField.LEGACY_TOPIC3,
|
|
||||||
ChangeField.UPDATED,
|
|
||||||
ChangeField.FILE_PART,
|
|
||||||
ChangeField.PATH,
|
|
||||||
ChangeField.OWNER,
|
|
||||||
ChangeField.REVIEWER,
|
|
||||||
ChangeField.COMMIT,
|
|
||||||
ChangeField.TR,
|
|
||||||
ChangeField.LABEL,
|
|
||||||
ChangeField.LEGACY_REVIEWED,
|
|
||||||
ChangeField.COMMIT_MESSAGE,
|
|
||||||
ChangeField.COMMENT,
|
|
||||||
ChangeField.CHANGE,
|
|
||||||
ChangeField.APPROVAL,
|
|
||||||
ChangeField.MERGEABLE,
|
|
||||||
ChangeField.ADDED,
|
|
||||||
ChangeField.DELETED,
|
|
||||||
ChangeField.DELTA,
|
|
||||||
ChangeField.HASHTAG,
|
|
||||||
ChangeField.COMMENTBY);
|
|
||||||
|
|
||||||
@SuppressWarnings("deprecation")
|
|
||||||
static final Schema<ChangeData> V17 = schema(
|
|
||||||
ChangeField.LEGACY_ID,
|
|
||||||
ChangeField.ID,
|
|
||||||
ChangeField.STATUS,
|
|
||||||
ChangeField.PROJECT,
|
|
||||||
ChangeField.PROJECTS,
|
|
||||||
ChangeField.REF,
|
|
||||||
ChangeField.LEGACY_TOPIC3,
|
|
||||||
ChangeField.UPDATED,
|
|
||||||
ChangeField.FILE_PART,
|
|
||||||
ChangeField.PATH,
|
|
||||||
ChangeField.OWNER,
|
|
||||||
ChangeField.REVIEWER,
|
|
||||||
ChangeField.COMMIT,
|
|
||||||
ChangeField.TR,
|
|
||||||
ChangeField.LABEL,
|
|
||||||
ChangeField.LEGACY_REVIEWED,
|
|
||||||
ChangeField.COMMIT_MESSAGE,
|
|
||||||
ChangeField.COMMENT,
|
|
||||||
ChangeField.CHANGE,
|
|
||||||
ChangeField.APPROVAL,
|
|
||||||
ChangeField.MERGEABLE,
|
|
||||||
ChangeField.ADDED,
|
|
||||||
ChangeField.DELETED,
|
|
||||||
ChangeField.DELTA,
|
|
||||||
ChangeField.HASHTAG,
|
|
||||||
ChangeField.COMMENTBY,
|
|
||||||
ChangeField.PATCH_SET);
|
|
||||||
|
|
||||||
@SuppressWarnings("deprecation")
|
|
||||||
static final Schema<ChangeData> V18 = schema(
|
|
||||||
ChangeField.LEGACY_ID,
|
|
||||||
ChangeField.ID,
|
|
||||||
ChangeField.STATUS,
|
|
||||||
ChangeField.PROJECT,
|
|
||||||
ChangeField.PROJECTS,
|
|
||||||
ChangeField.REF,
|
|
||||||
ChangeField.LEGACY_TOPIC3,
|
|
||||||
ChangeField.UPDATED,
|
|
||||||
ChangeField.FILE_PART,
|
|
||||||
ChangeField.PATH,
|
|
||||||
ChangeField.OWNER,
|
|
||||||
ChangeField.REVIEWER,
|
|
||||||
ChangeField.COMMIT,
|
|
||||||
ChangeField.TR,
|
|
||||||
ChangeField.LABEL,
|
|
||||||
ChangeField.LEGACY_REVIEWED,
|
|
||||||
ChangeField.COMMIT_MESSAGE,
|
|
||||||
ChangeField.COMMENT,
|
|
||||||
ChangeField.CHANGE,
|
|
||||||
ChangeField.APPROVAL,
|
|
||||||
ChangeField.MERGEABLE,
|
|
||||||
ChangeField.ADDED,
|
|
||||||
ChangeField.DELETED,
|
|
||||||
ChangeField.DELTA,
|
|
||||||
ChangeField.HASHTAG,
|
|
||||||
ChangeField.COMMENTBY,
|
|
||||||
ChangeField.PATCH_SET,
|
|
||||||
ChangeField.GROUP);
|
|
||||||
|
|
||||||
@SuppressWarnings("deprecation")
|
|
||||||
static final Schema<ChangeData> V19 = schema(
|
|
||||||
ChangeField.LEGACY_ID,
|
|
||||||
ChangeField.ID,
|
|
||||||
ChangeField.STATUS,
|
|
||||||
ChangeField.PROJECT,
|
|
||||||
ChangeField.PROJECTS,
|
|
||||||
ChangeField.REF,
|
|
||||||
ChangeField.LEGACY_TOPIC3,
|
|
||||||
ChangeField.UPDATED,
|
|
||||||
ChangeField.FILE_PART,
|
|
||||||
ChangeField.PATH,
|
|
||||||
ChangeField.OWNER,
|
|
||||||
ChangeField.REVIEWER,
|
|
||||||
ChangeField.COMMIT,
|
|
||||||
ChangeField.TR,
|
|
||||||
ChangeField.LABEL,
|
|
||||||
ChangeField.LEGACY_REVIEWED,
|
|
||||||
ChangeField.COMMIT_MESSAGE,
|
|
||||||
ChangeField.COMMENT,
|
|
||||||
ChangeField.CHANGE,
|
|
||||||
ChangeField.APPROVAL,
|
|
||||||
ChangeField.MERGEABLE,
|
|
||||||
ChangeField.ADDED,
|
|
||||||
ChangeField.DELETED,
|
|
||||||
ChangeField.DELTA,
|
|
||||||
ChangeField.HASHTAG,
|
|
||||||
ChangeField.COMMENTBY,
|
|
||||||
ChangeField.PATCH_SET,
|
|
||||||
ChangeField.GROUP,
|
|
||||||
ChangeField.EDITBY);
|
|
||||||
|
|
||||||
@SuppressWarnings("deprecation")
|
|
||||||
static final Schema<ChangeData> V20 = schema(
|
|
||||||
ChangeField.LEGACY_ID,
|
|
||||||
ChangeField.ID,
|
|
||||||
ChangeField.STATUS,
|
|
||||||
ChangeField.PROJECT,
|
|
||||||
ChangeField.PROJECTS,
|
|
||||||
ChangeField.REF,
|
|
||||||
ChangeField.LEGACY_TOPIC3,
|
|
||||||
ChangeField.UPDATED,
|
|
||||||
ChangeField.FILE_PART,
|
|
||||||
ChangeField.PATH,
|
|
||||||
ChangeField.OWNER,
|
|
||||||
ChangeField.REVIEWER,
|
|
||||||
ChangeField.COMMIT,
|
|
||||||
ChangeField.TR,
|
|
||||||
ChangeField.LABEL,
|
|
||||||
ChangeField.COMMIT_MESSAGE,
|
|
||||||
ChangeField.COMMENT,
|
|
||||||
ChangeField.CHANGE,
|
|
||||||
ChangeField.APPROVAL,
|
|
||||||
ChangeField.MERGEABLE,
|
|
||||||
ChangeField.ADDED,
|
|
||||||
ChangeField.DELETED,
|
|
||||||
ChangeField.DELTA,
|
|
||||||
ChangeField.HASHTAG,
|
|
||||||
ChangeField.COMMENTBY,
|
|
||||||
ChangeField.PATCH_SET,
|
|
||||||
ChangeField.GROUP,
|
|
||||||
ChangeField.EDITBY,
|
|
||||||
ChangeField.REVIEWEDBY);
|
|
||||||
|
|
||||||
@SuppressWarnings("deprecation")
|
|
||||||
static final Schema<ChangeData> V21 = schema(
|
|
||||||
ChangeField.LEGACY_ID,
|
|
||||||
ChangeField.ID,
|
|
||||||
ChangeField.STATUS,
|
|
||||||
ChangeField.PROJECT,
|
|
||||||
ChangeField.PROJECTS,
|
|
||||||
ChangeField.REF,
|
|
||||||
ChangeField.EXACT_TOPIC,
|
|
||||||
ChangeField.FUZZY_TOPIC,
|
|
||||||
ChangeField.UPDATED,
|
|
||||||
ChangeField.FILE_PART,
|
|
||||||
ChangeField.PATH,
|
|
||||||
ChangeField.OWNER,
|
|
||||||
ChangeField.REVIEWER,
|
|
||||||
ChangeField.COMMIT,
|
|
||||||
ChangeField.TR,
|
|
||||||
ChangeField.LABEL,
|
|
||||||
ChangeField.COMMIT_MESSAGE,
|
|
||||||
ChangeField.COMMENT,
|
|
||||||
ChangeField.CHANGE,
|
|
||||||
ChangeField.APPROVAL,
|
|
||||||
ChangeField.MERGEABLE,
|
|
||||||
ChangeField.ADDED,
|
|
||||||
ChangeField.DELETED,
|
|
||||||
ChangeField.DELTA,
|
|
||||||
ChangeField.HASHTAG,
|
|
||||||
ChangeField.COMMENTBY,
|
|
||||||
ChangeField.PATCH_SET,
|
|
||||||
ChangeField.GROUP,
|
|
||||||
ChangeField.EDITBY,
|
|
||||||
ChangeField.REVIEWEDBY);
|
|
||||||
|
|
||||||
@Deprecated
|
|
||||||
static final Schema<ChangeData> V22 = schema(
|
|
||||||
ChangeField.LEGACY_ID,
|
|
||||||
ChangeField.ID,
|
|
||||||
ChangeField.STATUS,
|
|
||||||
ChangeField.PROJECT,
|
|
||||||
ChangeField.PROJECTS,
|
|
||||||
ChangeField.REF,
|
|
||||||
ChangeField.EXACT_TOPIC,
|
|
||||||
ChangeField.FUZZY_TOPIC,
|
|
||||||
ChangeField.UPDATED,
|
|
||||||
ChangeField.FILE_PART,
|
|
||||||
ChangeField.PATH,
|
|
||||||
ChangeField.OWNER,
|
|
||||||
ChangeField.REVIEWER,
|
|
||||||
ChangeField.COMMIT,
|
|
||||||
ChangeField.TR,
|
|
||||||
ChangeField.LABEL,
|
|
||||||
ChangeField.COMMIT_MESSAGE,
|
|
||||||
ChangeField.COMMENT,
|
|
||||||
ChangeField.CHANGE,
|
|
||||||
ChangeField.APPROVAL,
|
|
||||||
ChangeField.MERGEABLE,
|
|
||||||
ChangeField.ADDED,
|
|
||||||
ChangeField.DELETED,
|
|
||||||
ChangeField.DELTA,
|
|
||||||
ChangeField.HASHTAG,
|
|
||||||
ChangeField.COMMENTBY,
|
|
||||||
ChangeField.PATCH_SET,
|
|
||||||
ChangeField.GROUP,
|
|
||||||
ChangeField.EDITBY,
|
|
||||||
ChangeField.REVIEWEDBY,
|
|
||||||
ChangeField.EXACT_COMMIT);
|
|
||||||
|
|
||||||
@Deprecated
|
|
||||||
static final Schema<ChangeData> V23 = schema(
|
|
||||||
ChangeField.LEGACY_ID2,
|
|
||||||
ChangeField.ID,
|
|
||||||
ChangeField.STATUS,
|
|
||||||
ChangeField.PROJECT,
|
|
||||||
ChangeField.PROJECTS,
|
|
||||||
ChangeField.REF,
|
|
||||||
ChangeField.EXACT_TOPIC,
|
|
||||||
ChangeField.FUZZY_TOPIC,
|
|
||||||
ChangeField.UPDATED,
|
|
||||||
ChangeField.FILE_PART,
|
|
||||||
ChangeField.PATH,
|
|
||||||
ChangeField.OWNER,
|
|
||||||
ChangeField.REVIEWER,
|
|
||||||
ChangeField.COMMIT,
|
|
||||||
ChangeField.TR,
|
|
||||||
ChangeField.LABEL,
|
|
||||||
ChangeField.COMMIT_MESSAGE,
|
|
||||||
ChangeField.COMMENT,
|
|
||||||
ChangeField.CHANGE,
|
|
||||||
ChangeField.APPROVAL,
|
|
||||||
ChangeField.MERGEABLE,
|
|
||||||
ChangeField.ADDED,
|
|
||||||
ChangeField.DELETED,
|
|
||||||
ChangeField.DELTA,
|
|
||||||
ChangeField.HASHTAG,
|
|
||||||
ChangeField.COMMENTBY,
|
|
||||||
ChangeField.PATCH_SET,
|
|
||||||
ChangeField.GROUP,
|
|
||||||
ChangeField.EDITBY,
|
|
||||||
ChangeField.REVIEWEDBY,
|
|
||||||
ChangeField.EXACT_COMMIT);
|
|
||||||
|
|
||||||
static final Schema<ChangeData> V24 = schema(
|
|
||||||
ChangeField.LEGACY_ID2,
|
|
||||||
ChangeField.ID,
|
|
||||||
ChangeField.STATUS,
|
|
||||||
ChangeField.PROJECT,
|
|
||||||
ChangeField.PROJECTS,
|
|
||||||
ChangeField.REF,
|
|
||||||
ChangeField.EXACT_TOPIC,
|
|
||||||
ChangeField.FUZZY_TOPIC,
|
|
||||||
ChangeField.UPDATED,
|
|
||||||
ChangeField.FILE_PART,
|
|
||||||
ChangeField.PATH,
|
|
||||||
ChangeField.OWNER,
|
|
||||||
ChangeField.REVIEWER,
|
|
||||||
ChangeField.COMMIT,
|
|
||||||
ChangeField.TR,
|
|
||||||
ChangeField.LABEL,
|
|
||||||
ChangeField.COMMIT_MESSAGE,
|
|
||||||
ChangeField.COMMENT,
|
|
||||||
ChangeField.CHANGE,
|
|
||||||
ChangeField.APPROVAL,
|
|
||||||
ChangeField.MERGEABLE,
|
|
||||||
ChangeField.ADDED,
|
|
||||||
ChangeField.DELETED,
|
|
||||||
ChangeField.DELTA,
|
|
||||||
ChangeField.HASHTAG,
|
|
||||||
ChangeField.COMMENTBY,
|
|
||||||
ChangeField.PATCH_SET,
|
|
||||||
ChangeField.GROUP,
|
|
||||||
ChangeField.EDITBY,
|
|
||||||
ChangeField.REVIEWEDBY,
|
|
||||||
ChangeField.EXACT_COMMIT,
|
|
||||||
ChangeField.AUTHOR,
|
|
||||||
ChangeField.COMMITTER);
|
|
||||||
|
|
||||||
static final Schema<ChangeData> V25 = schema(
|
static final Schema<ChangeData> V25 = schema(
|
||||||
ChangeField.LEGACY_ID2,
|
ChangeField.LEGACY_ID2,
|
||||||
ChangeField.ID,
|
ChangeField.ID,
|
||||||
|
|
|
@ -379,8 +379,7 @@ public class ChangeQueryBuilder extends QueryBuilder<ChangeData> {
|
||||||
@Operator
|
@Operator
|
||||||
public Predicate<ChangeData> change(String query) throws QueryParseException {
|
public Predicate<ChangeData> change(String query) throws QueryParseException {
|
||||||
if (PAT_LEGACY_ID.matcher(query).matches()) {
|
if (PAT_LEGACY_ID.matcher(query).matches()) {
|
||||||
return new LegacyChangeIdPredicate(
|
return new LegacyChangeIdPredicate(Change.Id.parse(query));
|
||||||
args.getSchema(), Change.Id.parse(query));
|
|
||||||
} else if (PAT_CHANGE_ID.matcher(query).matches()) {
|
} else if (PAT_CHANGE_ID.matcher(query).matches()) {
|
||||||
return new ChangeIdPredicate(parseChangeId(query));
|
return new ChangeIdPredicate(parseChangeId(query));
|
||||||
}
|
}
|
||||||
|
@ -403,7 +402,7 @@ public class ChangeQueryBuilder extends QueryBuilder<ChangeData> {
|
||||||
@Operator
|
@Operator
|
||||||
public Predicate<ChangeData> status(String statusName) {
|
public Predicate<ChangeData> status(String statusName) {
|
||||||
if ("reviewed".equalsIgnoreCase(statusName)) {
|
if ("reviewed".equalsIgnoreCase(statusName)) {
|
||||||
return IsReviewedPredicate.create(args.getSchema());
|
return IsReviewedPredicate.create();
|
||||||
} else {
|
} else {
|
||||||
return ChangeStatusPredicate.parse(statusName);
|
return ChangeStatusPredicate.parse(statusName);
|
||||||
}
|
}
|
||||||
|
@ -444,7 +443,7 @@ public class ChangeQueryBuilder extends QueryBuilder<ChangeData> {
|
||||||
}
|
}
|
||||||
|
|
||||||
if ("reviewed".equalsIgnoreCase(value)) {
|
if ("reviewed".equalsIgnoreCase(value)) {
|
||||||
return IsReviewedPredicate.create(args.getSchema());
|
return IsReviewedPredicate.create();
|
||||||
}
|
}
|
||||||
|
|
||||||
if ("owner".equalsIgnoreCase(value)) {
|
if ("owner".equalsIgnoreCase(value)) {
|
||||||
|
@ -518,18 +517,18 @@ public class ChangeQueryBuilder extends QueryBuilder<ChangeData> {
|
||||||
|
|
||||||
@Operator
|
@Operator
|
||||||
public Predicate<ChangeData> topic(String name) {
|
public Predicate<ChangeData> topic(String name) {
|
||||||
return new ExactTopicPredicate(args.getSchema(), name);
|
return new ExactTopicPredicate(name);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Operator
|
@Operator
|
||||||
public Predicate<ChangeData> intopic(String name) {
|
public Predicate<ChangeData> intopic(String name) {
|
||||||
if (name.startsWith("^")) {
|
if (name.startsWith("^")) {
|
||||||
return new RegexTopicPredicate(args.getSchema(), name);
|
return new RegexTopicPredicate(name);
|
||||||
}
|
}
|
||||||
if (name.isEmpty()) {
|
if (name.isEmpty()) {
|
||||||
return new ExactTopicPredicate(args.getSchema(), name);
|
return new ExactTopicPredicate(name);
|
||||||
}
|
}
|
||||||
return new FuzzyTopicPredicate(args.getSchema(), name, args.index);
|
return new FuzzyTopicPredicate(name, args.index);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Operator
|
@Operator
|
||||||
|
@ -870,7 +869,7 @@ public class ChangeQueryBuilder extends QueryBuilder<ChangeData> {
|
||||||
@Operator
|
@Operator
|
||||||
public Predicate<ChangeData> reviewedby(String who)
|
public Predicate<ChangeData> reviewedby(String who)
|
||||||
throws QueryParseException, OrmException {
|
throws QueryParseException, OrmException {
|
||||||
return IsReviewedPredicate.create(args.getSchema(), parseAccount(who));
|
return IsReviewedPredicate.create(parseAccount(who));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Operator
|
@Operator
|
||||||
|
|
|
@ -33,8 +33,7 @@ class CommentPredicate extends IndexPredicate<ChangeData> {
|
||||||
public boolean match(ChangeData object) throws OrmException {
|
public boolean match(ChangeData object) throws OrmException {
|
||||||
try {
|
try {
|
||||||
Predicate<ChangeData> p = Predicate.and(
|
Predicate<ChangeData> p = Predicate.and(
|
||||||
new LegacyChangeIdPredicate(index.getSchema(), object.getId()),
|
new LegacyChangeIdPredicate(object.getId()), this);
|
||||||
this);
|
|
||||||
for (ChangeData cData
|
for (ChangeData cData
|
||||||
: index.getSource(p, QueryOptions.oneResult()).read()) {
|
: index.getSource(p, QueryOptions.oneResult()).read()) {
|
||||||
if (cData.getId().equals(object.getId())) {
|
if (cData.getId().equals(object.getId())) {
|
||||||
|
|
|
@ -77,7 +77,7 @@ class ConflictsPredicate extends OrPredicate<ChangeData> {
|
||||||
List<Predicate<ChangeData>> predicatesForOneChange =
|
List<Predicate<ChangeData>> predicatesForOneChange =
|
||||||
Lists.newArrayListWithCapacity(5);
|
Lists.newArrayListWithCapacity(5);
|
||||||
predicatesForOneChange.add(
|
predicatesForOneChange.add(
|
||||||
not(new LegacyChangeIdPredicate(args.getSchema(), c.getId())));
|
not(new LegacyChangeIdPredicate(c.getId())));
|
||||||
predicatesForOneChange.add(
|
predicatesForOneChange.add(
|
||||||
new ProjectPredicate(c.getProject().get()));
|
new ProjectPredicate(c.getProject().get()));
|
||||||
predicatesForOneChange.add(
|
predicatesForOneChange.add(
|
||||||
|
|
|
@ -17,44 +17,21 @@ package com.google.gerrit.server.query.change;
|
||||||
import static com.google.gerrit.server.index.ChangeField.EXACT_TOPIC;
|
import static com.google.gerrit.server.index.ChangeField.EXACT_TOPIC;
|
||||||
|
|
||||||
import com.google.gerrit.reviewdb.client.Change;
|
import com.google.gerrit.reviewdb.client.Change;
|
||||||
import com.google.gerrit.server.index.ChangeField;
|
|
||||||
import com.google.gerrit.server.index.FieldDef;
|
|
||||||
import com.google.gerrit.server.index.IndexPredicate;
|
import com.google.gerrit.server.index.IndexPredicate;
|
||||||
import com.google.gerrit.server.index.Schema;
|
|
||||||
import com.google.gwtorm.server.OrmException;
|
import com.google.gwtorm.server.OrmException;
|
||||||
|
|
||||||
class ExactTopicPredicate extends IndexPredicate<ChangeData> {
|
class ExactTopicPredicate extends IndexPredicate<ChangeData> {
|
||||||
@SuppressWarnings("deprecation")
|
ExactTopicPredicate(String topic) {
|
||||||
static FieldDef<ChangeData, ?> topicField(Schema<ChangeData> schema) {
|
super(EXACT_TOPIC, topic);
|
||||||
if (schema == null) {
|
|
||||||
return ChangeField.LEGACY_TOPIC2;
|
|
||||||
}
|
|
||||||
if (schema.hasField(EXACT_TOPIC)) {
|
|
||||||
return schema.getFields().get(EXACT_TOPIC.getName());
|
|
||||||
}
|
|
||||||
if (schema.hasField(ChangeField.LEGACY_TOPIC2)) {
|
|
||||||
return schema.getFields().get(ChangeField.LEGACY_TOPIC2.getName());
|
|
||||||
}
|
|
||||||
// Not exact, but we cannot do any better.
|
|
||||||
return schema.getFields().get(ChangeField.LEGACY_TOPIC3.getName());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
ExactTopicPredicate(Schema<ChangeData> schema, String topic) {
|
|
||||||
super(topicField(schema), topic);
|
|
||||||
}
|
|
||||||
|
|
||||||
@SuppressWarnings("deprecation")
|
|
||||||
@Override
|
@Override
|
||||||
public boolean match(final ChangeData object) throws OrmException {
|
public boolean match(final ChangeData object) throws OrmException {
|
||||||
Change change = object.change();
|
Change change = object.change();
|
||||||
if (change == null) {
|
if (change == null) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
String t = change.getTopic();
|
return getValue().equals(change.getTopic());
|
||||||
if (t == null && getField() == ChangeField.LEGACY_TOPIC2) {
|
|
||||||
t = "";
|
|
||||||
}
|
|
||||||
return getValue().equals(t);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -15,15 +15,11 @@
|
||||||
package com.google.gerrit.server.query.change;
|
package com.google.gerrit.server.query.change;
|
||||||
|
|
||||||
import static com.google.gerrit.server.index.ChangeField.FUZZY_TOPIC;
|
import static com.google.gerrit.server.index.ChangeField.FUZZY_TOPIC;
|
||||||
import static com.google.gerrit.server.index.ChangeField.LEGACY_TOPIC2;
|
|
||||||
import static com.google.gerrit.server.index.ChangeField.LEGACY_TOPIC3;
|
|
||||||
|
|
||||||
import com.google.common.collect.Iterables;
|
import com.google.common.collect.Iterables;
|
||||||
import com.google.gerrit.reviewdb.client.Change;
|
import com.google.gerrit.reviewdb.client.Change;
|
||||||
import com.google.gerrit.server.index.ChangeIndex;
|
import com.google.gerrit.server.index.ChangeIndex;
|
||||||
import com.google.gerrit.server.index.FieldDef;
|
|
||||||
import com.google.gerrit.server.index.IndexPredicate;
|
import com.google.gerrit.server.index.IndexPredicate;
|
||||||
import com.google.gerrit.server.index.Schema;
|
|
||||||
import com.google.gerrit.server.query.Predicate;
|
import com.google.gerrit.server.query.Predicate;
|
||||||
import com.google.gerrit.server.query.QueryParseException;
|
import com.google.gerrit.server.query.QueryParseException;
|
||||||
import com.google.gwtorm.server.OrmException;
|
import com.google.gwtorm.server.OrmException;
|
||||||
|
@ -31,18 +27,11 @@ import com.google.gwtorm.server.OrmException;
|
||||||
class FuzzyTopicPredicate extends IndexPredicate<ChangeData> {
|
class FuzzyTopicPredicate extends IndexPredicate<ChangeData> {
|
||||||
private final ChangeIndex index;
|
private final ChangeIndex index;
|
||||||
|
|
||||||
@SuppressWarnings("deprecation")
|
FuzzyTopicPredicate(String topic, ChangeIndex index) {
|
||||||
static FieldDef<ChangeData, ?> topicField(Schema<ChangeData> schema) {
|
super(FUZZY_TOPIC, topic);
|
||||||
return schema.getField(FUZZY_TOPIC, LEGACY_TOPIC3, LEGACY_TOPIC2).get();
|
|
||||||
}
|
|
||||||
|
|
||||||
FuzzyTopicPredicate(Schema<ChangeData> schema, String topic,
|
|
||||||
ChangeIndex index) {
|
|
||||||
super(topicField(schema), topic);
|
|
||||||
this.index = index;
|
this.index = index;
|
||||||
}
|
}
|
||||||
|
|
||||||
@SuppressWarnings("deprecation")
|
|
||||||
@Override
|
@Override
|
||||||
public boolean match(final ChangeData cd) throws OrmException {
|
public boolean match(final ChangeData cd) throws OrmException {
|
||||||
Change change = cd.change();
|
Change change = cd.change();
|
||||||
|
@ -53,21 +42,14 @@ class FuzzyTopicPredicate extends IndexPredicate<ChangeData> {
|
||||||
if (t == null) {
|
if (t == null) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (getField() == FUZZY_TOPIC || getField() == LEGACY_TOPIC3) {
|
try {
|
||||||
try {
|
Predicate<ChangeData> thisId = new LegacyChangeIdPredicate(cd.getId());
|
||||||
Predicate<ChangeData> thisId =
|
Iterable<ChangeData> results =
|
||||||
new LegacyChangeIdPredicate(index.getSchema(), cd.getId());
|
index.getSource(and(thisId, this), QueryOptions.oneResult()).read();
|
||||||
Iterable<ChangeData> results =
|
return !Iterables.isEmpty(results);
|
||||||
index.getSource(and(thisId, this), QueryOptions.oneResult()).read();
|
} catch (QueryParseException e) {
|
||||||
return !Iterables.isEmpty(results);
|
throw new OrmException(e);
|
||||||
} catch (QueryParseException e) {
|
|
||||||
throw new OrmException(e);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if (getField() == LEGACY_TOPIC2) {
|
|
||||||
return t.equals(getValue());
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -214,7 +214,7 @@ public class InternalChangeQuery {
|
||||||
|
|
||||||
public List<ChangeData> byTopicOpen(String topic)
|
public List<ChangeData> byTopicOpen(String topic)
|
||||||
throws OrmException {
|
throws OrmException {
|
||||||
return query(and(new ExactTopicPredicate(schema(indexes), topic), open()));
|
return query(and(new ExactTopicPredicate(topic), open()));
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<ChangeData> byCommit(ObjectId id) throws OrmException {
|
public List<ChangeData> byCommit(ObjectId id) throws OrmException {
|
||||||
|
|
|
@ -14,18 +14,12 @@
|
||||||
|
|
||||||
package com.google.gerrit.server.query.change;
|
package com.google.gerrit.server.query.change;
|
||||||
|
|
||||||
import static com.google.common.base.Preconditions.checkState;
|
|
||||||
import static com.google.gerrit.server.index.ChangeField.LEGACY_REVIEWED;
|
|
||||||
import static com.google.gerrit.server.index.ChangeField.REVIEWEDBY;
|
import static com.google.gerrit.server.index.ChangeField.REVIEWEDBY;
|
||||||
|
|
||||||
import com.google.common.base.Optional;
|
|
||||||
import com.google.gerrit.reviewdb.client.Account;
|
import com.google.gerrit.reviewdb.client.Account;
|
||||||
import com.google.gerrit.server.index.ChangeField;
|
import com.google.gerrit.server.index.ChangeField;
|
||||||
import com.google.gerrit.server.index.FieldDef;
|
|
||||||
import com.google.gerrit.server.index.IndexPredicate;
|
import com.google.gerrit.server.index.IndexPredicate;
|
||||||
import com.google.gerrit.server.index.Schema;
|
|
||||||
import com.google.gerrit.server.query.Predicate;
|
import com.google.gerrit.server.query.Predicate;
|
||||||
import com.google.gerrit.server.query.QueryParseException;
|
|
||||||
import com.google.gwtorm.server.OrmException;
|
import com.google.gwtorm.server.OrmException;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
@ -37,20 +31,11 @@ class IsReviewedPredicate extends IndexPredicate<ChangeData> {
|
||||||
private static final Account.Id NOT_REVIEWED =
|
private static final Account.Id NOT_REVIEWED =
|
||||||
new Account.Id(ChangeField.NOT_REVIEWED);
|
new Account.Id(ChangeField.NOT_REVIEWED);
|
||||||
|
|
||||||
@SuppressWarnings("deprecation")
|
static Predicate<ChangeData> create() {
|
||||||
static Predicate<ChangeData> create(Schema<ChangeData> schema) {
|
|
||||||
if (getField(schema) == LEGACY_REVIEWED) {
|
|
||||||
return new LegacyIsReviewedPredicate();
|
|
||||||
}
|
|
||||||
return Predicate.not(new IsReviewedPredicate(NOT_REVIEWED));
|
return Predicate.not(new IsReviewedPredicate(NOT_REVIEWED));
|
||||||
}
|
}
|
||||||
|
|
||||||
@SuppressWarnings("deprecation")
|
static Predicate<ChangeData> create(Collection<Account.Id> ids) {
|
||||||
static Predicate<ChangeData> create(Schema<ChangeData> schema,
|
|
||||||
Collection<Account.Id> ids) throws QueryParseException {
|
|
||||||
if (getField(schema) == LEGACY_REVIEWED) {
|
|
||||||
throw new QueryParseException("Only is:reviewed is supported");
|
|
||||||
}
|
|
||||||
List<Predicate<ChangeData>> predicates = new ArrayList<>(ids.size());
|
List<Predicate<ChangeData>> predicates = new ArrayList<>(ids.size());
|
||||||
for (Account.Id id : ids) {
|
for (Account.Id id : ids) {
|
||||||
predicates.add(new IsReviewedPredicate(id));
|
predicates.add(new IsReviewedPredicate(id));
|
||||||
|
@ -58,15 +43,6 @@ class IsReviewedPredicate extends IndexPredicate<ChangeData> {
|
||||||
return Predicate.or(predicates);
|
return Predicate.or(predicates);
|
||||||
}
|
}
|
||||||
|
|
||||||
@SuppressWarnings("deprecation")
|
|
||||||
private static FieldDef<ChangeData, ?> getField(Schema<ChangeData> schema) {
|
|
||||||
Optional<FieldDef<ChangeData, ?>> f =
|
|
||||||
schema.getField(REVIEWEDBY, LEGACY_REVIEWED);
|
|
||||||
checkState(f.isPresent(), "Schema %s missing field %s",
|
|
||||||
schema.getVersion(), REVIEWEDBY.getName());
|
|
||||||
return f.get();
|
|
||||||
}
|
|
||||||
|
|
||||||
private final Account.Id id;
|
private final Account.Id id;
|
||||||
|
|
||||||
private IsReviewedPredicate(Account.Id id) {
|
private IsReviewedPredicate(Account.Id id) {
|
||||||
|
|
|
@ -18,7 +18,6 @@ import com.google.common.collect.Lists;
|
||||||
import com.google.gerrit.reviewdb.client.Change;
|
import com.google.gerrit.reviewdb.client.Change;
|
||||||
import com.google.gerrit.server.CurrentUser;
|
import com.google.gerrit.server.CurrentUser;
|
||||||
import com.google.gerrit.server.IdentifiedUser;
|
import com.google.gerrit.server.IdentifiedUser;
|
||||||
import com.google.gerrit.server.index.Schema;
|
|
||||||
import com.google.gerrit.server.query.OrPredicate;
|
import com.google.gerrit.server.query.OrPredicate;
|
||||||
import com.google.gerrit.server.query.Predicate;
|
import com.google.gerrit.server.query.Predicate;
|
||||||
import com.google.gerrit.server.query.QueryParseException;
|
import com.google.gerrit.server.query.QueryParseException;
|
||||||
|
@ -38,11 +37,10 @@ class IsStarredByPredicate extends OrPredicate<ChangeData> implements
|
||||||
return user.toString();
|
return user.toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
private static List<Predicate<ChangeData>> predicates(
|
private static List<Predicate<ChangeData>> predicates(Set<Change.Id> ids) {
|
||||||
Schema<ChangeData> schema, Set<Change.Id> ids) {
|
|
||||||
List<Predicate<ChangeData>> r = Lists.newArrayListWithCapacity(ids.size());
|
List<Predicate<ChangeData>> r = Lists.newArrayListWithCapacity(ids.size());
|
||||||
for (Change.Id id : ids) {
|
for (Change.Id id : ids) {
|
||||||
r.add(new LegacyChangeIdPredicate(schema, id));
|
r.add(new LegacyChangeIdPredicate(id));
|
||||||
}
|
}
|
||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
@ -55,7 +53,7 @@ class IsStarredByPredicate extends OrPredicate<ChangeData> implements
|
||||||
}
|
}
|
||||||
|
|
||||||
private IsStarredByPredicate(Arguments args, IdentifiedUser user) {
|
private IsStarredByPredicate(Arguments args, IdentifiedUser user) {
|
||||||
super(predicates(args.getSchema(), user.getStarredChanges()));
|
super(predicates(user.getStarredChanges()));
|
||||||
this.args = args;
|
this.args = args;
|
||||||
this.user = user;
|
this.user = user;
|
||||||
}
|
}
|
||||||
|
|
|
@ -14,32 +14,17 @@
|
||||||
|
|
||||||
package com.google.gerrit.server.query.change;
|
package com.google.gerrit.server.query.change;
|
||||||
|
|
||||||
import static com.google.gerrit.server.index.ChangeField.LEGACY_ID;
|
|
||||||
import static com.google.gerrit.server.index.ChangeField.LEGACY_ID2;
|
import static com.google.gerrit.server.index.ChangeField.LEGACY_ID2;
|
||||||
|
|
||||||
import com.google.gerrit.reviewdb.client.Change;
|
import com.google.gerrit.reviewdb.client.Change;
|
||||||
import com.google.gerrit.server.index.ChangeField;
|
|
||||||
import com.google.gerrit.server.index.FieldDef;
|
|
||||||
import com.google.gerrit.server.index.IndexPredicate;
|
import com.google.gerrit.server.index.IndexPredicate;
|
||||||
import com.google.gerrit.server.index.Schema;
|
|
||||||
|
|
||||||
/** Predicate over change number (aka legacy ID or Change.Id). */
|
/** Predicate over change number (aka legacy ID or Change.Id). */
|
||||||
public class LegacyChangeIdPredicate extends IndexPredicate<ChangeData> {
|
public class LegacyChangeIdPredicate extends IndexPredicate<ChangeData> {
|
||||||
private final Change.Id id;
|
private final Change.Id id;
|
||||||
|
|
||||||
@SuppressWarnings("deprecation")
|
LegacyChangeIdPredicate(Change.Id id) {
|
||||||
public static FieldDef<ChangeData, ?> idField(Schema<ChangeData> schema) {
|
super(LEGACY_ID2, ChangeQueryBuilder.FIELD_CHANGE, id.toString());
|
||||||
if (schema == null) {
|
|
||||||
return ChangeField.LEGACY_ID2;
|
|
||||||
} else if (schema.hasField(LEGACY_ID2)) {
|
|
||||||
return schema.getFields().get(LEGACY_ID2.getName());
|
|
||||||
} else {
|
|
||||||
return schema.getFields().get(LEGACY_ID.getName());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
LegacyChangeIdPredicate(Schema<ChangeData> schema, Change.Id id) {
|
|
||||||
super(idField(schema), ChangeQueryBuilder.FIELD_CHANGE, id.toString());
|
|
||||||
this.id = id;
|
this.id = id;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,57 +0,0 @@
|
||||||
// Copyright (C) 2010 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.reviewdb.client.Change;
|
|
||||||
import com.google.gerrit.reviewdb.client.PatchSet;
|
|
||||||
import com.google.gerrit.reviewdb.client.PatchSetApproval;
|
|
||||||
import com.google.gerrit.server.index.ChangeField;
|
|
||||||
import com.google.gerrit.server.index.IndexPredicate;
|
|
||||||
import com.google.gwtorm.server.OrmException;
|
|
||||||
|
|
||||||
@Deprecated
|
|
||||||
class LegacyIsReviewedPredicate extends IndexPredicate<ChangeData> {
|
|
||||||
@Deprecated
|
|
||||||
LegacyIsReviewedPredicate() {
|
|
||||||
super(ChangeField.LEGACY_REVIEWED, "1");
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean match(final ChangeData object) throws OrmException {
|
|
||||||
Change c = object.change();
|
|
||||||
if (c == null) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
PatchSet.Id current = c.currentPatchSetId();
|
|
||||||
for (PatchSetApproval p : object.approvals().get(current)) {
|
|
||||||
if (p.getValue() != 0) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int getCost() {
|
|
||||||
return 2;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String toString() {
|
|
||||||
return "is:reviewed";
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -37,8 +37,7 @@ class MessagePredicate extends IndexPredicate<ChangeData> {
|
||||||
public boolean match(ChangeData object) throws OrmException {
|
public boolean match(ChangeData object) throws OrmException {
|
||||||
try {
|
try {
|
||||||
Predicate<ChangeData> p = Predicate.and(
|
Predicate<ChangeData> p = Predicate.and(
|
||||||
new LegacyChangeIdPredicate(index.getSchema(), object.getId()),
|
new LegacyChangeIdPredicate(object.getId()), this);
|
||||||
this);
|
|
||||||
for (ChangeData cData
|
for (ChangeData cData
|
||||||
: index.getSource(p, QueryOptions.oneResult()).read()) {
|
: index.getSource(p, QueryOptions.oneResult()).read()) {
|
||||||
if (cData.getId().equals(object.getId())) {
|
if (cData.getId().equals(object.getId())) {
|
||||||
|
|
|
@ -14,9 +14,10 @@
|
||||||
|
|
||||||
package com.google.gerrit.server.query.change;
|
package com.google.gerrit.server.query.change;
|
||||||
|
|
||||||
|
import static com.google.gerrit.server.index.ChangeField.FUZZY_TOPIC;
|
||||||
|
|
||||||
import com.google.gerrit.reviewdb.client.Change;
|
import com.google.gerrit.reviewdb.client.Change;
|
||||||
import com.google.gerrit.server.index.RegexPredicate;
|
import com.google.gerrit.server.index.RegexPredicate;
|
||||||
import com.google.gerrit.server.index.Schema;
|
|
||||||
import com.google.gwtorm.server.OrmException;
|
import com.google.gwtorm.server.OrmException;
|
||||||
|
|
||||||
import dk.brics.automaton.RegExp;
|
import dk.brics.automaton.RegExp;
|
||||||
|
@ -25,8 +26,8 @@ import dk.brics.automaton.RunAutomaton;
|
||||||
class RegexTopicPredicate extends RegexPredicate<ChangeData> {
|
class RegexTopicPredicate extends RegexPredicate<ChangeData> {
|
||||||
private final RunAutomaton pattern;
|
private final RunAutomaton pattern;
|
||||||
|
|
||||||
RegexTopicPredicate(Schema<ChangeData> schema, String re) {
|
RegexTopicPredicate(String re) {
|
||||||
super(FuzzyTopicPredicate.topicField(schema), re);
|
super(FUZZY_TOPIC, re);
|
||||||
|
|
||||||
if (re.startsWith("^")) {
|
if (re.startsWith("^")) {
|
||||||
re = re.substring(1);
|
re = re.substring(1);
|
||||||
|
|
|
@ -1,123 +0,0 @@
|
||||||
// Copyright (C) 2015 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 static com.google.common.truth.Truth.assertThat;
|
|
||||||
import static java.util.concurrent.TimeUnit.MINUTES;
|
|
||||||
|
|
||||||
import com.google.gerrit.extensions.api.changes.ReviewInput;
|
|
||||||
import com.google.gerrit.reviewdb.client.Account;
|
|
||||||
import com.google.gerrit.reviewdb.client.Change;
|
|
||||||
import com.google.gerrit.reviewdb.client.PatchSet;
|
|
||||||
import com.google.gerrit.server.account.AuthRequest;
|
|
||||||
import com.google.gerrit.testutil.InMemoryModule;
|
|
||||||
import com.google.gerrit.testutil.InMemoryRepositoryManager.Repo;
|
|
||||||
import com.google.gerrit.testutil.TestTimeUtil;
|
|
||||||
import com.google.inject.Guice;
|
|
||||||
import com.google.inject.Injector;
|
|
||||||
|
|
||||||
import org.eclipse.jgit.junit.TestRepository;
|
|
||||||
import org.eclipse.jgit.lib.Config;
|
|
||||||
import org.junit.Ignore;
|
|
||||||
import org.junit.Test;
|
|
||||||
|
|
||||||
public class LuceneQueryChangesV14Test extends LuceneQueryChangesTest {
|
|
||||||
@Override
|
|
||||||
protected Injector createInjector() {
|
|
||||||
Config luceneConfig = new Config(config);
|
|
||||||
InMemoryModule.setDefaults(luceneConfig);
|
|
||||||
// Latest version with a Lucene 4 index.
|
|
||||||
luceneConfig.setInt("index", "lucene", "testVersion", 14);
|
|
||||||
return Guice.createInjector(new InMemoryModule(luceneConfig));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
@Ignore
|
|
||||||
@Test
|
|
||||||
public void byCommentBy() {
|
|
||||||
// Ignore.
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
@Ignore
|
|
||||||
@Test
|
|
||||||
public void byFrom() {
|
|
||||||
// Ignore.
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
@Ignore
|
|
||||||
@Test
|
|
||||||
public void byTopic() {
|
|
||||||
// Ignore.
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
@Ignore
|
|
||||||
@Test
|
|
||||||
public void reviewedBy() throws Exception {
|
|
||||||
// Ignore.
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
@Ignore
|
|
||||||
@Test
|
|
||||||
public void prepopulatedFields() throws Exception {
|
|
||||||
// Ignore.
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
@Ignore
|
|
||||||
@Test
|
|
||||||
public void prepopulateOnlyRequestedFields() throws Exception {
|
|
||||||
// Ignore.
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void isReviewed() throws Exception {
|
|
||||||
TestTimeUtil.resetWithClockStep(2, MINUTES);
|
|
||||||
TestRepository<Repo> repo = createProject("repo");
|
|
||||||
Change change1 = insert(newChange(repo, null, null, null, null));
|
|
||||||
Change change2 = insert(newChange(repo, null, null, null, null));
|
|
||||||
Change change3 = insert(newChange(repo, null, null, null, null));
|
|
||||||
|
|
||||||
gApi.changes()
|
|
||||||
.id(change1.getId().get())
|
|
||||||
.current()
|
|
||||||
.review(new ReviewInput().message("comment"));
|
|
||||||
|
|
||||||
Account.Id user2 = accountManager
|
|
||||||
.authenticate(AuthRequest.forUser("anotheruser"))
|
|
||||||
.getAccountId();
|
|
||||||
requestContext.setContext(newRequestContext(user2));
|
|
||||||
|
|
||||||
gApi.changes()
|
|
||||||
.id(change2.getId().get())
|
|
||||||
.current()
|
|
||||||
.review(ReviewInput.recommend());
|
|
||||||
|
|
||||||
PatchSet.Id ps3_1 = change3.currentPatchSetId();
|
|
||||||
change3 = newPatchSet(repo, change3);
|
|
||||||
assertThat(change3.currentPatchSetId()).isNotEqualTo(ps3_1);
|
|
||||||
// Nonzero score on previous patch set does not count.
|
|
||||||
gApi.changes()
|
|
||||||
.id(change3.getId().get())
|
|
||||||
.revision(ps3_1.get())
|
|
||||||
.review(ReviewInput.recommend());
|
|
||||||
|
|
||||||
assertQuery("is:reviewed", change2);
|
|
||||||
assertQuery("-is:reviewed", change3, change1);
|
|
||||||
}
|
|
||||||
}
|
|
Loading…
Reference in New Issue