From b8fe366e84773bb3685b28db65a9f6fa0f3ff017 Mon Sep 17 00:00:00 2001 From: classicalliu Date: Sat, 16 Nov 2019 02:01:50 +0800 Subject: [PATCH] fix: update tx and its outputs in different sqls --- .../src/services/tx/transaction-persistor.ts | 20 ++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/packages/neuron-wallet/src/services/tx/transaction-persistor.ts b/packages/neuron-wallet/src/services/tx/transaction-persistor.ts index 032f3ef685..e37fcd478a 100644 --- a/packages/neuron-wallet/src/services/tx/transaction-persistor.ts +++ b/packages/neuron-wallet/src/services/tx/transaction-persistor.ts @@ -91,7 +91,25 @@ export class TransactionPersistor { txEntity.blockHash = transaction.blockHash txEntity.blockNumber = transaction.blockNumber txEntity.status = TransactionStatus.Success - await connection.manager.save([txEntity, ...outputs.concat(previousOutputs)]) + + const sliceSize = 100 + const queryRunner = connection.createQueryRunner() + await TransactionPersistor.waitUntilTransactionFinished(queryRunner) + await queryRunner.startTransaction() + try { + await queryRunner.manager.save(txEntity) + for (const slice of Utils.eachSlice(previousOutputs, sliceSize)) { + await queryRunner.manager.save(slice) + } + for (const slice of Utils.eachSlice(outputs, sliceSize)) { + await queryRunner.manager.save(slice) + } + await queryRunner.commitTransaction() + } catch (err) { + await queryRunner.rollbackTransaction() + } finally { + await queryRunner.release() + } return txEntity }