"Upsert" transactions if they're committed after they're stored.

This commit is contained in:
JoelKatz
2012-06-11 01:12:52 -07:00
parent 112c79229c
commit 6521ff52e3

View File

@@ -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;");