forked from yhirose/cpp-sqlitelib
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathsqlitelib.i
More file actions
64 lines (55 loc) · 1.78 KB
/
sqlitelib.i
File metadata and controls
64 lines (55 loc) · 1.78 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
%module sqlitelib
%{
#include "sqlitelib.h"
#include <sqlite3.h>
using namespace sqlitelib;
template<typename Tag, typename Tag::type M>
struct Rob { friend typename Tag::type get(Tag) { return M; } };
struct SqliteDb { typedef sqlite3* sqlitelib::Sqlite::*type; friend type get(SqliteDb); };
template struct Rob<SqliteDb, &sqlitelib::Sqlite::db_>;
%}
%include <std_string.i>
%include <std_vector.i>
%include <exception.i>
#pragma SWIG nowarn=302,509
%exception {
try { $action }
catch (const std::exception& e) {
luaL_error(L, "%s", e.what()); return SWIG_ERROR;
}
}
%template(VectorString) std::vector<std::string>;
namespace sqlitelib {
class Sqlite {
public:
Sqlite(const char* path);
~Sqlite();
bool is_open() const;
};
}
%extend sqlitelib::Sqlite {
void execute(const char* q) { self->execute(q); }
void execute(const char* q, const std::vector<std::string>& p) {
sqlite3_stmt* s;
sqlite3_prepare_v2(self->*get(SqliteDb()), q, -1, &s, nullptr);
for (int i = 0; i < (int)p.size(); i++)
sqlite3_bind_text(s, i+1, p[i].data(), p[i].size(), SQLITE_TRANSIENT);
sqlite3_step(s);
sqlite3_finalize(s);
}
std::vector<std::string> execute_string(const char* q) {
return self->execute<std::string>(q);
}
std::vector<std::string> execute_string(const char* q, const std::vector<std::string>& p) {
sqlite3_stmt* s;
sqlite3_prepare_v2(self->*get(SqliteDb()), q, -1, &s, nullptr);
for (int i = 0; i < (int)p.size(); i++)
sqlite3_bind_text(s, i+1, p[i].data(), p[i].size(), SQLITE_TRANSIENT);
std::vector<std::string> out;
while (sqlite3_step(s) == SQLITE_ROW)
out.emplace_back(reinterpret_cast<const char*>(sqlite3_column_text(s, 0)),
sqlite3_column_bytes(s, 0));
sqlite3_finalize(s);
return out;
}
}