Bitcoin Core  26.1.0
P2P Digital Currency
Public Member Functions | Public Attributes | Private Member Functions | Static Private Member Functions | Private Attributes | Static Private Attributes | List of all members
wallet::SQLiteDatabase Class Reference

An instance of this class represents one SQLite3 database. More...

#include <sqlite.h>

Inheritance diagram for wallet::SQLiteDatabase:
[legend]
Collaboration diagram for wallet::SQLiteDatabase:
[legend]

Public Member Functions

 SQLiteDatabase ()=delete
 
 SQLiteDatabase (const fs::path &dir_path, const fs::path &file_path, const DatabaseOptions &options, bool mock=false)
 Create DB handle to real database. More...
 
 ~SQLiteDatabase ()
 
bool Verify (bilingual_str &error)
 
void Open () override
 Open the database if it is not already opened. More...
 
void Close () override
 Close the database. More...
 
void AddRef () override
 Indicate the a new database user has began using the database. More...
 
void RemoveRef () override
 Indicate that database user has stopped using the database and that it could be flushed or closed. More...
 
bool Rewrite (const char *skip=nullptr) override
 Rewrite the entire database on disk. More...
 
bool Backup (const std::string &dest) const override
 Back up the entire database to a file. More...
 
void Flush () override
 No-ops. More...
 
bool PeriodicFlush () override
 
void ReloadDbEnv () override
 
void IncrementUpdateCounter () override
 
std::string Filename () override
 Return path to main database file for logs and error messages. More...
 
std::string Format () override
 
std::unique_ptr< DatabaseBatchMakeBatch (bool flush_on_close=true) override
 Make a SQLiteBatch connected to this database. More...
 
- Public Member Functions inherited from wallet::WalletDatabase
 WalletDatabase ()
 Create dummy DB handle. More...
 
virtual ~WalletDatabase ()
 

Public Attributes

sqlite3 * m_db {nullptr}
 
bool m_use_unsafe_sync
 
- Public Attributes inherited from wallet::WalletDatabase
std::atomic< int > m_refcount {0}
 Counts the number of active database users to be sure that the database is not closed while someone is using it. More...
 
std::atomic< unsigned int > nUpdateCounter
 
unsigned int nLastSeen {0}
 
unsigned int nLastFlushed {0}
 
int64_t nLastWalletUpdate {0}
 

Private Member Functions

void Cleanup () noexcept EXCLUSIVE_LOCKS_REQUIRED(!g_sqlite_mutex)
 

Static Private Member Functions

static int g_sqlite_count GUARDED_BY (g_sqlite_mutex)
 

Private Attributes

const bool m_mock {false}
 
const std::string m_dir_path
 
const std::string m_file_path
 

Static Private Attributes

static Mutex g_sqlite_mutex
 This mutex protects SQLite initialization and shutdown. More...
 

Detailed Description

An instance of this class represents one SQLite3 database.

Definition at line 78 of file sqlite.h.

Constructor & Destructor Documentation

◆ SQLiteDatabase() [1/2]

wallet::SQLiteDatabase::SQLiteDatabase ( )
delete

◆ SQLiteDatabase() [2/2]

wallet::SQLiteDatabase::SQLiteDatabase ( const fs::path dir_path,
const fs::path file_path,
const DatabaseOptions options,
bool  mock = false 
)

Create DB handle to real database.

Definition at line 112 of file sqlite.cpp.

Here is the call graph for this function:

◆ ~SQLiteDatabase()

wallet::SQLiteDatabase::~SQLiteDatabase ( )

Definition at line 168 of file sqlite.cpp.

Here is the call graph for this function:

Member Function Documentation

◆ AddRef()

void wallet::SQLiteDatabase::AddRef ( )
inlineoverridevirtual

Indicate the a new database user has began using the database.

Increments m_refcount

Implements wallet::WalletDatabase.

Definition at line 115 of file sqlite.h.

Here is the call graph for this function:

◆ Backup()

bool wallet::SQLiteDatabase::Backup ( const std::string &  dest) const
overridevirtual

Back up the entire database to a file.

Implements wallet::WalletDatabase.

Definition at line 344 of file sqlite.cpp.

◆ Cleanup()

void wallet::SQLiteDatabase::Cleanup ( )
privatenoexcept

Definition at line 173 of file sqlite.cpp.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ Close()

void wallet::SQLiteDatabase::Close ( )
overridevirtual

Close the database.

Implements wallet::WalletDatabase.

Definition at line 371 of file sqlite.cpp.

Here is the caller graph for this function:

◆ Filename()

std::string wallet::SQLiteDatabase::Filename ( )
inlineoverridevirtual

Return path to main database file for logs and error messages.

Implements wallet::WalletDatabase.

Definition at line 139 of file sqlite.h.

Here is the caller graph for this function:

◆ Flush()

void wallet::SQLiteDatabase::Flush ( )
inlineoverridevirtual

No-ops.

SQLite always flushes everything to the database file after each transaction (each Read/Write/Erase that we do is its own transaction unless we called TxnBegin) so there is no need to have Flush or Periodic Flush.

There is no DB env to reload, so ReloadDbEnv has nothing to do

Implements wallet::WalletDatabase.

Definition at line 133 of file sqlite.h.

◆ Format()

std::string wallet::SQLiteDatabase::Format ( )
inlineoverridevirtual

Implements wallet::WalletDatabase.

Definition at line 140 of file sqlite.h.

◆ GUARDED_BY()

static int g_sqlite_count wallet::SQLiteDatabase::GUARDED_BY ( g_sqlite_mutex  )
staticprivate

◆ IncrementUpdateCounter()

void wallet::SQLiteDatabase::IncrementUpdateCounter ( )
inlineoverridevirtual

Implements wallet::WalletDatabase.

Definition at line 137 of file sqlite.h.

◆ MakeBatch()

std::unique_ptr< DatabaseBatch > wallet::SQLiteDatabase::MakeBatch ( bool  flush_on_close = true)
overridevirtual

Make a SQLiteBatch connected to this database.

Implements wallet::WalletDatabase.

Definition at line 380 of file sqlite.cpp.

◆ Open()

void wallet::SQLiteDatabase::Open ( )
overridevirtual

Open the database if it is not already opened.

Implements wallet::WalletDatabase.

Definition at line 245 of file sqlite.cpp.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ PeriodicFlush()

bool wallet::SQLiteDatabase::PeriodicFlush ( )
inlineoverridevirtual

Implements wallet::WalletDatabase.

Definition at line 134 of file sqlite.h.

◆ ReloadDbEnv()

void wallet::SQLiteDatabase::ReloadDbEnv ( )
inlineoverridevirtual

Implements wallet::WalletDatabase.

Definition at line 135 of file sqlite.h.

◆ RemoveRef()

void wallet::SQLiteDatabase::RemoveRef ( )
inlineoverridevirtual

Indicate that database user has stopped using the database and that it could be flushed or closed.

Decrement m_refcount

Implements wallet::WalletDatabase.

Definition at line 116 of file sqlite.h.

Here is the call graph for this function:

◆ Rewrite()

bool wallet::SQLiteDatabase::Rewrite ( const char *  skip = nullptr)
overridevirtual

Rewrite the entire database on disk.

Implements wallet::WalletDatabase.

Definition at line 337 of file sqlite.cpp.

◆ Verify()

bool wallet::SQLiteDatabase::Verify ( bilingual_str error)

Definition at line 188 of file sqlite.cpp.

Here is the call graph for this function:

Member Data Documentation

◆ g_sqlite_mutex

Mutex wallet::SQLiteDatabase::g_sqlite_mutex
staticprivate

This mutex protects SQLite initialization and shutdown.

sqlite3_config() and sqlite3_shutdown() are not thread-safe (sqlite3_initialize() is). Concurrent threads that execute SQLiteDatabase::SQLiteDatabase() should have just one of them do the init and the rest wait for it to complete before all can proceed.

Definition at line 93 of file sqlite.h.

◆ m_db

sqlite3* wallet::SQLiteDatabase::m_db {nullptr}

Definition at line 145 of file sqlite.h.

◆ m_dir_path

const std::string wallet::SQLiteDatabase::m_dir_path
private

Definition at line 83 of file sqlite.h.

◆ m_file_path

const std::string wallet::SQLiteDatabase::m_file_path
private

Definition at line 85 of file sqlite.h.

◆ m_mock

const bool wallet::SQLiteDatabase::m_mock {false}
private

Definition at line 81 of file sqlite.h.

◆ m_use_unsafe_sync

bool wallet::SQLiteDatabase::m_use_unsafe_sync

Definition at line 146 of file sqlite.h.


The documentation for this class was generated from the following files: