aboutsummaryrefslogtreecommitdiff
path: root/src/wallet/db.cpp
diff options
context:
space:
mode:
authorAndrew Chow <achow101-github@achow101.com>2020-06-15 20:34:25 -0400
committerAndrew Chow <achow101-github@achow101.com>2020-06-15 20:35:39 -0400
commit8f033642a8c6874184e297b97b951b9bd12ffd75 (patch)
tree0165173767e58873341b247e11b2f8d23f331275 /src/wallet/db.cpp
parent25a655794a0c495332dadedd88b87d694c1077c2 (diff)
downloadbitcoin-8f033642a8c6874184e297b97b951b9bd12ffd75.tar.xz
walletdb: moveonly: Move BerkeleyBatch Cursor and Txn funcs to cpp
Put the implementation in the cpp, not the h file.
Diffstat (limited to 'src/wallet/db.cpp')
-rw-r--r--src/wallet/db.cpp61
1 files changed, 61 insertions, 0 deletions
diff --git a/src/wallet/db.cpp b/src/wallet/db.cpp
index 99ad963f9a..5bf3f6dff6 100644
--- a/src/wallet/db.cpp
+++ b/src/wallet/db.cpp
@@ -761,6 +761,67 @@ void BerkeleyDatabase::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);
+}
+
std::string BerkeleyDatabaseVersion()
{
return DbEnv::version(nullptr, nullptr, nullptr);