Add full name to account index and query by full name in AccountResolver
Add a new field for the full name to the account index that allows exact lookups by full name. In AccountResolver do lookups by full name via the account index, if an account index exists. This is a preparation for moving the account properties from ReviewDb into git. Change-Id: I1dc2eae98280b70354b48f6333d23b89acc8501a Signed-off-by: Edwin Kempin <ekempin@google.com>
This commit is contained in:
@@ -182,15 +182,14 @@ public class AccountResolver {
|
||||
return Collections.singleton(id);
|
||||
}
|
||||
|
||||
List<Account> m = schema.get().accounts().byFullName(nameOrEmail).toList();
|
||||
if (accountIndexes.getSearchIndex() != null) {
|
||||
List<AccountState> m = accountQueryProvider.get().byFullName(nameOrEmail);
|
||||
if (m.size() == 1) {
|
||||
return Collections.singleton(m.get(0).getId());
|
||||
return Collections.singleton(m.get(0).getAccount().getId());
|
||||
}
|
||||
|
||||
// At this point we have no clue. Just perform a whole bunch of suggestions
|
||||
// and pray we come up with a reasonable result list.
|
||||
//
|
||||
if (accountIndexes.getSearchIndex() != null) {
|
||||
return FluentIterable
|
||||
.from(accountQueryProvider.get().byDefault(nameOrEmail))
|
||||
.transform(new Function<AccountState, Account.Id>() {
|
||||
@@ -201,6 +200,13 @@ public class AccountResolver {
|
||||
}).toSet();
|
||||
}
|
||||
|
||||
List<Account> m = schema.get().accounts().byFullName(nameOrEmail).toList();
|
||||
if (m.size() == 1) {
|
||||
return Collections.singleton(m.get(0).getId());
|
||||
}
|
||||
|
||||
// At this point we have no clue. Just perform a whole bunch of suggestions
|
||||
// and pray we come up with a reasonable result list.
|
||||
Set<Account.Id> result = new HashSet<>();
|
||||
String a = nameOrEmail;
|
||||
String b = nameOrEmail + "\u9fa5";
|
||||
|
@@ -84,6 +84,15 @@ public class AccountField {
|
||||
}
|
||||
};
|
||||
|
||||
public static final FieldDef<AccountState, String> FULL_NAME =
|
||||
new FieldDef.Single<AccountState, String>("full_name", FieldType.EXACT,
|
||||
false) {
|
||||
@Override
|
||||
public String get(AccountState input, FillArgs args) {
|
||||
return input.getAccount().getFullName();
|
||||
}
|
||||
};
|
||||
|
||||
public static final FieldDef<AccountState, String> ACTIVE =
|
||||
new FieldDef.Single<AccountState, String>(
|
||||
"inactive", FieldType.EXACT, false) {
|
||||
|
@@ -33,6 +33,9 @@ public class AccountSchemaDefinitions extends SchemaDefinitions<AccountState> {
|
||||
static final Schema<AccountState> V2 =
|
||||
schema(V1, AccountField.WATCHED_PROJECT);
|
||||
|
||||
static final Schema<AccountState> V3 =
|
||||
schema(V2, AccountField.FULL_NAME);
|
||||
|
||||
public static final AccountSchemaDefinitions INSTANCE =
|
||||
new AccountSchemaDefinitions();
|
||||
|
||||
|
@@ -66,6 +66,10 @@ public class AccountPredicates {
|
||||
return new AccountPredicate(AccountField.EXTERNAL_ID, externalId);
|
||||
}
|
||||
|
||||
static Predicate<AccountState> fullName(String fullName) {
|
||||
return new AccountPredicate(AccountField.FULL_NAME, fullName);
|
||||
}
|
||||
|
||||
public static Predicate<AccountState> isActive() {
|
||||
return new AccountPredicate(AccountField.ACTIVE, "1");
|
||||
}
|
||||
|
@@ -67,6 +67,11 @@ public class InternalAccountQuery extends InternalQuery<AccountState> {
|
||||
return query(AccountPredicates.externalId(externalId));
|
||||
}
|
||||
|
||||
public List<AccountState> byFullName(String fullName)
|
||||
throws OrmException {
|
||||
return query(AccountPredicates.fullName(fullName));
|
||||
}
|
||||
|
||||
public List<AccountState> byWatchedProject(Project.NameKey project)
|
||||
throws OrmException {
|
||||
return query(AccountPredicates.watchedProject(project));
|
||||
|
Reference in New Issue
Block a user