Написание пользовательского запроса Corda путем объединения двух значений столбца схемы и сравнения? - PullRequest
0 голосов
/ 08 января 2019

Имя схемы содержит,

  • Имя: Рок
  • Фамилия: Джон
  • Префикс: Mr
  • MiddleName: ""
  • Суффикс: "младший"

Мы создаем несколько состояний, схему с определением.

Но сейчас хочу выставить состояния со значениями. Нам нужно отфильтровать значения как (FirstName + LastName) .equals ( "RockJohn").

Мы пытаемся написать пользовательский запрос хранилища.

Есть ли способ достичь этого?

1 Ответ

0 голосов
/ 08 января 2019

На Java вы бы написали что-то вроде:

FieldInfo firstNameField = getField("firstName", NameSchemaV1.PersistentName.class);
FieldInfo lastNameField = getField("lastName", NameSchemaV1.PersistentName.class);

CriteriaExpression firstNameIndex = Builder.equal(firstNameField, "Rock");
CriteriaExpression lastNameIndex = Builder.equal(lastNameField, "John");

QueryCriteria firstNameCriteria = new QueryCriteria.VaultCustomQueryCriteria(firstNameIndex);
QueryCriteria lastNameCriteria = new QueryCriteria.VaultCustomQueryCriteria(lastNameIndex);

QueryCriteria criteria = firstNameCriteria.and(lastNameCriteria);
Vault.Page<ContractState> results = getServiceHub().getVaultService().queryBy(NameState.class, criteria);

В Котлине вы бы написали что-то вроде:

val results = builder {
    val firstNameIndex = NameSchemaV1.PersistentName::firstName.equal("Rock")
    val lastNameIndex = NameSchemaV1.PersistentName::lastName.equal("John")

    val firstNameCriteria = QueryCriteria.VaultCustomQueryCriteria(firstNameIndex)
    val lastNameCriteria = QueryCriteria.VaultCustomQueryCriteria(lastNameIndex)

    val criteria = firstNameCriteria.and(lastNameCriteria)
    serviceHub.vaultService.queryBy(NameState::class.java, criteria)
}
...