mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-06-20 22:04:19 +02:00
Implement SQLiteBatch::StartCursor, ReadAtCursor, and CloseCursor
This commit is contained in:
parent
bf90e033f4
commit
f6f9cd6a64
@ -369,16 +369,42 @@ bool SQLiteBatch::HasKey(CDataStream&& key)
|
|||||||
|
|
||||||
bool SQLiteBatch::StartCursor()
|
bool SQLiteBatch::StartCursor()
|
||||||
{
|
{
|
||||||
return false;
|
assert(!m_cursor_init);
|
||||||
|
if (!m_database.m_db) return false;
|
||||||
|
m_cursor_init = true;
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool SQLiteBatch::ReadAtCursor(CDataStream& key, CDataStream& value, bool& complete)
|
bool SQLiteBatch::ReadAtCursor(CDataStream& key, CDataStream& value, bool& complete)
|
||||||
{
|
{
|
||||||
return false;
|
complete = false;
|
||||||
|
|
||||||
|
if (!m_cursor_init) return false;
|
||||||
|
|
||||||
|
int res = sqlite3_step(m_cursor_stmt);
|
||||||
|
if (res == SQLITE_DONE) {
|
||||||
|
complete = true;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
if (res != SQLITE_ROW) {
|
||||||
|
LogPrintf("SQLiteBatch::ReadAtCursor: Unable to execute cursor step: %s\n", sqlite3_errstr(res));
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Leftmost column in result is index 0
|
||||||
|
const char* key_data = reinterpret_cast<const char*>(sqlite3_column_blob(m_cursor_stmt, 0));
|
||||||
|
int key_data_size = sqlite3_column_bytes(m_cursor_stmt, 0);
|
||||||
|
key.write(key_data, key_data_size);
|
||||||
|
const char* value_data = reinterpret_cast<const char*>(sqlite3_column_blob(m_cursor_stmt, 1));
|
||||||
|
int value_data_size = sqlite3_column_bytes(m_cursor_stmt, 1);
|
||||||
|
value.write(value_data, value_data_size);
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void SQLiteBatch::CloseCursor()
|
void SQLiteBatch::CloseCursor()
|
||||||
{
|
{
|
||||||
|
sqlite3_reset(m_cursor_stmt);
|
||||||
|
m_cursor_init = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool SQLiteBatch::TxnBegin()
|
bool SQLiteBatch::TxnBegin()
|
||||||
|
@ -18,6 +18,8 @@ class SQLiteBatch : public DatabaseBatch
|
|||||||
private:
|
private:
|
||||||
SQLiteDatabase& m_database;
|
SQLiteDatabase& m_database;
|
||||||
|
|
||||||
|
bool m_cursor_init = false;
|
||||||
|
|
||||||
sqlite3_stmt* m_read_stmt{nullptr};
|
sqlite3_stmt* m_read_stmt{nullptr};
|
||||||
sqlite3_stmt* m_insert_stmt{nullptr};
|
sqlite3_stmt* m_insert_stmt{nullptr};
|
||||||
sqlite3_stmt* m_overwrite_stmt{nullptr};
|
sqlite3_stmt* m_overwrite_stmt{nullptr};
|
||||||
|
Loading…
x
Reference in New Issue
Block a user