From 78d1a93e69a03c6b6b9253dacf2253dee6716ea1 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Mon, 1 Apr 2013 20:24:01 -0700 Subject: [PATCH] Reusing prepared statements is slower. --- src/cpp/ripple/HashedObject.cpp | 6 ++---- src/cpp/ripple/Ledger.cpp | 19 ++++--------------- 2 files changed, 6 insertions(+), 19 deletions(-) diff --git a/src/cpp/ripple/HashedObject.cpp b/src/cpp/ripple/HashedObject.cpp index 0725d5530..45cdde10c 100644 --- a/src/cpp/ripple/HashedObject.cpp +++ b/src/cpp/ripple/HashedObject.cpp @@ -95,7 +95,7 @@ void HashedObjectStore::bulkWrite() { Database* db = theApp->getHashNodeDB()->getDB(); ScopedLock sl(theApp->getHashNodeDB()->getDBLock()); - static SqliteStatement pSt(db->getSqliteDB(), + SqliteStatement pSt(db->getSqliteDB(), "INSERT OR IGNORE INTO CommittedObjects " "(Hash,ObjType,LedgerIndex,Object) VALUES (?, ?, ?, ?);"); @@ -185,7 +185,7 @@ HashedObject::pointer HashedObjectStore::retrieve(const uint256& hash) { ScopedLock sl(theApp->getHashNodeDB()->getDBLock()); LoadEvent::autoptr event(theApp->getJobQueue().getLoadEventAP(jtDISK, "HOS::retrieve")); - static SqliteStatement pSt(theApp->getHashNodeDB()->getDB()->getSqliteDB(), + SqliteStatement pSt(theApp->getHashNodeDB()->getDB()->getSqliteDB(), "SELECT ObjType,LedgerIndex,Object FROM CommittedObjects WHERE Hash = ?;"); pSt.bind(1, hash.GetHex()); @@ -193,7 +193,6 @@ HashedObject::pointer HashedObjectStore::retrieve(const uint256& hash) int ret = pSt.step(); if (pSt.isDone(ret)) { - pSt.reset(); mNegativeCache.add(hash); cLog(lsTRACE) << "HOS: " << hash <<" fetch: not in db"; return obj; @@ -202,7 +201,6 @@ HashedObject::pointer HashedObjectStore::retrieve(const uint256& hash) type = pSt.peekString(0); index = pSt.getUInt32(1); pSt.getBlob(2).swap(data); - pSt.reset(); } #else diff --git a/src/cpp/ripple/Ledger.cpp b/src/cpp/ripple/Ledger.cpp index a05876a1c..32aed9709 100644 --- a/src/cpp/ripple/Ledger.cpp +++ b/src/cpp/ripple/Ledger.cpp @@ -538,14 +538,13 @@ Ledger::pointer Ledger::loadByIndex(uint32 ledgerIndex) Database* db = theApp->getLedgerDB()->getDB(); ScopedLock sl(theApp->getLedgerDB()->getDBLock()); - static SqliteStatement pSt(db->getSqliteDB(), "SELECT " + SqliteStatement pSt(db->getSqliteDB(), "SELECT " "LedgerHash,PrevHash,AccountSetHash,TransSetHash,TotalCoins," "ClosingTime,PrevClosingTime,CloseTimeRes,CloseFlags,LedgerSeq" " from Ledgers WHERE LedgerSeq = ?;"); pSt.bind(1, ledgerIndex); ledger = getSQL1(&pSt); - pSt.reset(); } if (ledger) Ledger::getSQL2(ledger); @@ -559,14 +558,13 @@ Ledger::pointer Ledger::loadByHash(const uint256& ledgerHash) Database* db = theApp->getLedgerDB()->getDB(); ScopedLock sl(theApp->getLedgerDB()->getDBLock()); - static SqliteStatement pSt(db->getSqliteDB(), "SELECT " + SqliteStatement pSt(db->getSqliteDB(), "SELECT " "LedgerHash,PrevHash,AccountSetHash,TransSetHash,TotalCoins," "ClosingTime,PrevClosingTime,CloseTimeRes,CloseFlags,LedgerSeq" " from Ledgers WHERE LedgerHash = ?;"); pSt.bind(1, ledgerHash.GetHex()); ledger = getSQL1(&pSt); - pSt.reset(); } if (ledger) { @@ -730,7 +728,7 @@ bool Ledger::getHashesByIndex(uint32 ledgerIndex, uint256& ledgerHash, uint256& DatabaseCon *con = theApp->getLedgerDB(); ScopedLock sl(con->getDBLock()); - static SqliteStatement pSt(con->getDB()->getSqliteDB(), + SqliteStatement pSt(con->getDB()->getSqliteDB(), "SELECT LedgerHash,PrevHash FROM Ledgers INDEXED BY SeqLedger Where LedgerSeq = ?;"); pSt.bind(1, ledgerIndex); @@ -738,13 +736,11 @@ bool Ledger::getHashesByIndex(uint32 ledgerIndex, uint256& ledgerHash, uint256& int ret = pSt.step(); if (pSt.isDone(ret)) { - pSt.reset(); cLog(lsTRACE) << "Don't have ledger " << ledgerIndex; return false; } if (!pSt.isRow(ret)) { - pSt.reset(); assert(false); cLog(lsFATAL) << "Unexpected statement result " << ret; return false; @@ -752,7 +748,6 @@ bool Ledger::getHashesByIndex(uint32 ledgerIndex, uint256& ledgerHash, uint256& ledgerHash.SetHex(pSt.peekString(0), true); parentHash.SetHex(pSt.peekString(1), true); - pSt.reset(); return true; @@ -790,7 +785,7 @@ std::map< uint32, std::pair > Ledger::getHashesByIndex(uint32 DatabaseCon *con = theApp->getLedgerDB(); ScopedLock sl(con->getDBLock()); - static SqliteStatement pSt(con->getDB()->getSqliteDB(), + SqliteStatement pSt(con->getDB()->getSqliteDB(), "SELECT LedgerSeq,LedgerHash,PrevHash FROM Ledgers INDEXED BY SeqLedger " "WHERE LedgerSeq >= ? AND LedgerSeq <= ?;"); @@ -803,15 +798,9 @@ std::map< uint32, std::pair > Ledger::getHashesByIndex(uint32 { int r = pSt.step(); if (pSt.isDone(r)) - { - pSt.reset(); return ret; - } if (!pSt.isRow(r)) - { - pSt.reset(); return ret; - } hashes.first.SetHex(pSt.peekString(1), true); hashes.second.SetHex(pSt.peekString(2), true); ret[pSt.getUInt32(0)] = hashes;