12#include "sqlite-3.43.1/sqlite3.h"
20 sqlite(std::string_view filename) : db_(nullptr) {
21 int ret = sqlite3_open(filename.data(), &db_);
22 if (ret != SQLITE_OK) {
23 std::string msg = sqlite3_errmsg(db_);
24 throw std::runtime_error(format(
"{}: {}", msg, filename));
28 bool open(std::string_view filename) {
29 if (db_)
return false;
30 return sqlite3_open(filename.data(), &db_) == SQLITE_OK;
33 bool is_open()
const {
return db_ !=
nullptr; }
42 int execute(std::string_view sql) {
return sqlite3_exec(db_, sql.data(),
nullptr,
nullptr,
nullptr); }
45 std::vector<std::vector<std::string>>
query(std::string_view sql)
const {
46 std::vector<std::vector<std::string>> result;
47 int ret = sqlite3_exec(
49 [](
void *data,
int num,
char **fields,
char **names) {
50 auto *result = (std::vector<std::vector<std::string>> *)data;
51 if (result->empty()) {
52 std::vector<std::string> name;
53 for (int i = 0; i < num; i++) {
54 if (names[i] != nullptr) {
55 name.emplace_back(names[i]);
57 name.emplace_back(
"");
60 result->emplace_back(name);
62 std::vector<std::string> field;
63 for (
int i = 0; i < num; i++) {
64 if (fields[i] !=
nullptr) {
65 field.emplace_back(fields[i]);
67 field.emplace_back(
"");
70 result->emplace_back(field);
75 if (ret != SQLITE_OK) {
76 std::cerr << sqlite3_errmsg(db_) << std::endl;
81 sqlite3 *
db()
const {
return db_; }
84 sqlite3 *db_{
nullptr};
90 int ret = sqlite3_prepare_v2(db.
db(), sql, -1, &st,
nullptr);
91 if (ret != SQLITE_OK) {
92 throw std::runtime_error(sqlite3_errmsg(db.
db()));
103 int reset() {
return sqlite3_reset(st); }
104 int step() {
return sqlite3_step(st); }
105 int column_int(
int index) {
return sqlite3_column_int(st, index); }
106 double column_double(
int index) {
return sqlite3_column_double(st, index); }
107 std::string
column_text(
int index) {
return (
char *)sqlite3_column_text(st, index); }
110 sqlite3_stmt *st{
nullptr};
prepared_statement(sqlite &db, const char *sql)
Definition: sqlite.h:89
int step()
Definition: sqlite.h:104
~prepared_statement()
Definition: sqlite.h:96
std::string column_text(int index)
Definition: sqlite.h:107
double column_double(int index)
Definition: sqlite.h:106
int column_int(int index)
Definition: sqlite.h:105
int reset()
Definition: sqlite.h:103
std::vector< std::vector< std::string > > query(std::string_view sql) const
Definition: sqlite.h:45
sqlite3 * db() const
Definition: sqlite.h:81
sqlite()
Definition: sqlite.h:18
bool open(std::string_view filename)
Definition: sqlite.h:28
int execute(std::string_view sql)
Definition: sqlite.h:42
bool is_open() const
Definition: sqlite.h:33
sqlite(std::string_view filename)
Definition: sqlite.h:20
~sqlite()
Definition: sqlite.h:35
Definition: algorithm.h:10