6 #ifndef BITCOIN_WALLET_DB_H 7 #define BITCOIN_WALLET_DB_H 21 void SplitWalletPath(
const fs::path& wallet_path, fs::path& env_directory, std::string& database_filename);
39 virtual void Flush() = 0;
40 virtual void Close() = 0;
42 template <
typename K,
typename T>
43 bool Read(
const K& key, T& value)
50 if (!
ReadKey(std::move(ssKey), ssValue))
return false;
54 }
catch (
const std::exception&) {
59 template <
typename K,
typename T>
60 bool Write(
const K& key,
const T& value,
bool fOverwrite =
true)
70 return WriteKey(std::move(ssKey), std::move(ssValue), fOverwrite);
90 return HasKey(std::move(ssKey));
111 virtual void Open() = 0;
116 virtual void AddRef() = 0;
122 virtual bool Rewrite(
const char* pszSkip=
nullptr) = 0;
126 virtual bool Backup(
const std::string& strDest)
const = 0;
130 virtual void Flush() = 0;
134 virtual void Close() = 0;
146 virtual std::string
Format() = 0;
154 virtual std::unique_ptr<DatabaseBatch>
MakeBatch(
bool flush_on_close =
true) = 0;
186 bool Rewrite(
const char* pszSkip=
nullptr)
override {
return true; }
187 bool Backup(
const std::string& strDest)
const override {
return true; }
193 std::string
Filename()
override {
return "dummy"; }
194 std::string
Format()
override {
return "dummy"; }
195 std::unique_ptr<DatabaseBatch>
MakeBatch(
bool flush_on_close =
true)
override {
return std::make_unique<DummyBatch>(); }
235 #endif // BITCOIN_WALLET_DB_H virtual bool Backup(const std::string &strDest) const =0
Back up the entire database to a file.
virtual void Flush()=0
Make sure all changes are flushed to database file.
int64_t nLastWalletUpdate
WalletDatabase()
Create dummy DB handle.
virtual bool ReadKey(CDataStream &&key, CDataStream &value)=0
virtual bool HasKey(CDataStream &&key)=0
bool HasKey(CDataStream &&key) override
std::string Format() override
virtual void RemoveRef()=0
Indicate that database user has stopped using the database and that it could be flushed or closed...
void RemoveRef() override
Indicate that database user has stopped using the database and that it could be flushed or closed...
bool IsSQLiteFile(const fs::path &path)
virtual bool PeriodicFlush()=0
virtual bool TxnAbort()=0
std::basic_string< char, std::char_traits< char >, secure_allocator< char > > SecureString
virtual bool TxnBegin()=0
virtual std::unique_ptr< DatabaseBatch > MakeBatch(bool flush_on_close=true)=0
Make a DatabaseBatch connected to this database.
fs::path BDBDataFile(const fs::path &path)
Double ended buffer combining vector and stream-like interfaces.
virtual bool EraseKey(CDataStream &&key)=0
std::vector< fs::path > ListDatabases(const fs::path &path)
Recursively list database paths in directory.
void SplitWalletPath(const fs::path &wallet_path, fs::path &env_directory, std::string &database_filename)
bool Write(const K &key, const T &value, bool fOverwrite=true)
bool StartCursor() override
bool ReadAtCursor(CDataStream &ssKey, CDataStream &ssValue, bool &complete) override
DatabaseBatch & operator=(const DatabaseBatch &)=delete
void CloseCursor() override
virtual bool Rewrite(const char *pszSkip=nullptr)=0
Rewrite the entire database on disk, with the exception of key pszSkip if non-zero.
bool PeriodicFlush() override
fs::path SQLiteDataFile(const fs::path &path)
virtual bool ReadAtCursor(CDataStream &ssKey, CDataStream &ssValue, bool &complete)=0
bool Read(const K &key, T &value)
virtual void Close()=0
Flush to the database file and close the database.
RAII class that provides access to a WalletDatabase.
virtual std::string Format()=0
void Close() override
Flush to the database file and close the database.
void AddRef() override
Indicate the a new database user has began using the database.
A dummy WalletDatabase that does nothing and never fails.
virtual std::string Filename()=0
Return path to main database file for logs and error messages.
bool WriteKey(CDataStream &&key, CDataStream &&value, bool overwrite=true) override
void ReloadDbEnv() override
virtual void CloseCursor()=0
std::unique_ptr< DatabaseBatch > MakeBatch(bool flush_on_close=true) override
Make a DatabaseBatch connected to this database.
void Flush() override
Make sure all changes are flushed to database file.
bool IsBDBFile(const fs::path &path)
bool EraseKey(CDataStream &&key) override
void IncrementUpdateCounter() override
void reserve(size_type n)
std::atomic< unsigned int > nUpdateCounter
virtual bool TxnCommit()=0
unsigned int nLastFlushed
std::optional< DatabaseFormat > require_format
virtual bool StartCursor()=0
virtual ~WalletDatabase()
bool TxnCommit() override
virtual void Open()=0
Open the database if it is not already opened.
virtual void IncrementUpdateCounter()=0
SecureString create_passphrase
virtual bool WriteKey(CDataStream &&key, CDataStream &&value, bool overwrite=true)=0
std::string Filename() override
Return path to main database file for logs and error messages.
RAII class that provides access to a DummyDatabase.
bool Exists(const K &key)
bool ReadKey(CDataStream &&key, CDataStream &value) override
static const int CLIENT_VERSION
bitcoind-res.rc includes this file, but it cannot cope with real c++ code.
virtual void ReloadDbEnv()=0
std::atomic< int > m_refcount
Counts the number of active database users to be sure that the database is not closed while someone i...
bool error(const char *fmt, const Args &... args)
std::unique_ptr< WalletDatabase > MakeDatabase(const fs::path &path, const DatabaseOptions &options, DatabaseStatus &status, bilingual_str &error)
void Open() override
Open the database if it is not already opened.
bool Rewrite(const char *pszSkip=nullptr) override
Rewrite the entire database on disk, with the exception of key pszSkip if non-zero.
virtual void AddRef()=0
Indicate the a new database user has began using the database.
bool Backup(const std::string &strDest) const override
Back up the entire database to a file.
An instance of this class represents one database.