Search Change-Id strings using ChangeIndex
Move the legacy Change.Id value to _id field and implement change_id field as the Change-Id string, taking advantage of the existing PREFIX support added for commit. Change-Id: I94b924f14474fb2d364819b9950ba3e85a2b2db9
This commit is contained in:
		| @@ -14,7 +14,6 @@ | |||||||
|  |  | ||||||
| package com.google.gerrit.lucene; | package com.google.gerrit.lucene; | ||||||
|  |  | ||||||
| import static com.google.gerrit.server.query.change.ChangeQueryBuilder.FIELD_CHANGE; |  | ||||||
| import static com.google.gerrit.server.query.change.IndexRewriteImpl.CLOSED_STATUSES; | import static com.google.gerrit.server.query.change.IndexRewriteImpl.CLOSED_STATUSES; | ||||||
| import static com.google.gerrit.server.query.change.IndexRewriteImpl.OPEN_STATUSES; | import static com.google.gerrit.server.query.change.IndexRewriteImpl.OPEN_STATUSES; | ||||||
| import static org.apache.lucene.search.BooleanClause.Occur.MUST; | import static org.apache.lucene.search.BooleanClause.Occur.MUST; | ||||||
| @@ -104,6 +103,7 @@ public class LuceneChangeIndex implements ChangeIndex, LifecycleListener { | |||||||
|   public static final Version LUCENE_VERSION = Version.LUCENE_43; |   public static final Version LUCENE_VERSION = Version.LUCENE_43; | ||||||
|   public static final String CHANGES_OPEN = "changes_open"; |   public static final String CHANGES_OPEN = "changes_open"; | ||||||
|   public static final String CHANGES_CLOSED = "changes_closed"; |   public static final String CHANGES_CLOSED = "changes_closed"; | ||||||
|  |   private static final String ID_FIELD = ChangeField.LEGACY_ID.getName(); | ||||||
|  |  | ||||||
|   private static IndexWriterConfig getIndexWriterConfig(Config cfg, String name) { |   private static IndexWriterConfig getIndexWriterConfig(Config cfg, String name) { | ||||||
|     IndexWriterConfig writerConfig = new IndexWriterConfig(LUCENE_VERSION, |     IndexWriterConfig writerConfig = new IndexWriterConfig(LUCENE_VERSION, | ||||||
| @@ -223,7 +223,7 @@ public class LuceneChangeIndex implements ChangeIndex, LifecycleListener { | |||||||
|   } |   } | ||||||
|  |  | ||||||
|   private Term idTerm(ChangeData cd) { |   private Term idTerm(ChangeData cd) { | ||||||
|     return intTerm(FIELD_CHANGE, cd.getId().get()); |     return intTerm(ID_FIELD, cd.getId().get()); | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   private Query toQuery(Predicate<ChangeData> p) throws QueryParseException { |   private Query toQuery(Predicate<ChangeData> p) throws QueryParseException { | ||||||
| @@ -389,7 +389,7 @@ public class LuceneChangeIndex implements ChangeIndex, LifecycleListener { | |||||||
|             Lists.newArrayListWithCapacity(docs.scoreDocs.length); |             Lists.newArrayListWithCapacity(docs.scoreDocs.length); | ||||||
|         for (ScoreDoc sd : docs.scoreDocs) { |         for (ScoreDoc sd : docs.scoreDocs) { | ||||||
|           Document doc = searchers[sd.shardIndex].doc(sd.doc); |           Document doc = searchers[sd.shardIndex].doc(sd.doc); | ||||||
|           Number v = doc.getField(FIELD_CHANGE).numericValue(); |           Number v = doc.getField(ID_FIELD).numericValue(); | ||||||
|           result.add(new ChangeData(new Change.Id(v.intValue()))); |           result.add(new ChangeData(new Change.Id(v.intValue()))); | ||||||
|         } |         } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -44,11 +44,11 @@ import java.util.Set; | |||||||
|  */ |  */ | ||||||
| public class ChangeField { | public class ChangeField { | ||||||
|   /** Increment whenever making schema changes. */ |   /** Increment whenever making schema changes. */ | ||||||
|   public static final int SCHEMA_VERSION = 6; |   public static final int SCHEMA_VERSION = 7; | ||||||
|  |  | ||||||
|   /** Legacy change ID. */ |   /** Legacy change ID. */ | ||||||
|   public static final FieldDef<ChangeData, Integer> CHANGE_ID = |   public static final FieldDef<ChangeData, Integer> LEGACY_ID = | ||||||
|       new FieldDef.Single<ChangeData, Integer>(ChangeQueryBuilder.FIELD_CHANGE, |       new FieldDef.Single<ChangeData, Integer>("_id", | ||||||
|           FieldType.INTEGER, true) { |           FieldType.INTEGER, true) { | ||||||
|         @Override |         @Override | ||||||
|         public Integer get(ChangeData input, FillArgs args) { |         public Integer get(ChangeData input, FillArgs args) { | ||||||
| @@ -56,6 +56,17 @@ public class ChangeField { | |||||||
|         } |         } | ||||||
|       }; |       }; | ||||||
|  |  | ||||||
|  |   /** Newer style Change-Id key. */ | ||||||
|  |   public static final FieldDef<ChangeData, String> ID = | ||||||
|  |       new FieldDef.Single<ChangeData, String>("change_id", | ||||||
|  |           FieldType.PREFIX, true) { | ||||||
|  |         @Override | ||||||
|  |         public String get(ChangeData input, FillArgs args) | ||||||
|  |             throws OrmException { | ||||||
|  |           return input.change(args.db).getKey().get(); | ||||||
|  |         } | ||||||
|  |       }; | ||||||
|  |  | ||||||
|   /** Change status string, in the same format as {@code status:}. */ |   /** Change status string, in the same format as {@code status:}. */ | ||||||
|   public static final FieldDef<ChangeData, String> STATUS = |   public static final FieldDef<ChangeData, String> STATUS = | ||||||
|       new FieldDef.Single<ChangeData, String>(ChangeQueryBuilder.FIELD_STATUS, |       new FieldDef.Single<ChangeData, String>(ChangeQueryBuilder.FIELD_STATUS, | ||||||
|   | |||||||
| @@ -16,17 +16,18 @@ 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.gwtorm.server.ResultSet; | import com.google.gwtorm.server.ResultSet; | ||||||
| import com.google.inject.Provider; | import com.google.inject.Provider; | ||||||
|  |  | ||||||
| class ChangeIdPredicate extends OperatorPredicate<ChangeData> implements | class ChangeIdPredicate extends IndexPredicate<ChangeData> implements | ||||||
|     ChangeDataSource { |     ChangeDataSource { | ||||||
|   private final Provider<ReviewDb> dbProvider; |   private final Provider<ReviewDb> dbProvider; | ||||||
|  |  | ||||||
|   ChangeIdPredicate(Provider<ReviewDb> dbProvider, String id) { |   ChangeIdPredicate(Provider<ReviewDb> dbProvider, String id) { | ||||||
|     super(ChangeQueryBuilder.FIELD_CHANGE, id); |     super(ChangeField.ID, ChangeQueryBuilder.FIELD_CHANGE, id); | ||||||
|     this.dbProvider = dbProvider; |     this.dbProvider = dbProvider; | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -31,7 +31,7 @@ class LegacyChangeIdPredicate extends IndexPredicate<ChangeData> implements | |||||||
|   private final Change.Id id; |   private final Change.Id id; | ||||||
|  |  | ||||||
|   LegacyChangeIdPredicate(Provider<ReviewDb> db, Change.Id id) { |   LegacyChangeIdPredicate(Provider<ReviewDb> db, Change.Id id) { | ||||||
|     super(ChangeField.CHANGE_ID, id.toString()); |     super(ChangeField.LEGACY_ID, ChangeQueryBuilder.FIELD_CHANGE, id.toString()); | ||||||
|     this.db = db; |     this.db = db; | ||||||
|     this.id = id; |     this.id = id; | ||||||
|   } |   } | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Shawn Pearce
					Shawn Pearce