// When performing a read, if we have an active batch we need to check it first // before reading from the database, as the rest of the code assumes that once // a database transaction begins reads are consistent with it. It would be good // to change that assumption in future and avoid the performance hit, though in // practice it does not appear to be large. bool CTxDB::ScanBatch(const CDataStream &key, string *value, bool *deleted) const { assert(activeBatch); *deleted = false; CBatchScanner scanner; scanner.needle = key.str(); scanner.deleted = deleted; scanner.foundValue = value; leveldb::Status status = activeBatch->Iterate(&scanner); if (!status.ok()) { throw runtime_error(status.ToString()); } return scanner.foundEntry; }
bool RichListDB::ScanBatch(const CDataStream& key, std::string* value, bool* deleted) const { if (!activeBatch) return false; *deleted = false; RichListDbBatchScanner scanner; scanner.needle = key.str(); scanner.deleted = deleted; scanner.foundValue = value; leveldb::Status s = activeBatch->Iterate(&scanner); if (!s.ok()) { LogPrintf("RichListDB ScanBatch error: %s", s.ToString().c_str()); return false; }; return scanner.foundEntry; }