Horizon
Loading...
Searching...
No Matches
sqlite.hpp
1#pragma once
2#include <sqlite3.h>
3#include <string>
4#include <tuple>
5#include <stdexcept>
6
7namespace horizon {
8enum class ObjectType;
9class UUID;
10} // namespace horizon
11
12namespace horizon::SQLite {
14protected:
15 noncopyable() = default;
16 ~noncopyable() = default;
17
18 noncopyable(noncopyable &&) = default;
19 noncopyable &operator=(noncopyable &&) = default;
20
21 noncopyable(noncopyable const &) = delete;
22 noncopyable &operator=(noncopyable const &) = delete;
23};
24
26public:
27 Query(class Database &d, const std::string &sql);
28 Query(class Database &d, const char *sql, int size = -1);
29 ~Query();
30 bool step();
31 template <class T> T get(int idx) const
32 {
33 T r;
34 get(idx, r);
35 return r;
36 }
37
38 void bind(int idx, const std::string &v, bool copy = true);
39 void bind(const char *name, const std::string &v, bool copy = true);
40 void bind(int idx, int v);
41 void bind(const char *name, int v);
42 void bind_int64(int idx, sqlite3_int64 v);
43 void bind_int64(const char *name, sqlite3_int64 v);
44 void bind(int idx, const horizon::UUID &v);
45 void bind(const char *name, const horizon::UUID &v);
46 void bind(int idx, ObjectType type);
47 void bind(const char *name, ObjectType type);
48 void reset();
49
50 int get_column_count();
51 std::string get_column_name(int col);
52
53private:
54 class Database &db;
55 sqlite3_stmt *stmt;
56
57 void get(int idx, std::string &r) const;
58 void get(int idx, UUID &r) const;
59 void get(int idx, int &r) const;
60 void get(int idx, sqlite3_int64 &r) const;
61 void get(int idx, ObjectType &r) const;
62};
63
64class Error : public std::runtime_error {
65public:
66 Error(int a_rc, const char *what) : std::runtime_error(what), rc(a_rc)
67 {
68 }
69 const int rc;
70};
71
72class Database {
73 friend Query;
74
75public:
76 Database(const std::string &filename, int flags = SQLITE_OPEN_READONLY, int timeout_ms = 0);
77 ~Database();
78 void execute(const std::string &query);
79 void execute(const char *query);
80 int get_user_version();
81
82private:
83 sqlite3 *db = nullptr;
84};
85} // namespace horizon::SQLite
Definition sqlite.hpp:72
Definition sqlite.hpp:64
Definition sqlite.hpp:25
Definition sqlite.hpp:13
This class encapsulates a UUID and allows it to be uses as a value type.
Definition uuid.hpp:16