带有聚合函数的 Corda 查询

ka_sou

我想计算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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章