Page Menu
Home
Phabricator
Search
Configure Global Search
Log In
Files
F13711036
D10002.id29711.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Size
5 KB
Subscribers
None
D10002.id29711.diff
View Options
diff --git a/src/wallet/bdb.h b/src/wallet/bdb.h
--- a/src/wallet/bdb.h
+++ b/src/wallet/bdb.h
@@ -184,7 +184,7 @@
};
/** RAII class that provides access to a Berkeley database */
-class BerkeleyBatch {
+class BerkeleyBatch : public DatabaseBatch {
/** RAII class that automatically cleanses its data on destruction */
class SafeDbt final {
Dbt m_dbt;
@@ -205,11 +205,11 @@
};
private:
- bool ReadKey(CDataStream &&key, CDataStream &value);
+ bool ReadKey(CDataStream &&key, CDataStream &value) override;
bool WriteKey(CDataStream &&key, CDataStream &&value,
- bool overwrite = true);
- bool EraseKey(CDataStream &&key);
- bool HasKey(CDataStream &&key);
+ bool overwrite = true) override;
+ bool EraseKey(CDataStream &&key) override;
+ bool HasKey(CDataStream &&key) override;
protected:
Db *pdb;
@@ -224,66 +224,21 @@
explicit BerkeleyBatch(BerkeleyDatabase &database,
const char *pszMode = "r+",
bool fFlushOnCloseIn = true);
- ~BerkeleyBatch() { Close(); }
+ ~BerkeleyBatch() override { Close(); }
BerkeleyBatch(const BerkeleyBatch &) = delete;
BerkeleyBatch &operator=(const BerkeleyBatch &) = delete;
- void Flush();
- void Close();
-
- template <typename K, typename T> bool Read(const K &key, T &value) {
- CDataStream ssKey(SER_DISK, CLIENT_VERSION);
- ssKey.reserve(1000);
- ssKey << key;
-
- CDataStream ssValue(SER_DISK, CLIENT_VERSION);
- if (!ReadKey(std::move(ssKey), ssValue)) {
- return false;
- }
- try {
- ssValue >> value;
- return true;
- } catch (const std::exception &) {
- return false;
- }
- }
-
- template <typename K, typename T>
- bool Write(const K &key, const T &value, bool fOverwrite = true) {
- CDataStream ssKey(SER_DISK, CLIENT_VERSION);
- ssKey.reserve(1000);
- ssKey << key;
-
- CDataStream ssValue(SER_DISK, CLIENT_VERSION);
- ssValue.reserve(10000);
- ssValue << value;
-
- return WriteKey(std::move(ssKey), std::move(ssValue), fOverwrite);
- }
-
- template <typename K> bool Erase(const K &key) {
- CDataStream ssKey(SER_DISK, CLIENT_VERSION);
- ssKey.reserve(1000);
- ssKey << key;
-
- return EraseKey(std::move(ssKey));
- }
-
- template <typename K> bool Exists(const K &key) {
- CDataStream ssKey(SER_DISK, CLIENT_VERSION);
- ssKey.reserve(1000);
- ssKey << key;
-
- return HasKey(std::move(ssKey));
- }
+ void Flush() override;
+ void Close() override;
- bool StartCursor();
- bool ReadAtCursor(CDataStream &ssKey, CDataStream &ssValue, bool &complete);
- void CloseCursor();
- bool TxnBegin();
- bool TxnCommit();
- bool TxnAbort();
+ bool StartCursor() override;
+ bool ReadAtCursor(CDataStream &ssKey, CDataStream &ssValue,
+ bool &complete) override;
+ void CloseCursor() override;
+ bool TxnBegin() override;
+ bool TxnCommit() override;
+ bool TxnAbort() override;
};
#endif // BITCOIN_WALLET_BDB_H
diff --git a/src/wallet/db.h b/src/wallet/db.h
--- a/src/wallet/db.h
+++ b/src/wallet/db.h
@@ -6,7 +6,9 @@
#ifndef BITCOIN_WALLET_DB_H
#define BITCOIN_WALLET_DB_H
+#include <clientversion.h>
#include <fs.h>
+#include <streams.h>
#include <string>
@@ -17,4 +19,78 @@
void SplitWalletPath(const fs::path &wallet_path, fs::path &env_directory,
std::string &database_filename);
+/** RAII class that provides access to a WalletDatabase */
+class DatabaseBatch {
+private:
+ virtual bool ReadKey(CDataStream &&key, CDataStream &value) = 0;
+ virtual bool WriteKey(CDataStream &&key, CDataStream &&value,
+ bool overwrite = true) = 0;
+ virtual bool EraseKey(CDataStream &&key) = 0;
+ virtual bool HasKey(CDataStream &&key) = 0;
+
+public:
+ explicit DatabaseBatch() {}
+ virtual ~DatabaseBatch() {}
+
+ DatabaseBatch(const DatabaseBatch &) = delete;
+ DatabaseBatch &operator=(const DatabaseBatch &) = delete;
+
+ virtual void Flush() = 0;
+ virtual void Close() = 0;
+
+ template <typename K, typename T> bool Read(const K &key, T &value) {
+ CDataStream ssKey(SER_DISK, CLIENT_VERSION);
+ ssKey.reserve(1000);
+ ssKey << key;
+
+ CDataStream ssValue(SER_DISK, CLIENT_VERSION);
+ if (!ReadKey(std::move(ssKey), ssValue)) {
+ return false;
+ }
+ try {
+ ssValue >> value;
+ return true;
+ } catch (const std::exception &) {
+ return false;
+ }
+ }
+
+ template <typename K, typename T>
+ bool Write(const K &key, const T &value, bool fOverwrite = true) {
+ CDataStream ssKey(SER_DISK, CLIENT_VERSION);
+ ssKey.reserve(1000);
+ ssKey << key;
+
+ CDataStream ssValue(SER_DISK, CLIENT_VERSION);
+ ssValue.reserve(10000);
+ ssValue << value;
+
+ return WriteKey(std::move(ssKey), std::move(ssValue), fOverwrite);
+ }
+
+ template <typename K> bool Erase(const K &key) {
+ CDataStream ssKey(SER_DISK, CLIENT_VERSION);
+ ssKey.reserve(1000);
+ ssKey << key;
+
+ return EraseKey(std::move(ssKey));
+ }
+
+ template <typename K> bool Exists(const K &key) {
+ CDataStream ssKey(SER_DISK, CLIENT_VERSION);
+ ssKey.reserve(1000);
+ ssKey << key;
+
+ return HasKey(std::move(ssKey));
+ }
+
+ virtual bool StartCursor() = 0;
+ virtual bool ReadAtCursor(CDataStream &ssKey, CDataStream &ssValue,
+ bool &complete) = 0;
+ virtual void CloseCursor() = 0;
+ virtual bool TxnBegin() = 0;
+ virtual bool TxnCommit() = 0;
+ virtual bool TxnAbort() = 0;
+};
+
#endif // BITCOIN_WALLET_DB_H
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Sat, Apr 26, 10:15 (1 h, 35 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
5564726
Default Alt Text
D10002.id29711.diff (5 KB)
Attached To
D10002: walletdb: Refactor DatabaseBatch abstract class from BerkeleyBatch
Event Timeline
Log In to Comment