diff --git a/src/cpp/ripple/Ledger.cpp b/src/cpp/ripple/Ledger.cpp index c4c483132..fdfac1fab 100644 --- a/src/cpp/ripple/Ledger.cpp +++ b/src/cpp/ripple/Ledger.cpp @@ -7,6 +7,8 @@ #include "../json/writer.h" +#include "../database/SqliteDatabase.h" + #include "Application.h" #include "Ledger.h" #include "utils.h" @@ -566,6 +568,39 @@ uint256 Ledger::getHashByIndex(uint32 ledgerIndex) bool Ledger::getHashesByIndex(uint32 ledgerIndex, uint256& ledgerHash, uint256& parentHash) { +#ifndef NO_SQLITE3_PREPARE + + DatabaseCon *con = theApp->getLedgerDB(); + ScopedLock sl(con->getDBLock()); + + static SqliteStatement pSt(con->getDB()->getSqliteDB(), + "SELECT LedgerHash,PrevHash FROM Ledgers Where LedgerSeq = ?;"); + + pSt.reset(); + pSt.bind(1, ledgerIndex); + int ret = pSt.step(); + + if (pSt.isDone(ret)) + { + cLog(lsTRACE) << "Don't have ledger " << ledgerIndex; + return false; + } + + if (!pSt.isRow(ret)) + { + assert(false); + cLog(lsFATAL) << "Unexpected statement result " << ret; + return false; + } + + ledgerHash.SetHex(pSt.peekString(0)); + parentHash.SetHex(pSt.peekString(1)); + assert(ledgerHash.isNonZero() && parentHash.isNonZero()); + + return true; + +#else + std::string sql="SELECT LedgerHash,PrevHash FROM Ledgers WHERE LedgerSeq='"; sql.append(boost::lexical_cast(ledgerIndex)); sql.append("';"); @@ -587,6 +622,8 @@ bool Ledger::getHashesByIndex(uint32 ledgerIndex, uint256& ledgerHash, uint256& assert(ledgerHash.isNonZero() && ((ledgerIndex == 0) || parentHash.isNonZero())); return true; + +#endif } Ledger::pointer Ledger::loadByIndex(uint32 ledgerIndex)