Bitcoin Core 32.1.0
P2P Digital Currency
Loading...
Searching...
No Matches
wallet::SQLiteBatch Class Reference

RAII class that provides access to a WalletDatabase. More...

#include <sqlite.h>

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

Public Member Functions

 SQLiteBatch (SQLiteDatabase &database)
 ~SQLiteBatch () override
void SetExecHandler (std::unique_ptr< SQliteExecHandler > &&handler)
void Close () override
std::unique_ptr< DatabaseCursor > GetNewCursor () override
std::unique_ptr< DatabaseCursor > GetNewPrefixCursor (std::span< const std::byte > prefix) override
bool TxnBegin () override
bool TxnCommit () override
bool TxnAbort () override
bool HasActiveTxn () override
Public Member Functions inherited from wallet::DatabaseBatch
 DatabaseBatch ()=default
virtual ~DatabaseBatch ()=default
 DatabaseBatch (const DatabaseBatch &)=delete
DatabaseBatch & operator= (const DatabaseBatch &)=delete
template<typename K, typename T>
bool Read (const K &key, T &value)
template<typename K, typename T>
bool Write (const K &key, const T &value, bool fOverwrite=true)
template<typename K>
bool Erase (const K &key)
template<typename K>
bool Exists (const K &key)

Protected Member Functions

bool ReadKey (DataStream &&key, DataStream &value) override
bool WriteKey (DataStream &&key, DataStream &&value, bool overwrite=true) override
bool EraseKey (DataStream &&key) override
bool HasKey (DataStream &&key) override
bool ErasePrefix (std::span< const std::byte > prefix) override

Private Member Functions

void SetupSQLStatements ()
bool ExecStatement (sqlite3_stmt *stmt, std::span< const std::byte > blob)

Private Attributes

SQLiteDatabase & m_database
std::unique_ptr< SQliteExecHandler > m_exec_handler {std::make_unique<SQliteExecHandler>()}
sqlite3_stmt * m_read_stmt {nullptr}
sqlite3_stmt * m_insert_stmt {nullptr}
sqlite3_stmt * m_overwrite_stmt {nullptr}
sqlite3_stmt * m_delete_stmt {nullptr}
sqlite3_stmt * m_delete_prefix_stmt {nullptr}
bool m_txn {false}
 Whether this batch has started a database transaction and whether it owns SQLiteDatabase::m_write_semaphore.

Detailed Description

RAII class that provides access to a WalletDatabase.

Definition at line 51 of file sqlite.h.

Constructor & Destructor Documentation

◆ SQLiteBatch()

wallet::SQLiteBatch::SQLiteBatch ( SQLiteDatabase & database)
explicit

Definition at line 409 of file sqlite.cpp.

Here is the call graph for this function:

◆ ~SQLiteBatch()

wallet::SQLiteBatch::~SQLiteBatch ( )
inlineoverride

Definition at line 87 of file sqlite.h.

Here is the call graph for this function:

Member Function Documentation

◆ Close()

void wallet::SQLiteBatch::Close ( )
overridevirtual

Implements wallet::DatabaseBatch.

Definition at line 418 of file sqlite.cpp.

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

◆ EraseKey()

bool wallet::SQLiteBatch::EraseKey ( DataStream && key)
overrideprotectedvirtual

Implements wallet::DatabaseBatch.

Definition at line 553 of file sqlite.cpp.

Here is the call graph for this function:

◆ ErasePrefix()

bool wallet::SQLiteBatch::ErasePrefix ( std::span< const std::byte > prefix)
overrideprotectedvirtual

Implements wallet::DatabaseBatch.

Definition at line 558 of file sqlite.cpp.

Here is the call graph for this function:

◆ ExecStatement()

bool wallet::SQLiteBatch::ExecStatement ( sqlite3_stmt * stmt,
std::span< const std::byte > blob )
private

Definition at line 529 of file sqlite.cpp.

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

◆ GetNewCursor()

std::unique_ptr< DatabaseCursor > wallet::SQLiteBatch::GetNewCursor ( )
overridevirtual

Implements wallet::DatabaseBatch.

Definition at line 607 of file sqlite.cpp.

◆ GetNewPrefixCursor()

std::unique_ptr< DatabaseCursor > wallet::SQLiteBatch::GetNewPrefixCursor ( std::span< const std::byte > prefix)
overridevirtual

Implements wallet::DatabaseBatch.

Definition at line 622 of file sqlite.cpp.

Here is the call graph for this function:

◆ HasActiveTxn()

bool wallet::SQLiteBatch::HasActiveTxn ( )
inlineoverridevirtual

Implements wallet::DatabaseBatch.

Definition at line 98 of file sqlite.h.

◆ HasKey()

bool wallet::SQLiteBatch::HasKey ( DataStream && key)
overrideprotectedvirtual

Implements wallet::DatabaseBatch.

Definition at line 563 of file sqlite.cpp.

Here is the call graph for this function:

◆ ReadKey()

bool wallet::SQLiteBatch::ReadKey ( DataStream && key,
DataStream & value )
overrideprotectedvirtual

Implements wallet::DatabaseBatch.

Definition at line 470 of file sqlite.cpp.

Here is the call graph for this function:

◆ SetExecHandler()

void wallet::SQLiteBatch::SetExecHandler ( std::unique_ptr< SQliteExecHandler > && handler)
inline

Definition at line 89 of file sqlite.h.

◆ SetupSQLStatements()

void wallet::SQLiteBatch::SetupSQLStatements ( )
private

Definition at line 150 of file sqlite.cpp.

Here is the caller graph for this function:

◆ TxnAbort()

bool wallet::SQLiteBatch::TxnAbort ( )
overridevirtual

Implements wallet::DatabaseBatch.

Definition at line 693 of file sqlite.cpp.

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

◆ TxnBegin()

bool wallet::SQLiteBatch::TxnBegin ( )
overridevirtual

Implements wallet::DatabaseBatch.

Definition at line 664 of file sqlite.cpp.

Here is the call graph for this function:

◆ TxnCommit()

bool wallet::SQLiteBatch::TxnCommit ( )
overridevirtual

Implements wallet::DatabaseBatch.

Definition at line 679 of file sqlite.cpp.

Here is the call graph for this function:

◆ WriteKey()

bool wallet::SQLiteBatch::WriteKey ( DataStream && key,
DataStream && value,
bool overwrite = true )
overrideprotectedvirtual

Implements wallet::DatabaseBatch.

Definition at line 496 of file sqlite.cpp.

Here is the call graph for this function:

Member Data Documentation

◆ m_database

SQLiteDatabase& wallet::SQLiteBatch::m_database
private

Definition at line 54 of file sqlite.h.

◆ m_delete_prefix_stmt

sqlite3_stmt* wallet::SQLiteBatch::m_delete_prefix_stmt {nullptr}
private

Definition at line 61 of file sqlite.h.

◆ m_delete_stmt

sqlite3_stmt* wallet::SQLiteBatch::m_delete_stmt {nullptr}
private

Definition at line 60 of file sqlite.h.

◆ m_exec_handler

std::unique_ptr<SQliteExecHandler> wallet::SQLiteBatch::m_exec_handler {std::make_unique<SQliteExecHandler>()}
private

Definition at line 55 of file sqlite.h.

◆ m_insert_stmt

sqlite3_stmt* wallet::SQLiteBatch::m_insert_stmt {nullptr}
private

Definition at line 58 of file sqlite.h.

◆ m_overwrite_stmt

sqlite3_stmt* wallet::SQLiteBatch::m_overwrite_stmt {nullptr}
private

Definition at line 59 of file sqlite.h.

◆ m_read_stmt

sqlite3_stmt* wallet::SQLiteBatch::m_read_stmt {nullptr}
private

Definition at line 57 of file sqlite.h.

◆ m_txn

bool wallet::SQLiteBatch::m_txn {false}
private

Whether this batch has started a database transaction and whether it owns SQLiteDatabase::m_write_semaphore.

If the batch starts a db tx, it acquires the semaphore and sets this to true, keeping the semaphore until the transaction ends to prevent other batch objects from writing to the database.

If this batch did not start a transaction, the semaphore is acquired transiently when writing and m_txn is not set.

m_txn is different from HasActiveTxn() as it is only true when this batch has started the transaction, not just when any batch has started a transaction.

Definition at line 73 of file sqlite.h.


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