Remove all references to deleted change fields
We had lots of hard-coded logic to do slightly different things depending on which version of a particular field was present in a schema. For every field that has now been completely removed, we can remove references including these bits of extra logic. The difference is especially striking in the sortkey query path. Note that queries containing sortkeys have already been failing since servers upgraded to schema version 8 (2.9), which no longer uses this field. Change-Id: Ib1fbc9f3aa45bf068b7869ca3aada40dbe4cb1bb
This commit is contained in:
@@ -51,8 +51,6 @@ import com.google.gerrit.server.query.Predicate;
|
||||
import com.google.gerrit.server.query.QueryParseException;
|
||||
import com.google.gerrit.server.query.change.ChangeData;
|
||||
import com.google.gerrit.server.query.change.ChangeDataSource;
|
||||
import com.google.gerrit.server.query.change.ChangeQueryBuilder;
|
||||
import com.google.gerrit.server.query.change.SortKeyPredicate;
|
||||
import com.google.gwtorm.server.OrmException;
|
||||
import com.google.gwtorm.server.ResultSet;
|
||||
import com.google.inject.Provider;
|
||||
@@ -259,7 +257,7 @@ public class LuceneChangeIndex implements ChangeIndex {
|
||||
CustomMappingAnalyzer analyzer =
|
||||
new CustomMappingAnalyzer(new StandardAnalyzer(CharArraySet.EMPTY_SET),
|
||||
CUSTOM_CHAR_MAPPING);
|
||||
queryBuilder = new QueryBuilder(schema, analyzer);
|
||||
queryBuilder = new QueryBuilder(analyzer);
|
||||
|
||||
BooleanQuery.setMaxClauseCount(cfg.getInt("index", "defaultMaxClauseCount",
|
||||
BooleanQuery.getMaxClauseCount()));
|
||||
@@ -352,7 +350,7 @@ public class LuceneChangeIndex implements ChangeIndex {
|
||||
indexes.add(closedIndex);
|
||||
}
|
||||
return new QuerySource(indexes, queryBuilder.toQuery(p), start, limit,
|
||||
getSort(schema, p));
|
||||
getSort());
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -360,22 +358,12 @@ public class LuceneChangeIndex implements ChangeIndex {
|
||||
setReady(sitePaths, schema.getVersion(), ready);
|
||||
}
|
||||
|
||||
@SuppressWarnings("deprecation")
|
||||
private static Sort getSort(Schema<ChangeData> schema,
|
||||
Predicate<ChangeData> p) {
|
||||
// Standard order is descending by sort key, unless reversed due to a
|
||||
// sortkey_before predicate.
|
||||
if (SortKeyPredicate.hasSortKeyField(schema)) {
|
||||
boolean reverse = ChangeQueryBuilder.hasNonTrivialSortKeyAfter(schema, p);
|
||||
return new Sort(new SortField(
|
||||
ChangeField.SORTKEY.getName(), SortField.Type.LONG, !reverse));
|
||||
} else {
|
||||
return new Sort(
|
||||
new SortField(
|
||||
ChangeField.UPDATED.getName(), SortField.Type.LONG, true),
|
||||
new SortField(
|
||||
ChangeField.LEGACY_ID.getName(), SortField.Type.INT, true));
|
||||
}
|
||||
private static Sort getSort() {
|
||||
return new Sort(
|
||||
new SortField(
|
||||
ChangeField.UPDATED.getName(), SortField.Type.LONG, true),
|
||||
new SortField(
|
||||
ChangeField.LEGACY_ID.getName(), SortField.Type.INT, true));
|
||||
}
|
||||
|
||||
private class QuerySource implements ChangeDataSource {
|
||||
@@ -530,17 +518,8 @@ public class LuceneChangeIndex implements ChangeIndex {
|
||||
doc.add(new LongField(name, (Long) value, store));
|
||||
}
|
||||
} else if (type == FieldType.TIMESTAMP) {
|
||||
@SuppressWarnings("deprecation")
|
||||
boolean legacy = values.getField() == ChangeField.LEGACY_UPDATED;
|
||||
if (legacy) {
|
||||
for (Object value : values.getValues()) {
|
||||
int t = queryBuilder.toIndexTimeInMinutes((Timestamp) value);
|
||||
doc.add(new IntField(name, t, store));
|
||||
}
|
||||
} else {
|
||||
for (Object value : values.getValues()) {
|
||||
doc.add(new LongField(name, ((Timestamp) value).getTime(), store));
|
||||
}
|
||||
for (Object value : values.getValues()) {
|
||||
doc.add(new LongField(name, ((Timestamp) value).getTime(), store));
|
||||
}
|
||||
} else if (type == FieldType.EXACT
|
||||
|| type == FieldType.PREFIX) {
|
||||
|
@@ -25,7 +25,6 @@ import com.google.gerrit.server.index.FieldType;
|
||||
import com.google.gerrit.server.index.IndexPredicate;
|
||||
import com.google.gerrit.server.index.IntegerRangePredicate;
|
||||
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.query.AndPredicate;
|
||||
import com.google.gerrit.server.query.NotPredicate;
|
||||
@@ -33,7 +32,6 @@ import com.google.gerrit.server.query.OrPredicate;
|
||||
import com.google.gerrit.server.query.Predicate;
|
||||
import com.google.gerrit.server.query.QueryParseException;
|
||||
import com.google.gerrit.server.query.change.ChangeData;
|
||||
import com.google.gerrit.server.query.change.SortKeyPredicate;
|
||||
|
||||
import org.apache.lucene.analysis.Analyzer;
|
||||
import org.apache.lucene.index.Term;
|
||||
@@ -61,11 +59,9 @@ public class QueryBuilder {
|
||||
return intTerm(ID_FIELD, id.get());
|
||||
}
|
||||
|
||||
private final Schema<ChangeData> schema;
|
||||
private final org.apache.lucene.util.QueryBuilder queryBuilder;
|
||||
|
||||
public QueryBuilder(Schema<ChangeData> schema, Analyzer analyzer) {
|
||||
this.schema = schema;
|
||||
public QueryBuilder(Analyzer analyzer) {
|
||||
queryBuilder = new org.apache.lucene.util.QueryBuilder(analyzer);
|
||||
}
|
||||
|
||||
@@ -151,8 +147,6 @@ public class QueryBuilder {
|
||||
return prefixQuery(p);
|
||||
} else if (p.getType() == FieldType.FULL_TEXT) {
|
||||
return fullTextQuery(p);
|
||||
} else if (p instanceof SortKeyPredicate) {
|
||||
return sortKeyQuery((SortKeyPredicate) p);
|
||||
} else {
|
||||
throw badFieldType(p.getType());
|
||||
}
|
||||
@@ -199,56 +193,28 @@ public class QueryBuilder {
|
||||
throw new QueryParseException("not an integer range: " + p);
|
||||
}
|
||||
|
||||
private Query sortKeyQuery(SortKeyPredicate p) {
|
||||
long min = p.getMinValue(schema);
|
||||
long max = p.getMaxValue(schema);
|
||||
return NumericRangeQuery.newLongRange(
|
||||
p.getField().getName(),
|
||||
min != Long.MIN_VALUE ? min : null,
|
||||
max != Long.MAX_VALUE ? max : null,
|
||||
false, false);
|
||||
}
|
||||
|
||||
@SuppressWarnings("deprecation")
|
||||
private Query timestampQuery(IndexPredicate<ChangeData> p)
|
||||
throws QueryParseException {
|
||||
if (p instanceof TimestampRangePredicate) {
|
||||
TimestampRangePredicate<ChangeData> r =
|
||||
(TimestampRangePredicate<ChangeData>) p;
|
||||
if (r.getField() == ChangeField.LEGACY_UPDATED) {
|
||||
return NumericRangeQuery.newIntRange(
|
||||
r.getField().getName(),
|
||||
toIndexTimeInMinutes(r.getMinTimestamp()),
|
||||
toIndexTimeInMinutes(r.getMaxTimestamp()),
|
||||
true, true);
|
||||
} else {
|
||||
return NumericRangeQuery.newLongRange(
|
||||
r.getField().getName(),
|
||||
r.getMinTimestamp().getTime(),
|
||||
r.getMaxTimestamp().getTime(),
|
||||
true, true);
|
||||
}
|
||||
return NumericRangeQuery.newLongRange(
|
||||
r.getField().getName(),
|
||||
r.getMinTimestamp().getTime(),
|
||||
r.getMaxTimestamp().getTime(),
|
||||
true, true);
|
||||
}
|
||||
throw new QueryParseException("not a timestamp: " + p);
|
||||
}
|
||||
|
||||
@SuppressWarnings("deprecation")
|
||||
private Query notTimestamp(TimestampRangePredicate<ChangeData> r)
|
||||
throws QueryParseException {
|
||||
if (r.getMinTimestamp().getTime() == 0) {
|
||||
if (r.getField() == ChangeField.LEGACY_UPDATED) {
|
||||
return NumericRangeQuery.newIntRange(
|
||||
r.getField().getName(),
|
||||
toIndexTimeInMinutes(r.getMaxTimestamp()),
|
||||
null,
|
||||
true, true);
|
||||
} else {
|
||||
return NumericRangeQuery.newLongRange(
|
||||
r.getField().getName(),
|
||||
r.getMaxTimestamp().getTime(),
|
||||
null,
|
||||
true, true);
|
||||
}
|
||||
return NumericRangeQuery.newLongRange(
|
||||
r.getField().getName(),
|
||||
r.getMaxTimestamp().getTime(),
|
||||
null,
|
||||
true, true);
|
||||
}
|
||||
throw new QueryParseException("cannot negate: " + r);
|
||||
}
|
||||
|
Reference in New Issue
Block a user