From 6521ff52e3d36abe74e19570e944c329f9bbbe3c Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Mon, 11 Jun 2012 01:12:52 -0700 Subject: [PATCH] "Upsert" transactions if they're committed after they're stored. --- src/Ledger.cpp | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/Ledger.cpp b/src/Ledger.cpp index 168c97cd56..0c3e95e8a3 100644 --- a/src/Ledger.cpp +++ b/src/Ledger.cpp @@ -293,7 +293,13 @@ void Ledger::saveAcceptedLedger(Ledger::pointer ledger) sql += ";"; Log(lsTRACE) << "ActTx: " << sql; db->executeSQL(sql); - db->executeSQL(txn.getSQLInsertHeader() + txn.getSQL(ledger->getLedgerSeq(), TXN_SQL_VALIDATED) + ";"); + if (!db->executeSQL( + txn.getSQLInsertHeader() + txn.getSQL(ledger->getLedgerSeq(), TXN_SQL_VALIDATED) + ";"), true) + { // transaction already in DB, update + db->executeSQL(boost::str(boost::format( + "UPDATE Transactions SET LedgerSeq = '%d', Status = '%c' WHERE TransID = '%s';") % + ledger->getLedgerSeq() % TXN_SQL_VALIDATED % txn.getTransactionID().GetHex())); + } // FIXME: If above updates no rows, modify seq/status (upsert) } db->executeSQL("COMMIT TRANSACTION;");