我想计算fungible_token 表中的行数。(Corda_OS 4.4 TokenSDK 1.2)
这是我的代码
@StartableByRPC
class Count : FlowLogic<String>() {
override val progressTracker = ProgressTracker()
@Suspendable
@Throws(FlowException::class)
override fun call():String{
val generalCriteria = QueryCriteria.VaultQueryCriteria(status = Vault.StateStatus.ALL)
val count =PersistentFungibleToken::amount.count()
val countCriteria = QueryCriteria.VaultCustomQueryCriteria(count)
val criteria = generalCriteria.and(countCriteria)
val queryBy: Vault.Page<FungibleToken> = serviceHub.vaultService.queryBy(criteria, PageSpecification())
val resutCount = queryBy.otherResults[0] as Long
return "total : ${resutCount}"
}
}
它在 funble_token 表中有 4 行(一条记录已被消耗)
预期结果 = 4,但结果 = 3
我检查了我的 postgresql 日志,找到了这个查询
select
count(persistent1_.amount) as col_0_0_
from
vault_states vaultschem0_
cross join fungible_token persistent1_
where
(vaultschem0_.contract_state_class_name in ('com.r3.corda.lib.tokens.contracts.states.FungibleToken'))
and vaultschem0_.state_status = 0
and (
vaultschem0_.output_index
, vaultschem0_.transaction_id
) = (
persistent1_.output_index
, persistent1_.transaction_id
)
limit
201
Vault.StateStatus.ALL 不起作用?
我认为你让它变得更复杂了。您可以通过一个简单的查询来实现:
QueryCriteria countCriteria = new QueryCriteria.VaultCustomQueryCriteria(
Builder.count(QueryCriteriaUtils.getField("amount", PersistentFungibleToken.class)),
Vault.StateStatus.ALL
);
Vault.Page<FungibleToken> fungibleTokenPage =
activeParty.vaultQueryByCriteria(countCriteria, FungibleToken.class);
然而,在之前的复合查询中的问题是 VaultCustomQueryCriteria 如果未指定,则初始化状态为未使用。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句