13 std::source_location call)
16 sqlite3_prepare_v2(db, sql.data(),
int(sql.size()), &
m_stmt,
nullptr);
18 throw std::logic_error(
19 std::format(
"ERROR preparing SQLite statement: {} ({}) at {} [{}:{}]",
20 sqlite3_errstr(err), sqlite3_errmsg(
m_db),
45 const int err = sqlite3_reset(
m_stmt);
47 throw std::runtime_error(
48 std::format(
"ERROR in SQLite statement reset: {} ({})",
49 sqlite3_errstr(err), sqlite3_errmsg(
m_db)));
51 sqlite3_clear_bindings(
m_stmt);
55 int err = SQLITE_BUSY;
56 while (err == SQLITE_BUSY) {
57 err = sqlite3_step(
m_stmt);
65 throw std::runtime_error(
66 std::format(
"ERROR in SQLite statement step: {} ({})",
67 sqlite3_errstr(err), sqlite3_errmsg(
m_db)));
74 const int err = sqlite3_bind_int64(
m_stmt,
index, value);
76 throw std::tuple<int, int>{err,
index};
81 const int err = sqlite3_bind_double(
m_stmt,
index, value);
83 throw std::tuple<int, int>{err,
index};
88 const int err = sqlite3_bind_text(
m_stmt,
index, value.data(),
89 int(value.size()), SQLITE_TRANSIENT);
91 throw std::tuple<int, int>{err,
index};
void reset()
Reset prepared statement for re-execution and clear bindings.
Statement & operator=(Statement &&rhs) noexcept
Move assignment operator allows Statement member variables to be filled from createStatement.
Statement(sqlite3 *db, std::string_view sql, std::source_location call)
Create a prepared statement attached to an SQLiteDBSvc This class should be constructed using the cre...
void bind(int index, std::int64_t value)
Bind an integer to a parameter.
std::recursive_mutex m_stmtMutex
std::source_location m_creationPoint
bool step()
Step through the prepared statement.