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