Skip to content

Commit 9a36709

Browse files
committed
wallet: refactor: dedup sqlite statement preparations
1 parent e658b0e commit 9a36709

File tree

1 file changed

+18
-24
lines changed

1 file changed

+18
-24
lines changed

src/wallet/sqlite.cpp

Lines changed: 18 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,9 @@
1616
#include <sqlite3.h>
1717
#include <stdint.h>
1818

19+
#include <utility>
20+
#include <vector>
21+
1922
static constexpr int32_t WALLET_SCHEMA_VERSION = 0;
2023

2124
static Mutex g_sqlite_mutex;
@@ -69,30 +72,21 @@ SQLiteDatabase::SQLiteDatabase(const fs::path& dir_path, const fs::path& file_pa
6972

7073
void SQLiteBatch::SetupSQLStatements()
7174
{
72-
int res;
73-
if (!m_read_stmt) {
74-
if ((res = sqlite3_prepare_v2(m_database.m_db, "SELECT value FROM main WHERE key = ?", -1, &m_read_stmt, nullptr)) != SQLITE_OK) {
75-
throw std::runtime_error(strprintf("SQLiteDatabase: Failed to setup SQL statements: %s\n", sqlite3_errstr(res)));
76-
}
77-
}
78-
if (!m_insert_stmt) {
79-
if ((res = sqlite3_prepare_v2(m_database.m_db, "INSERT INTO main VALUES(?, ?)", -1, &m_insert_stmt, nullptr)) != SQLITE_OK) {
80-
throw std::runtime_error(strprintf("SQLiteDatabase: Failed to setup SQL statements: %s\n", sqlite3_errstr(res)));
81-
}
82-
}
83-
if (!m_overwrite_stmt) {
84-
if ((res = sqlite3_prepare_v2(m_database.m_db, "INSERT or REPLACE into main values(?, ?)", -1, &m_overwrite_stmt, nullptr)) != SQLITE_OK) {
85-
throw std::runtime_error(strprintf("SQLiteDatabase: Failed to setup SQL statements: %s\n", sqlite3_errstr(res)));
86-
}
87-
}
88-
if (!m_delete_stmt) {
89-
if ((res = sqlite3_prepare_v2(m_database.m_db, "DELETE FROM main WHERE key = ?", -1, &m_delete_stmt, nullptr)) != SQLITE_OK) {
90-
throw std::runtime_error(strprintf("SQLiteDatabase: Failed to setup SQL statements: %s\n", sqlite3_errstr(res)));
91-
}
92-
}
93-
if (!m_cursor_stmt) {
94-
if ((res = sqlite3_prepare_v2(m_database.m_db, "SELECT key, value FROM main", -1, &m_cursor_stmt, nullptr)) != SQLITE_OK) {
95-
throw std::runtime_error(strprintf("SQLiteDatabase: Failed to setup SQL statements : %s\n", sqlite3_errstr(res)));
75+
const std::vector<std::pair<sqlite3_stmt**, const char*>> statements{
76+
{&m_read_stmt, "SELECT value FROM main WHERE key = ?"},
77+
{&m_insert_stmt, "INSERT INTO main VALUES(?, ?)"},
78+
{&m_overwrite_stmt, "INSERT or REPLACE into main values(?, ?)"},
79+
{&m_delete_stmt, "DELETE FROM main WHERE key = ?"},
80+
{&m_cursor_stmt, "SELECT key, value FROM main"},
81+
};
82+
83+
for (const auto& [stmt_prepared, stmt_text] : statements) {
84+
if (*stmt_prepared == nullptr) {
85+
int res = sqlite3_prepare_v2(m_database.m_db, stmt_text, -1, stmt_prepared, nullptr);
86+
if (res != SQLITE_OK) {
87+
throw std::runtime_error(strprintf(
88+
"SQLiteDatabase: Failed to setup SQL statements: %s\n", sqlite3_errstr(res)));
89+
}
9690
}
9791
}
9892
}

0 commit comments

Comments
 (0)