带有聚合函数的 Corda 查询
Corda query with aggregate functions
我想计算 fungible_token table 中的行数。 (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}"
}
}
它在fungible_token中有4行table(一条记录已被消耗)
预期结果 = 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 初始化时状态为未使用。
我想计算 fungible_token table 中的行数。 (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}"
}
}
它在fungible_token中有4行table(一条记录已被消耗)
预期结果 = 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 初始化时状态为未使用。