4 #ifndef DBALLE_SQL_MYSQL_H 5 #define DBALLE_SQL_MYSQL_H 14 struct MySQLStatement;
24 error_mysql(
const std::string& dbmsg,
const std::string& msg);
27 const char* what()
const noexcept
override {
return msg.c_str(); }
38 bool has_passwd =
false;
40 bool has_dbname =
false;
43 std::string unix_socket;
47 void parse_url(
const std::string& url);
49 std::string to_url()
const;
54 MYSQL_RES* res =
nullptr;
55 MYSQL_ROW row =
nullptr;
57 Row(MYSQL_RES* res, MYSQL_ROW row) : res(res), row(row) {}
59 operator bool()
const {
return row !=
nullptr; }
60 operator MYSQL_ROW() {
return row; }
61 operator const MYSQL_ROW()
const {
return row; }
63 int as_int(
unsigned col)
const {
return strtol(row[col], 0, 10); }
64 unsigned as_unsigned(
unsigned col)
const {
return strtoul(row[col], 0, 10); }
65 const char* as_cstring(
unsigned col)
const {
return row[col]; }
66 std::string as_string(
unsigned col)
const {
return std::string(row[col], mysql_fetch_lengths(res)[col]); }
67 std::vector<uint8_t> as_blob(
unsigned col)
const 69 return std::vector<uint8_t>(row[col], row[col] + mysql_fetch_lengths(res)[col]);
72 bool isnull(
unsigned col)
const {
return row[col] ==
nullptr; }
77 MYSQL_RES* res =
nullptr;
80 Result(MYSQL_RES* res) : res(res) {}
81 ~
Result() {
if (res) mysql_free_result(res); }
87 if (
this == &o)
return *
this;
88 if (res) mysql_free_result(res);
94 operator bool()
const {
return res !=
nullptr; }
96 operator MYSQL_RES*() {
return res; }
97 operator const MYSQL_RES*()
const {
return res; }
99 unsigned rowcount()
const {
return mysql_num_rows(res); }
100 unsigned colcount()
const {
return mysql_num_fields(res); }
103 Row expect_one_result();
134 void init_after_connect();
147 operator MYSQL*() {
return db; }
150 void open_url(
const std::string& url);
154 std::string escape(
const char* str);
156 std::string escape(
const std::string& str);
158 std::string escape(
const std::vector<uint8_t>& str);
164 void exec_no_data_nothrow(
const char* query) noexcept;
166 void exec_no_data(
const char* query);
168 void exec_no_data(
const std::string& query);
174 void exec_use(
const char* query, std::function<
void(
const mysql::Row&)> dest);
176 void exec_use(
const std::string& query, std::function<
void(
const mysql::Row&)> dest);
178 std::unique_ptr<Transaction> transaction()
override;
179 bool has_table(
const std::string& name)
override;
180 std::string get_setting(
const std::string& key)
override;
181 void set_setting(
const std::string& key,
const std::string& value)
override;
182 void drop_settings()
override;
183 void execute(
const std::string& query)
override;
184 void explain(
const std::string& query, FILE* out)
override;
189 void drop_table_if_exists(
const char* name);
197 int get_last_insert_id();
Row fetch()
Fetch one row.
Definition: mysql.h:114
Report a MySQL error.
Definition: mysql.h:19
Result(Result &&o)
Implement move.
Definition: mysql.h:84
Copyright (C) 2008–2010 ARPA-SIM urpsim@smr.arpa.emr.it
Definition: cmdline.h:17
Common infrastructure for talking with SQL databases.
Error in case of failed database operations.
Definition: error.h:21
Date and time.
Definition: types.h:158
#define WREPORT_THROWF_ATTRS(a, b)
Database connection.
Definition: mysql.h:125