diff --git a/src/wallet/db.h b/src/wallet/db.h --- a/src/wallet/db.h +++ b/src/wallet/db.h @@ -345,69 +345,11 @@ return (ret == 0); } - Dbc *GetCursor() { - if (!pdb) { - return nullptr; - } - Dbc *pcursor = nullptr; - int ret = pdb->cursor(nullptr, &pcursor, 0); - if (ret != 0) { - return nullptr; - } - return pcursor; - } - - int ReadAtCursor(Dbc *pcursor, CDataStream &ssKey, CDataStream &ssValue) { - // Read at cursor - SafeDbt datKey; - SafeDbt datValue; - int ret = pcursor->get(datKey, datValue, DB_NEXT); - if (ret != 0) { - return ret; - } else if (datKey.get_data() == nullptr || - datValue.get_data() == nullptr) { - return 99999; - } - - // Convert to streams - ssKey.SetType(SER_DISK); - ssKey.clear(); - ssKey.write((char *)datKey.get_data(), datKey.get_size()); - ssValue.SetType(SER_DISK); - ssValue.clear(); - ssValue.write((char *)datValue.get_data(), datValue.get_size()); - return 0; - } - - bool TxnBegin() { - if (!pdb || activeTxn) { - return false; - } - DbTxn *ptxn = env->TxnBegin(); - if (!ptxn) { - return false; - } - activeTxn = ptxn; - return true; - } - - bool TxnCommit() { - if (!pdb || !activeTxn) { - return false; - } - int ret = activeTxn->commit(0); - activeTxn = nullptr; - return (ret == 0); - } - - bool TxnAbort() { - if (!pdb || !activeTxn) { - return false; - } - int ret = activeTxn->abort(); - activeTxn = nullptr; - return (ret == 0); - } + Dbc *GetCursor(); + int ReadAtCursor(Dbc *pcursor, CDataStream &ssKey, CDataStream &ssValue); + bool TxnBegin(); + bool TxnCommit(); + bool TxnAbort(); static bool Rewrite(BerkeleyDatabase &database, const char *pszSkip = nullptr); diff --git a/src/wallet/db.cpp b/src/wallet/db.cpp --- a/src/wallet/db.cpp +++ b/src/wallet/db.cpp @@ -838,3 +838,67 @@ env->ReloadDbEnv(); } } + +Dbc *BerkeleyBatch::GetCursor() { + if (!pdb) { + return nullptr; + } + Dbc *pcursor = nullptr; + int ret = pdb->cursor(nullptr, &pcursor, 0); + if (ret != 0) { + return nullptr; + } + return pcursor; +} + +int BerkeleyBatch::ReadAtCursor(Dbc *pcursor, CDataStream &ssKey, + CDataStream &ssValue) { + // Read at cursor + SafeDbt datKey; + SafeDbt datValue; + int ret = pcursor->get(datKey, datValue, DB_NEXT); + if (ret != 0) { + return ret; + } else if (datKey.get_data() == nullptr || datValue.get_data() == nullptr) { + return 99999; + } + + // Convert to streams + ssKey.SetType(SER_DISK); + ssKey.clear(); + ssKey.write((char *)datKey.get_data(), datKey.get_size()); + ssValue.SetType(SER_DISK); + ssValue.clear(); + ssValue.write((char *)datValue.get_data(), datValue.get_size()); + return 0; +} + +bool BerkeleyBatch::TxnBegin() { + if (!pdb || activeTxn) { + return false; + } + DbTxn *ptxn = env->TxnBegin(); + if (!ptxn) { + return false; + } + activeTxn = ptxn; + return true; +} + +bool BerkeleyBatch::TxnCommit() { + if (!pdb || !activeTxn) { + return false; + } + int ret = activeTxn->commit(0); + activeTxn = nullptr; + return (ret == 0); +} + +bool BerkeleyBatch::TxnAbort() { + if (!pdb || !activeTxn) { + return false; + } + int ret = activeTxn->abort(); + activeTxn = nullptr; + return (ret == 0); +}