use a cache when loading TXs in db.get_txos()

This commit is contained in:
Lex Berezhny 2019-05-09 17:53:19 -04:00
parent a54a11dca0
commit 874b3faf8c

View file

@ -445,14 +445,18 @@ class BaseDatabase(SQLiteMixin):
if 'order_by' not in constraints: if 'order_by' not in constraints:
constraints['order_by'] = ["tx.height=0 DESC", "tx.height DESC", "tx.position DESC"] constraints['order_by'] = ["tx.height=0 DESC", "tx.height DESC", "tx.position DESC"]
rows = await self.select_txos( rows = await self.select_txos(
"raw, tx.height, tx.position, tx.is_verified, txo.position, chain, account", **constraints "tx.txid, raw, tx.height, tx.position, tx.is_verified, txo.position, chain, account", **constraints
) )
txos = [] txos = []
txs = {}
for row in rows: for row in rows:
tx = self.ledger.transaction_class(row[0], height=row[1], position=row[2], is_verified=row[3]) if row[0] not in txs:
txo = tx.outputs[row[4]] txs[row[0]] = self.ledger.transaction_class(
txo.is_change = row[5] == 1 row[1], height=row[2], position=row[3], is_verified=row[4]
txo.is_my_account = row[6] == my_account )
txo = txs[row[0]].outputs[row[5]]
txo.is_change = row[6] == 1
txo.is_my_account = row[7] == my_account
txos.append(txo) txos.append(txo)
return txos return txos