4 #ifndef DBALLE_SQL_SQLITE_H 5 #define DBALLE_SQL_SQLITE_H 7 #include <dballe/core/error.h> 14 struct SQLiteStatement;
24 error_sqlite(
const std::string& dbmsg,
const std::string& msg);
27 const char* what()
const noexcept
override {
return msg.c_str(); }
37 sqlite3* db =
nullptr;
39 void init_after_connect();
40 static void on_sqlite3_profile(
void* arg,
const char* query, sqlite3_uint64 usecs);
50 operator sqlite3*() {
return db; }
52 void open_file(
const std::string& pathname,
int flags=SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE);
53 void open_memory(
int flags=SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE);
54 void open_private_file(
int flags=SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE);
56 std::unique_ptr<Transaction> transaction()
override;
57 std::unique_ptr<SQLiteStatement> sqlitestatement(
const std::string& query);
59 bool has_table(
const std::string& name)
override;
60 std::string get_setting(
const std::string& key)
override;
61 void set_setting(
const std::string& key,
const std::string& value)
override;
62 void drop_settings()
override;
63 void execute(
const std::string& query)
override;
64 void explain(
const std::string& query, FILE* out)
override;
69 void drop_table_if_exists(
const char* name);
77 int get_last_insert_id();
83 void exec(
const std::string& query);
84 void exec_nothrow(
const std::string& query) noexcept;
91 sqlite3_stmt *stm =
nullptr;
106 template<
typename... Args>
void bind(
const Args& ...args)
108 bindn<
sizeof...(args)>(args...);
111 void bind_null_val(
int idx);
112 void bind_val(
int idx,
int val);
113 void bind_val(
int idx,
unsigned val);
114 void bind_val(
int idx,
unsigned short val);
115 void bind_val(
int idx,
const Datetime& val);
116 void bind_val(
int idx,
const char* val);
117 void bind_val(
int idx,
const std::string& val);
118 void bind_val(
int idx,
const std::vector<uint8_t>& val);
129 void execute(std::function<
void()> on_row);
135 void execute_one(std::function<
void()> on_row);
138 int column_int(
int col) {
return sqlite3_column_int(stm, col); }
141 sqlite3_int64
column_int64(
int col) {
return sqlite3_column_int64(stm, col); }
147 const char*
column_string(
int col) {
return (
const char*)sqlite3_column_text(stm, col); }
151 int size = sqlite3_column_bytes(stm, col);
152 const uint8_t* val = (
const uint8_t*)sqlite3_column_blob(stm, col);
153 return std::vector<uint8_t>(val, val + size);
160 bool column_isnull(
int col) {
return sqlite3_column_type(stm, col) == SQLITE_NULL; }
162 void wrap_sqlite3_reset();
163 void wrap_sqlite3_reset_nothrow() noexcept;
168 [[noreturn]]
void reset_and_throw(
const std::string& errmsg);
170 operator sqlite3_stmt*() {
return stm; }
175 int exec_direct(
const char* query);
177 int exec_direct(
const char* query,
int qlen);
180 int execute_and_close();
182 int exec_direct_and_close(
const char* query);
184 int exec_direct_and_close(
const char* query,
int qlen);
192 bool fetch_expecting_one();
194 void close_cursor_if_needed();
196 size_t select_rowcount();
203 template<
size_t total>
void bindn() {}
205 template<
size_t total,
typename ...Args,
typename T>
void bindn(
const T& first,
const Args& ...args)
207 bind_val(total -
sizeof...(args), first);
208 bindn<total>(args...);
const char * column_string(int col)
Read the string value of a column in the result set (0-based)
Definition: sqlite.h:147
sqlite3_int64 column_int64(int col)
Read the int value of a column in the result set (0-based)
Definition: sqlite.h:141
void bind(const Args &...args)
Bind all the arguments in a single invocation.
Definition: sqlite.h:106
int column_int(int col)
Read the int value of a column in the result set (0-based)
Definition: sqlite.h:138
bool column_isnull(int col)
Check if a column has a NULL value (0-based)
Definition: sqlite.h:160
Copyright (C) 2008–2010 ARPA-SIM urpsim@smr.arpa.emr.it
Definition: cmdline.h:17
double column_double(int col)
Read the double value of a column in the result set (0-based)
Definition: sqlite.h:144
Common infrastructure for talking with SQL databases.
Error in case of failed database operations.
Definition: error.h:21
Report an SQLite error.
Definition: sqlite.h:19
Date and time.
Definition: types.h:158
#define WREPORT_THROWF_ATTRS(a, b)
SQLite statement.
Definition: sqlite.h:88
std::vector< uint8_t > column_blob(int col)
Read the string value of a column in the result set (0-based)
Definition: sqlite.h:150
Database connection.
Definition: sqlite.h:33