Mercurial > malikania
annotate database/sqlite/src/account.cpp @ 39:56ab2f0c90dc
Server: add sqlite basic backend, closes #558
author | David Demelier <markand@malikania.fr> |
---|---|
date | Sun, 27 Nov 2016 18:00:49 +0100 |
parents | |
children | 1e206fdc7021 |
rev | line source |
---|---|
39
56ab2f0c90dc
Server: add sqlite basic backend, closes #558
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
1 /* |
56ab2f0c90dc
Server: add sqlite basic backend, closes #558
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
2 * account.cpp -- account management |
56ab2f0c90dc
Server: add sqlite basic backend, closes #558
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
3 * |
56ab2f0c90dc
Server: add sqlite basic backend, closes #558
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
4 * Copyright (c) 2013-2016 David Demelier <markand@malikania.fr> |
56ab2f0c90dc
Server: add sqlite basic backend, closes #558
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
5 * |
56ab2f0c90dc
Server: add sqlite basic backend, closes #558
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
6 * Permission to use, copy, modify, and/or distribute this software for any |
56ab2f0c90dc
Server: add sqlite basic backend, closes #558
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
7 * purpose with or without fee is hereby granted, provided that the above |
56ab2f0c90dc
Server: add sqlite basic backend, closes #558
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
8 * copyright notice and this permission notice appear in all copies. |
56ab2f0c90dc
Server: add sqlite basic backend, closes #558
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
9 * |
56ab2f0c90dc
Server: add sqlite basic backend, closes #558
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
10 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES |
56ab2f0c90dc
Server: add sqlite basic backend, closes #558
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
11 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF |
56ab2f0c90dc
Server: add sqlite basic backend, closes #558
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
12 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR |
56ab2f0c90dc
Server: add sqlite basic backend, closes #558
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
13 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES |
56ab2f0c90dc
Server: add sqlite basic backend, closes #558
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
14 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN |
56ab2f0c90dc
Server: add sqlite basic backend, closes #558
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
15 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF |
56ab2f0c90dc
Server: add sqlite basic backend, closes #558
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
16 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. |
56ab2f0c90dc
Server: add sqlite basic backend, closes #558
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
17 */ |
56ab2f0c90dc
Server: add sqlite basic backend, closes #558
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
18 |
56ab2f0c90dc
Server: add sqlite basic backend, closes #558
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
19 #include <vector> |
56ab2f0c90dc
Server: add sqlite basic backend, closes #558
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
20 |
56ab2f0c90dc
Server: add sqlite basic backend, closes #558
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
21 #include <malikania/account.hpp> |
56ab2f0c90dc
Server: add sqlite basic backend, closes #558
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
22 #include <malikania/dynlib.hpp> |
56ab2f0c90dc
Server: add sqlite basic backend, closes #558
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
23 |
56ab2f0c90dc
Server: add sqlite basic backend, closes #558
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
24 #include "driver.hpp" |
56ab2f0c90dc
Server: add sqlite basic backend, closes #558
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
25 |
56ab2f0c90dc
Server: add sqlite basic backend, closes #558
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
26 using namespace malikania; |
56ab2f0c90dc
Server: add sqlite basic backend, closes #558
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
27 |
56ab2f0c90dc
Server: add sqlite basic backend, closes #558
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
28 namespace { |
56ab2f0c90dc
Server: add sqlite basic backend, closes #558
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
29 |
56ab2f0c90dc
Server: add sqlite basic backend, closes #558
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
30 const std::string create_query( |
56ab2f0c90dc
Server: add sqlite basic backend, closes #558
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
31 "insert into mk_account(" |
56ab2f0c90dc
Server: add sqlite basic backend, closes #558
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
32 " ac_name, ac_email, ac_firstname, ac_lastname, ac_password" |
56ab2f0c90dc
Server: add sqlite basic backend, closes #558
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
33 ") values (?, ?, ?, ?, ?)" |
56ab2f0c90dc
Server: add sqlite basic backend, closes #558
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
34 ); |
56ab2f0c90dc
Server: add sqlite basic backend, closes #558
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
35 |
56ab2f0c90dc
Server: add sqlite basic backend, closes #558
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
36 const std::string update_query( |
56ab2f0c90dc
Server: add sqlite basic backend, closes #558
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
37 "update mk_account set" |
56ab2f0c90dc
Server: add sqlite basic backend, closes #558
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
38 " ac_name = ?, " // 0 |
56ab2f0c90dc
Server: add sqlite basic backend, closes #558
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
39 " ac_email = ?, " // 1 |
56ab2f0c90dc
Server: add sqlite basic backend, closes #558
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
40 " ac_firstname = ?, " // 2 |
56ab2f0c90dc
Server: add sqlite basic backend, closes #558
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
41 " ac_lastname = ?, " // 3 |
56ab2f0c90dc
Server: add sqlite basic backend, closes #558
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
42 " ac_password = ? " // 4 |
56ab2f0c90dc
Server: add sqlite basic backend, closes #558
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
43 "where ac_id = ?" // 5 |
56ab2f0c90dc
Server: add sqlite basic backend, closes #558
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
44 ); |
56ab2f0c90dc
Server: add sqlite basic backend, closes #558
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
45 |
56ab2f0c90dc
Server: add sqlite basic backend, closes #558
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
46 const std::string delete_query( |
56ab2f0c90dc
Server: add sqlite basic backend, closes #558
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
47 "delete from mk_account where ac_id = ?" |
56ab2f0c90dc
Server: add sqlite basic backend, closes #558
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
48 ); |
56ab2f0c90dc
Server: add sqlite basic backend, closes #558
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
49 |
56ab2f0c90dc
Server: add sqlite basic backend, closes #558
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
50 const std::string get_query( |
56ab2f0c90dc
Server: add sqlite basic backend, closes #558
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
51 "select ac_id, ac_name, ac_email, ac_firstname, ac_lastname, ac_password " |
56ab2f0c90dc
Server: add sqlite basic backend, closes #558
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
52 "from mk_account " |
56ab2f0c90dc
Server: add sqlite basic backend, closes #558
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
53 "where ac_id = ?" |
56ab2f0c90dc
Server: add sqlite basic backend, closes #558
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
54 ); |
56ab2f0c90dc
Server: add sqlite basic backend, closes #558
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
55 |
56ab2f0c90dc
Server: add sqlite basic backend, closes #558
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
56 const std::string list_query( |
56ab2f0c90dc
Server: add sqlite basic backend, closes #558
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
57 "select ac_id, ac_name, ac_email, ac_firstname, ac_lastname, ac_password " |
56ab2f0c90dc
Server: add sqlite basic backend, closes #558
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
58 "from mk_account" |
56ab2f0c90dc
Server: add sqlite basic backend, closes #558
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
59 ); |
56ab2f0c90dc
Server: add sqlite basic backend, closes #558
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
60 |
56ab2f0c90dc
Server: add sqlite basic backend, closes #558
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
61 const std::string clear_query( |
56ab2f0c90dc
Server: add sqlite basic backend, closes #558
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
62 "delete from mk_account" |
56ab2f0c90dc
Server: add sqlite basic backend, closes #558
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
63 ); |
56ab2f0c90dc
Server: add sqlite basic backend, closes #558
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
64 |
56ab2f0c90dc
Server: add sqlite basic backend, closes #558
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
65 const std::string count_query( |
56ab2f0c90dc
Server: add sqlite basic backend, closes #558
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
66 "select count(*) from mk_account" |
56ab2f0c90dc
Server: add sqlite basic backend, closes #558
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
67 ); |
56ab2f0c90dc
Server: add sqlite basic backend, closes #558
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
68 |
56ab2f0c90dc
Server: add sqlite basic backend, closes #558
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
69 Account to_account(sqlite::statement& stmt) |
56ab2f0c90dc
Server: add sqlite basic backend, closes #558
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
70 { |
56ab2f0c90dc
Server: add sqlite basic backend, closes #558
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
71 Account ac; |
56ab2f0c90dc
Server: add sqlite basic backend, closes #558
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
72 |
56ab2f0c90dc
Server: add sqlite basic backend, closes #558
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
73 ac.setId(sqlite3_column_int64(stmt.get(), 0)); |
56ab2f0c90dc
Server: add sqlite basic backend, closes #558
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
74 ac.setName(reinterpret_cast<const char *>(sqlite3_column_text(stmt.get(), 1))); |
56ab2f0c90dc
Server: add sqlite basic backend, closes #558
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
75 ac.setEmail(reinterpret_cast<const char *>(sqlite3_column_text(stmt.get(), 2))); |
56ab2f0c90dc
Server: add sqlite basic backend, closes #558
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
76 ac.setFirstName(reinterpret_cast<const char *>(sqlite3_column_text(stmt.get(), 3))); |
56ab2f0c90dc
Server: add sqlite basic backend, closes #558
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
77 ac.setLastName(reinterpret_cast<const char *>(sqlite3_column_text(stmt.get(), 4))); |
56ab2f0c90dc
Server: add sqlite basic backend, closes #558
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
78 ac.setPassword(reinterpret_cast<const char *>(sqlite3_column_text(stmt.get(), 5))); |
56ab2f0c90dc
Server: add sqlite basic backend, closes #558
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
79 |
56ab2f0c90dc
Server: add sqlite basic backend, closes #558
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
80 return ac; |
56ab2f0c90dc
Server: add sqlite basic backend, closes #558
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
81 } |
56ab2f0c90dc
Server: add sqlite basic backend, closes #558
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
82 |
56ab2f0c90dc
Server: add sqlite basic backend, closes #558
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
83 } // !namespace |
56ab2f0c90dc
Server: add sqlite basic backend, closes #558
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
84 |
56ab2f0c90dc
Server: add sqlite basic backend, closes #558
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
85 #include <iostream> |
56ab2f0c90dc
Server: add sqlite basic backend, closes #558
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
86 |
56ab2f0c90dc
Server: add sqlite basic backend, closes #558
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
87 extern "C" { |
56ab2f0c90dc
Server: add sqlite basic backend, closes #558
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
88 |
56ab2f0c90dc
Server: add sqlite basic backend, closes #558
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
89 DYNLIB_EXPORT void malikania_account_create(Account& account) |
56ab2f0c90dc
Server: add sqlite basic backend, closes #558
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
90 { |
56ab2f0c90dc
Server: add sqlite basic backend, closes #558
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
91 auto stmt = sqlite::prepare(create_query); |
56ab2f0c90dc
Server: add sqlite basic backend, closes #558
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
92 |
56ab2f0c90dc
Server: add sqlite basic backend, closes #558
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
93 sqlite3_bind_text(stmt.get(), 1, account.name().c_str(), -1, nullptr); |
56ab2f0c90dc
Server: add sqlite basic backend, closes #558
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
94 sqlite3_bind_text(stmt.get(), 2, account.email().c_str(), -1, nullptr); |
56ab2f0c90dc
Server: add sqlite basic backend, closes #558
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
95 sqlite3_bind_text(stmt.get(), 3, account.firstName().c_str(), -1, nullptr); |
56ab2f0c90dc
Server: add sqlite basic backend, closes #558
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
96 sqlite3_bind_text(stmt.get(), 4, account.lastName().c_str(), -1, nullptr); |
56ab2f0c90dc
Server: add sqlite basic backend, closes #558
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
97 sqlite3_bind_text(stmt.get(), 5, account.password().c_str(), -1, nullptr); |
56ab2f0c90dc
Server: add sqlite basic backend, closes #558
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
98 |
56ab2f0c90dc
Server: add sqlite basic backend, closes #558
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
99 if (sqlite3_step(stmt.get()) != SQLITE_DONE) { |
56ab2f0c90dc
Server: add sqlite basic backend, closes #558
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
100 throw std::runtime_error(sqlite3_errmsg(sqlite::database.get())); |
56ab2f0c90dc
Server: add sqlite basic backend, closes #558
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
101 } |
56ab2f0c90dc
Server: add sqlite basic backend, closes #558
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
102 |
56ab2f0c90dc
Server: add sqlite basic backend, closes #558
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
103 account.setId(sqlite3_last_insert_rowid(sqlite::database.get())); |
56ab2f0c90dc
Server: add sqlite basic backend, closes #558
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
104 } |
56ab2f0c90dc
Server: add sqlite basic backend, closes #558
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
105 |
56ab2f0c90dc
Server: add sqlite basic backend, closes #558
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
106 DYNLIB_EXPORT void malikania_account_update(Account& account) |
56ab2f0c90dc
Server: add sqlite basic backend, closes #558
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
107 { |
56ab2f0c90dc
Server: add sqlite basic backend, closes #558
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
108 auto stmt = sqlite::prepare(update_query); |
56ab2f0c90dc
Server: add sqlite basic backend, closes #558
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
109 |
56ab2f0c90dc
Server: add sqlite basic backend, closes #558
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
110 sqlite3_bind_text(stmt.get(), 1, account.name().c_str(), -1, nullptr); |
56ab2f0c90dc
Server: add sqlite basic backend, closes #558
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
111 sqlite3_bind_text(stmt.get(), 2, account.email().c_str(), -1, nullptr); |
56ab2f0c90dc
Server: add sqlite basic backend, closes #558
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
112 sqlite3_bind_text(stmt.get(), 3, account.firstName().c_str(), -1, nullptr); |
56ab2f0c90dc
Server: add sqlite basic backend, closes #558
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
113 sqlite3_bind_text(stmt.get(), 4, account.lastName().c_str(), -1, nullptr); |
56ab2f0c90dc
Server: add sqlite basic backend, closes #558
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
114 sqlite3_bind_text(stmt.get(), 5, account.password().c_str(), -1, nullptr); |
56ab2f0c90dc
Server: add sqlite basic backend, closes #558
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
115 sqlite3_bind_int64(stmt.get(), 6, account.id()); |
56ab2f0c90dc
Server: add sqlite basic backend, closes #558
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
116 |
56ab2f0c90dc
Server: add sqlite basic backend, closes #558
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
117 if (sqlite3_step(stmt.get()) != SQLITE_DONE) { |
56ab2f0c90dc
Server: add sqlite basic backend, closes #558
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
118 throw std::runtime_error(sqlite3_errmsg(sqlite::database.get())); |
56ab2f0c90dc
Server: add sqlite basic backend, closes #558
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
119 } |
56ab2f0c90dc
Server: add sqlite basic backend, closes #558
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
120 } |
56ab2f0c90dc
Server: add sqlite basic backend, closes #558
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
121 |
56ab2f0c90dc
Server: add sqlite basic backend, closes #558
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
122 DYNLIB_EXPORT void malikania_account_remove(const Account& account) |
56ab2f0c90dc
Server: add sqlite basic backend, closes #558
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
123 { |
56ab2f0c90dc
Server: add sqlite basic backend, closes #558
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
124 auto stmt = sqlite::prepare(delete_query); |
56ab2f0c90dc
Server: add sqlite basic backend, closes #558
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
125 |
56ab2f0c90dc
Server: add sqlite basic backend, closes #558
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
126 sqlite3_bind_int64(stmt.get(), 1, account.id()); |
56ab2f0c90dc
Server: add sqlite basic backend, closes #558
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
127 |
56ab2f0c90dc
Server: add sqlite basic backend, closes #558
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
128 if (sqlite3_step(stmt.get()) != SQLITE_OK) { |
56ab2f0c90dc
Server: add sqlite basic backend, closes #558
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
129 throw std::runtime_error(sqlite3_errmsg(sqlite::database.get())); |
56ab2f0c90dc
Server: add sqlite basic backend, closes #558
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
130 } |
56ab2f0c90dc
Server: add sqlite basic backend, closes #558
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
131 } |
56ab2f0c90dc
Server: add sqlite basic backend, closes #558
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
132 |
56ab2f0c90dc
Server: add sqlite basic backend, closes #558
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
133 DYNLIB_EXPORT Account malikania_account_get(std::uint64_t id) |
56ab2f0c90dc
Server: add sqlite basic backend, closes #558
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
134 { |
56ab2f0c90dc
Server: add sqlite basic backend, closes #558
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
135 auto stmt = sqlite::prepare(get_query); |
56ab2f0c90dc
Server: add sqlite basic backend, closes #558
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
136 |
56ab2f0c90dc
Server: add sqlite basic backend, closes #558
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
137 sqlite3_bind_int64(stmt.get(), 1, id); |
56ab2f0c90dc
Server: add sqlite basic backend, closes #558
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
138 |
56ab2f0c90dc
Server: add sqlite basic backend, closes #558
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
139 if (sqlite3_step(stmt.get()) != SQLITE_ROW) { |
56ab2f0c90dc
Server: add sqlite basic backend, closes #558
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
140 throw std::runtime_error(sqlite3_errmsg(sqlite::database.get())); |
56ab2f0c90dc
Server: add sqlite basic backend, closes #558
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
141 } |
56ab2f0c90dc
Server: add sqlite basic backend, closes #558
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
142 |
56ab2f0c90dc
Server: add sqlite basic backend, closes #558
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
143 return to_account(stmt); |
56ab2f0c90dc
Server: add sqlite basic backend, closes #558
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
144 } |
56ab2f0c90dc
Server: add sqlite basic backend, closes #558
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
145 |
56ab2f0c90dc
Server: add sqlite basic backend, closes #558
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
146 DYNLIB_EXPORT std::vector<Account> malikania_account_list() |
56ab2f0c90dc
Server: add sqlite basic backend, closes #558
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
147 { |
56ab2f0c90dc
Server: add sqlite basic backend, closes #558
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
148 auto stmt = sqlite::prepare(list_query); |
56ab2f0c90dc
Server: add sqlite basic backend, closes #558
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
149 |
56ab2f0c90dc
Server: add sqlite basic backend, closes #558
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
150 std::vector<Account> list; |
56ab2f0c90dc
Server: add sqlite basic backend, closes #558
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
151 |
56ab2f0c90dc
Server: add sqlite basic backend, closes #558
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
152 while (sqlite3_step(stmt.get()) == SQLITE_ROW) { |
56ab2f0c90dc
Server: add sqlite basic backend, closes #558
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
153 list.push_back(to_account(stmt)); |
56ab2f0c90dc
Server: add sqlite basic backend, closes #558
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
154 } |
56ab2f0c90dc
Server: add sqlite basic backend, closes #558
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
155 |
56ab2f0c90dc
Server: add sqlite basic backend, closes #558
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
156 return list; |
56ab2f0c90dc
Server: add sqlite basic backend, closes #558
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
157 } |
56ab2f0c90dc
Server: add sqlite basic backend, closes #558
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
158 |
56ab2f0c90dc
Server: add sqlite basic backend, closes #558
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
159 DYNLIB_EXPORT void malikania_account_clear() |
56ab2f0c90dc
Server: add sqlite basic backend, closes #558
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
160 { |
56ab2f0c90dc
Server: add sqlite basic backend, closes #558
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
161 if (sqlite3_exec(sqlite::database.get(), clear_query.c_str(), nullptr, nullptr, nullptr) != SQLITE_OK) { |
56ab2f0c90dc
Server: add sqlite basic backend, closes #558
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
162 throw std::runtime_error(sqlite3_errmsg(sqlite::database.get())); |
56ab2f0c90dc
Server: add sqlite basic backend, closes #558
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
163 } |
56ab2f0c90dc
Server: add sqlite basic backend, closes #558
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
164 } |
56ab2f0c90dc
Server: add sqlite basic backend, closes #558
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
165 |
56ab2f0c90dc
Server: add sqlite basic backend, closes #558
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
166 DYNLIB_EXPORT std::uint64_t malikania_account_count() |
56ab2f0c90dc
Server: add sqlite basic backend, closes #558
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
167 { |
56ab2f0c90dc
Server: add sqlite basic backend, closes #558
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
168 auto stmt = sqlite::prepare(count_query); |
56ab2f0c90dc
Server: add sqlite basic backend, closes #558
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
169 |
56ab2f0c90dc
Server: add sqlite basic backend, closes #558
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
170 if (sqlite3_step(stmt.get()) != SQLITE_ROW) { |
56ab2f0c90dc
Server: add sqlite basic backend, closes #558
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
171 throw std::runtime_error(sqlite3_errmsg(sqlite::database.get())); |
56ab2f0c90dc
Server: add sqlite basic backend, closes #558
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
172 } |
56ab2f0c90dc
Server: add sqlite basic backend, closes #558
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
173 |
56ab2f0c90dc
Server: add sqlite basic backend, closes #558
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
174 return sqlite3_column_int64(stmt.get(), 0); |
56ab2f0c90dc
Server: add sqlite basic backend, closes #558
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
175 } |
56ab2f0c90dc
Server: add sqlite basic backend, closes #558
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
176 |
56ab2f0c90dc
Server: add sqlite basic backend, closes #558
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
177 } // !C |