Запрос о состоянии атрибутов - PullRequest
0 голосов
/ 20 февраля 2020

Если у меня есть состояние с атрибутом, например:

class Test(val timestamp: Double, val linearId = UniqueIdentifier()): LinearState

, я могу выполнить запрос хранилища на основе linearId с LinearStateQueryCriteria. Есть ли способ определить критерии запроса для атрибутов состояния? Например, получить каждое состояние, где атрибут отметки времени равен x или даже в диапазоне от y до z?

1 Ответ

1 голос
/ 20 февраля 2020

Это сработало бы, если ваш штат QueryableState. Вы можете использовать VaultCustomQueryCriteria, чтобы получить желаемый результат, как показано ниже:

QueryCriteria generalCriteria = new VaultQueryCriteria(Vault.StateStatus.ALL);

FieldInfo attributeCurrency = getField("currency", CashSchemaV1.PersistentCashState.class);
FieldInfo attributeQuantity = getField("pennies", CashSchemaV1.PersistentCashState.class);

CriteriaExpression currencyIndex = Builder.equal(attributeCurrency, "USD");
CriteriaExpression quantityIndex = Builder.greaterThanOrEqual(attributeQuantity, 10L);

QueryCriteria customCriteria2 = new VaultCustomQueryCriteria(quantityIndex);
QueryCriteria customCriteria1 = new VaultCustomQueryCriteria(currencyIndex);


QueryCriteria criteria = generalCriteria.and(customCriteria1).and(customCriteria2);
Vault.Page<ContractState> results = vaultService.queryBy(Cash.State.class, criteria);

Подробнее см. Здесь: https://docs.corda.net/api-vault-query.html

Если вы хотите узнать о QueryableState: https://medium.com/corda/persisting-corda-states-in-custom-database-tables-using-queryablestate-dedaa18b7050

...