6 #ifndef BITCOIN_WALLET_BDB_H 7 #define BITCOIN_WALLET_BDB_H 20 #include <unordered_map> 23 #if defined(__GNUC__) && !defined(__clang__) 24 #pragma GCC diagnostic push 25 #pragma GCC diagnostic ignored "-Wsuggest-override" 28 #if defined(__GNUC__) && !defined(__clang__) 29 #pragma GCC diagnostic pop 55 std::map<std::string, std::reference_wrapper<BerkeleyDatabase>>
m_databases;
56 std::unordered_map<std::string, WalletDatabaseFileId>
m_fileids;
64 bool IsMock()
const {
return fMockDb; }
70 void Flush(
bool fShutdown);
71 void CheckpointLSN(
const std::string& strFile);
73 void CloseDb(
const std::string& strFile);
78 DbTxn* ptxn =
nullptr;
79 int ret = dbenv->txn_begin(
nullptr, &ptxn,
flags);
80 if (!ptxn || ret != 0)
87 std::shared_ptr<BerkeleyEnvironment>
GetBerkeleyEnv(
const fs::path& env_directory);
103 auto inserted = this->env->m_databases.emplace(strFile, std::ref(*
this));
110 void Open()
override;
114 bool Rewrite(
const char* pszSkip=
nullptr)
override;
117 void AddRef()
override;
119 void RemoveRef()
override;
123 bool Backup(
const std::string& strDest)
const override;
127 void Flush()
override;
131 void Close()
override;
134 bool PeriodicFlush()
override;
136 void IncrementUpdateCounter()
override;
138 void ReloadDbEnv()
override;
144 std::string
Filename()
override {
return (env->Directory() / strFile).
string(); }
146 std::string
Format()
override {
return "bdb"; }
156 std::shared_ptr<BerkeleyEnvironment>
env;
164 std::unique_ptr<DatabaseBatch> MakeBatch(
bool flush_on_close =
true)
override;
179 SafeDbt(
void* data,
size_t size);
183 const void* get_data()
const;
184 u_int32_t get_size()
const;
213 void Flush()
override;
214 void Close()
override;
216 bool StartCursor()
override;
218 void CloseCursor()
override;
219 bool TxnBegin()
override;
220 bool TxnCommit()
override;
221 bool TxnAbort()
override;
229 #endif // BITCOIN_WALLET_BDB_H
bool IsInitialized() const
std::unordered_map< std::string, WalletDatabaseFileId > m_fileids
BerkeleyDatabase & m_database
An instance of this class represents one database.
static const unsigned int DEFAULT_WALLET_DBLOGSIZE
Double ended buffer combining vector and stream-like interfaces.
static const bool DEFAULT_WALLET_PRIVDB
fs::path Directory() const
std::string Format() override
DbTxn * TxnBegin(int flags=DB_TXN_WRITE_NOSYNC)
std::shared_ptr< BerkeleyEnvironment > env
Pointer to shared database environment.
std::map< std::string, std::reference_wrapper< BerkeleyDatabase > > m_databases
std::unique_ptr< DbEnv > dbenv
BerkeleyDatabase(std::shared_ptr< BerkeleyEnvironment > env, std::string filename)
Create DB handle to real database.
std::unique_ptr< BerkeleyDatabase > MakeBerkeleyDatabase(const fs::path &path, const DatabaseOptions &options, DatabaseStatus &status, bilingual_str &error)
Return object giving access to Berkeley database at specified path.
RAII class that provides access to a WalletDatabase.
RAII class that provides access to a Berkeley database.
bool operator==(const WalletDatabaseFileId &rhs) const
std::shared_ptr< BerkeleyEnvironment > GetBerkeleyEnv(const fs::path &env_directory)
Get BerkeleyEnvironment given a directory path.
std::string Filename() override
Return path to main database filename.
BerkeleyEnvironment * env
u_int8_t value[DB_FILE_ID_LEN]
std::string BerkeleyDatabaseVersion()
std::unique_ptr< Db > m_db
Database pointer.
bool error(const char *fmt, const Args &... args)
RAII class that automatically cleanses its data on destruction.
An instance of this class represents one database.
std::condition_variable_any m_db_in_use