Merge with thread

fix-callback^2
marcelb 1 year ago
parent 11348539d3
commit 8e9abb6e56
  1. BIN
      example/example copy.db
  2. BIN
      example/example.db
  3. 5
      lib/sql3.hpp
  4. 35
      src/sql3.cpp
  5. 22
      test/test.cpp

Binary file not shown.

Binary file not shown.

@ -10,6 +10,7 @@
#include <map> #include <map>
// #include <algorithm> // #include <algorithm>
#include <iostream> #include <iostream>
#include <mutex>
using namespace std; using namespace std;
@ -24,15 +25,13 @@ class sql3 {
bool keepOpen; bool keepOpen;
string Answer; string Answer;
map<string, vector<string>> parsed; map<string, vector<string>> parsed;
mutex io;
sql3(const string path, bool _keepOpen = false); sql3(const string path, bool _keepOpen = false);
bool open(); bool open();
bool close(); bool close();
bool run(const string sql_command);
string answer();
void mapit(); void mapit();
string ask(const string sql_command);
map<string, vector<string>> query(const string sql_command); map<string, vector<string>> query(const string sql_command);
~sql3(); ~sql3();

@ -23,10 +23,11 @@ bool sql3::close() {
return operationStatus != SQLITE_OK; return operationStatus != SQLITE_OK;
} }
bool sql3::run(const string sql_command) { map<string, vector<string>> sql3::query(const string sql_command) {
io.lock();
if (!keepOpen) { if (!keepOpen) {
if (open()) { if (open()) {
io.unlock();
throw string("[ERROR] Unable to open database "); throw string("[ERROR] Unable to open database ");
} }
} }
@ -37,7 +38,6 @@ bool sql3::run(const string sql_command) {
exec_stuts = sqlite3_exec(db, sql_command.c_str(), callback, NULL, &messaggeError); exec_stuts = sqlite3_exec(db, sql_command.c_str(), callback, NULL, &messaggeError);
if (exec_stuts != SQLITE_OK) { if (exec_stuts != SQLITE_OK) {
// printf("[ERROR] Ne mogu čitati bazu podataka!");
sqlite3_free(messaggeError); sqlite3_free(messaggeError);
r = false; r = false;
} }
@ -47,40 +47,27 @@ bool sql3::run(const string sql_command) {
if (!keepOpen) { if (!keepOpen) {
if(close()) { if(close()) {
io.unlock();
throw string("[ERROR] Unable to close database "); throw string("[ERROR] Unable to close database ");
} }
} }
return r; map<string, vector<string>> _parsed;
}
string sql3::answer() { cout << Answer << endl;
string _Answer = Answer;
Answer.clear();
return _Answer;
}
string sql3::ask(const string sql_command) { if (!r) {
if (!run(sql_command)) { io.unlock();
throw string("[ERROR] Unable to read database "); throw string("[ERROR] Unable to read database ");
//return {};
}
else {
return answer();
} }
}
map<string, vector<string>> sql3::query(const string sql_command) {
if (!run(sql_command)) {
throw string("[ERROR] Unable to read database ");
//return {};
}
else { else {
mapit(); mapit();
map<string, vector<string>> _parsed = parsed; _parsed = parsed;
parsed.clear(); parsed.clear();
return _parsed;
} }
io.unlock();
return _parsed;
} }
void sql3::mapit() { void sql3::mapit() {

@ -5,21 +5,27 @@
using namespace std; using namespace std;
int main() { int main() {
try {
sql3 mydb("../example/example.db", false); sql3 mydb("../example/example_copy.db", false);
// cout << mydb.ask("Select * from Tab1"); // cout << mydb.ask("Select * from Tab1");
// cout << mydb.ask("INSERT INTO Tab1 VALUES(3,'Pakora', 'marijanab@bitelex.ml');"); // cout << mydb.ask("INSERT INTO Tab1 VALUES(3,'Pakora', 'marijanab@bitelex.ml');");
// auto res = mydb.query("Select * from Tab1"); auto res = mydb.query("Select * from Tab1");
auto res = mydb.query("INSERT INTO Tab1 VALUES(4,'Mare', 'marijanab@bitelex.co');"); // cout << endl << res["NAME"][1];
// for (auto i : res) // cout << endl << res["MAIL"][1];
// for (auto j: i.second)
// cout << i.first << " : " << j << endl;
// cout << endl << res["NAME"][1]; for (auto i : res) {
for (auto j: i.second) {
cout << i.first << " : " << j << endl;
}
}
} catch (const string err) {
cout << err << endl;
}
return 0; return 0;
} }
Loading…
Cancel
Save