Пакетный запрос хранилища Corda по произвольному индексируемому объекту - PullRequest
0 голосов
/ 21 февраля 2020

ищет помощь в отношении запросов. если я ищу последние LinearState из SomeObjectState по свойству someProp, я могу сделать следующее:

private fun lookupBySomeProp(someProp: String) : List<StateAndRef<SomeObjectState>> {
  val generalCriteria = VaultQueryCriteria(Vault.StateStatus.UNCONSUMED)
  val somePropIdx = builder { SomePersistentObject::someProp.equal(someProp) }
  val somePropQueryCriteria = VaultCustomQueryCriteria(somePropIdx)
  val queryCriteria = generalCriteria.and(somePropQueryCriteria)
  val results = serviceHub.vaultService.queryBy<SomeObjectState>(queryCriteria)
  // ... handle results here
}

как бы я go о выполнении одного пакетного поиска для нескольких SomeObjectState объектам дан список someProp идентификаторов?

private fun lookupBySomeProps(somePropList: List<String>) : List<StateAndRef<SomeObjectState>> {
  val generalCriteria = VaultQueryCriteria(Vault.StateStatus.UNCONSUMED)
  // how do i build efficiently build my bulk query?
}

Я ожидаю, что придется что-то делать в соответствии с приведенным ниже описанием, чтобы вернуть несколько состояний, соответствующих списку, но у них возникли проблемы реализуя его

val somePropeIdx = builder { SomePersistentObject::someProp.in(somePropList) }

1 Ответ

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

По этой ссылке: https://docs.corda.net/api-vault-query.html вы можете использовать .in() в ваших критериях среди многих других вещей:

  • Двоичные логические (И, ИЛИ)
  • Сравнение (LESS_THAN, LESS_THAN_OR_EQUAL, GREATER_THAN, GREATER_THAN_OR_EQUAL)
  • Равенство (EQUAL, NOT_EQUAL)
  • Сходство (LIKE, NOT_LIKE) * NOT_LULL * IS * NL
  • На основе коллекции (IN, NOT_IN)
  • Стандартные SQL -92 агрегатные функции (SUM, AVG, MIN, MAX, COUNT)
...