Merge branch 'master' of github.com:jedmccaleb/NewCoin

This commit is contained in:
Arthur Britto
2012-06-11 02:15:53 -07:00
4 changed files with 28 additions and 20 deletions

View File

@@ -32,41 +32,43 @@ void SqliteDatabase::disconnect()
bool SqliteDatabase::executeSQL(const char* sql, bool fail_ok)
{
sqlite3_finalize(mCurrentStmt);
int rc=sqlite3_prepare_v2(mConnection,sql,-1,&mCurrentStmt,NULL);
if( rc!=SQLITE_OK )
int rc = sqlite3_prepare_v2(mConnection, sql, -1, &mCurrentStmt, NULL);
if (rc != SQLITE_OK )
{
if(!fail_ok)
if (!fail_ok)
{
#ifdef DEBUG
cout << "SQL Perror:" << rc << endl;
#ifdef DEBUG
cout << "Statement: " << sql << endl;
cout << "Error: " << sqlite3_errmsg(mConnection) << endl;
#endif
}
return(false);
return false;
}
rc=sqlite3_step(mCurrentStmt);
if(rc==SQLITE_ROW)
rc = sqlite3_step(mCurrentStmt);
if (rc == SQLITE_ROW)
{
mMoreRows=true;
}else if(rc==SQLITE_DONE)
mMoreRows = true;
}
else if (rc == SQLITE_DONE)
{
mMoreRows=false;
}else
mMoreRows = false;
}
else
{
mMoreRows=false;
if(!fail_ok)
mMoreRows = false;
if (!fail_ok)
{
cout << "SQL Serror:" << rc << endl;
#ifdef DEBUG
cout << "SQL Serror:" << rc << endl;
cout << "Statement: " << sql << endl;
cout << "Error: " << sqlite3_errmsg(mConnection) << endl;
#endif
}
return(false);
return false;
}
return(true);
return true;
}
// tells you how many rows were changed by an update or insert

View File

@@ -4,7 +4,7 @@
const char *TxnDBInit[] = {
"CREATE TABLE Transactions ( \
TransID CHARACTER(64) PRIMARY KEY, \
TransType CHARACTER(24) \
TransType CHARACTER(24), \
FromAcct CHARACTER(35), \
FromSeq BIGINT UNSIGNED, \
LedgerSeq BIGINT UNSIGNED, \

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

View File

@@ -301,7 +301,7 @@ Json::Value SerializedTransaction::getJson(int options) const
std::string SerializedTransaction::getSQLValueHeader()
{
return "(TransID, TransType, FromAcct, FromSeq, CommitSeq, Status, RawTxn)";
return "(TransID, TransType, FromAcct, FromSeq, LedgerSeq, Status, RawTxn)";
}
std::string SerializedTransaction::getSQLInsertHeader()
@@ -321,7 +321,7 @@ std::string SerializedTransaction::getSQL(Serializer rawTxn, uint32 inLedger, ch
std::string rTxn;
theApp->getTxnDB()->getDB()->escape(
reinterpret_cast<const unsigned char *>(rawTxn.getDataPtr()), rawTxn.getLength(), rTxn);
return str(boost::format("('%s', '%s', '%s', %d, %d, %c, '%s')")
return str(boost::format("('%s', '%s', '%s', '%d', '%d', '%c', %s)")
% getTransactionID().GetHex() % getTransactionType() % getSourceAccount().humanAccountID()
% getSequence() % inLedger % status % rTxn);
}