· 5 years ago · Aug 20, 2020, 11:36 AM
1 MessageStorage_v2::MessageStorage_v2(const std::string& dbname)
2 {
3 const std::string sql = "CREATE table IF NOT EXISTS MESSAGES ("
4 "ID INTEGER PRIMARY KEY,"
5 "Timestamp INTEGER NOT NULL,"
6 "Author TEXT NOT NULL,"
7 "Message TEXT NOT NULL,"
8 "Signature TEXT NOT NULL ,UNIQUE(Timestamp,Message));";
9
10 sqlite3_open_v2(dbname.data(), &db_, SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE, nullptr);
11 ExecuteQuery(sql.data(),nullptr);
12 }
13
14 MessageStorage_v2::~MessageStorage_v2()
15 {
16 sqlite3_close_v2(db_);
17 }
18 bool MessageStorage_v2::AddMessage(const andeme::schema::Message& msg)
19 {
20 sqlite3_stmt *stmt;
21
22 std::string Author = "Author";
23 std::string sign = "sign";
24 std::string sql = "INSERT INTO MESSAGES ('Timestamp','Author', 'Message','Signature')"
25 "VALUES (datetime('now','localtime'),?3,?4,?5);";
26
27 if (sqlite3_prepare_v2(db_, sql.data(), -1, &stmt, nullptr) != SQLITE_OK) {
28 return false;
29 }
30
31 if (sqlite3_bind_text(stmt, 3, Author.data(), Author.size(), nullptr) != SQLITE_OK) {
32 sqlite3_finalize(stmt);
33 return false;
34 }
35
36 if (sqlite3_bind_text(stmt, 4, msg.text().data(), msg.text().size(), nullptr) != SQLITE_OK) {
37 sqlite3_finalize(stmt);
38 return false;
39 }
40
41 if (sqlite3_bind_text(stmt, 5, sign.data(), sign.size(), nullptr) != SQLITE_OK) {
42 sqlite3_finalize(stmt);
43 return false;
44 }
45
46 if (sqlite3_step(stmt) != SQLITE_DONE) {
47 sqlite3_reset(stmt);
48 sqlite3_finalize(stmt);
49 return false;
50 }
51 sqlite3_reset(stmt);
52 sqlite3_finalize(stmt);
53 return true;
54 }
55 std::vector<andeme::schema::Message> MessageStorage_v2::getAllMessages()
56 {
57 std::vector<andeme::schema::Message> messages;
58
59 sqlite3_stmt *stmt;
60 std::string sql = "SELECT * FROM 'MESSAGES' ORDER BY ID ASC;";
61 sqlite3_prepare_v2(db_, sql.data(), -1, &stmt, 0);
62
63 while (sqlite3_step(stmt) == SQLITE_ROW) {
64
65 andeme::schema::Message msg;
66 msg.set_text((char*)sqlite3_column_text(stmt, 3));
67 messages.push_back(std::move(msg));
68 }
69 sqlite3_reset(stmt);
70 sqlite3_finalize(stmt);
71 return messages;
72 }