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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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