From 4c171a5c99dcfb2548bc7a59b34a995e0bc07323 Mon Sep 17 00:00:00 2001 From: marcelb Date: Sun, 21 May 2023 09:12:35 +0200 Subject: [PATCH] Tested --- .vscode/settings.json | 6 +++ example/example copy.db | Bin 0 -> 20480 bytes example/example.db | Bin 0 -> 24576 bytes lib/sql3.hpp | 44 ++++++++++++++++ src/sql3.cpp | 113 ++++++++++++++++++++++++++++++++++++++++ test/compile.sh | 1 + test/test.cpp | 19 +++++++ test/test.o | Bin 0 -> 100840 bytes 8 files changed, 183 insertions(+) create mode 100644 .vscode/settings.json create mode 100644 example/example copy.db create mode 100644 example/example.db create mode 100644 lib/sql3.hpp create mode 100644 src/sql3.cpp create mode 100644 test/compile.sh create mode 100644 test/test.cpp create mode 100755 test/test.o diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..859361c --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,6 @@ +{ + "files.associations": { + "string": "cpp", + "vector": "cpp" + } +} \ No newline at end of file diff --git a/example/example copy.db b/example/example copy.db new file mode 100644 index 0000000000000000000000000000000000000000..15a87b05ad58b0fb42439ca39994b780a656c7d7 GIT binary patch literal 20480 zcmeI)Pixa)9KiACNz&OAW&{aE@bDOrwR8-sM=y&SBreUinxZ|GbVeAa9osV4RbPx} z--ah|djTGO0ph`f&l5MC71>qR?*qT5&!0RYzYo1UeL`RCCi_*P-W(jw@=84vw}g~p zQz;=tQ%6I`MX`0mx#;Lmd8z%cW>ajue7@>^7tYO(!n3^3-Ur>FAbdouqxHvp1=6j3X#*<+bW|7Lm$4R6XuIEP56VRl1$2bd)4&l*YTGXkAaI z;UEg!EPAD9&S%Z=AdHiR;opmPhVdXAj@4E)?wI?laFlJwseXb%lxE#lcgeG0!%6U}|U0y7Iz0JF}NJ`+Kpf!}2}}?~AS|2q1s}0tg_000Iag zfB*srAn<<+v@J*Yy{)_|-s;$#>K{hR;&fwH-j$BH(;wtVdqp{`>*=N0md?uZz6tM# zt|$l~fB*srAb&r009ILKmY** z5I_I{1Q1vPf!lUZF1!X{`F7v^`~2U$|1Zt?Kd1jo@Vy{K1Q0*~0R#|0009ILKmdW| N5@<@>m-W9K`~(S!l^Xy6 literal 0 HcmV?d00001 diff --git a/example/example.db b/example/example.db new file mode 100644 index 0000000000000000000000000000000000000000..bf694481d037f6defd6bf5d48daa2c83bf77a06f GIT binary patch literal 24576 zcmeI)O-lkn9LMq5hYST>FH%C#vL{0cB)YfN5|&EY(!(i6*`Qh#H-m1`o2ibzj9y1C zqH{AzU>>BKA>Wa|GqdBc`}^DmWKU1(H^a!i?k8P2bhkua7>3w!T_Hq9RZ5ku%9=5`n&bOo%(I5C%aKa?c7jdUgj9+ zkGDQsT3#s>jA!RNcqrRdU8!FYJ$=b@OPRD++xOD7W*8g +#include +#include + +#include +#include +#include +// #include +#include + +using namespace std; + +static string responseDatabase; +static int callback(void* data, int argc, char** argv, char** azColName); + +class sql3 { + public: + + sqlite3* db; + string path; + bool keepOpen; + // map> model; + string Answer; + map> parsed; + + sql3(const string path, bool _keepOpen = false); + bool open(); + bool close(); + bool run(const string sql_command); + string answer(); + void mapit(); + + string ask(const string sql_command); + map> query(const string sql_command); + + ~sql3(); + +}; + + +#endif \ No newline at end of file diff --git a/src/sql3.cpp b/src/sql3.cpp new file mode 100644 index 0000000..3724657 --- /dev/null +++ b/src/sql3.cpp @@ -0,0 +1,113 @@ +#include "../lib/sql3.hpp" + +sql3::sql3(const string _path, bool _keepOpen) { + path = _path; + keepOpen = _keepOpen; + + if (keepOpen) { + if (open()) { + printf("[ERROR] Ne mogu otvoriti bazu podataka!"); + } + } + +} + +bool sql3::open() { + uint operationStatus = sqlite3_open(path.c_str(), &db); + return operationStatus != SQLITE_OK; +} + +bool sql3::close() { + uint operationStatus = sqlite3_close(db); + db = NULL; + return operationStatus != SQLITE_OK; +} + +bool sql3::run(const string sql_command) { + bool r = true; + char *messaggeError; + uint exec_stuts; + exec_stuts = sqlite3_exec(db, sql_command.c_str(), callback, NULL, &messaggeError); + + if (exec_stuts != SQLITE_OK) { + // printf("[ERROR] Ne mogu čitati bazu podataka!"); + sqlite3_free(messaggeError); + r = false; + } + else { + Answer = responseDatabase; + } + + return r; +} + +string sql3::answer() { + string _Answer = Answer; + Answer.clear(); + return _Answer; +} + +string sql3::ask(const string sql_command) { + if (!run(sql_command)) { + printf("[ERROR] Ne mogu čitati bazu podataka!"); + return {}; + } + else { + return answer(); + } +} + +map> sql3::query(const string sql_command) { + if (!run(sql_command)) { + printf("[ERROR] Ne mogu čitati bazu podataka!"); + return {}; + } + else { + mapit(); + map> _parsed = parsed; + parsed.clear(); + return _parsed; + } +} + +void sql3::mapit() { + string a = Answer; + + while (a.find("\n") < a.length()) { + uint lineend = a.find("\n"); + string oneline = a.substr(0, lineend); + a.erase(0, lineend+1); + + size_t sep = oneline.find(" = "); + string key = oneline.substr(0, sep); + string value = oneline.substr(sep + 3, oneline.length()); + value = value.substr(0, value.length()); + + parsed[key].push_back(value); + } + + +} + +sql3::~sql3() { + if(close()) { + printf ("ERROR Zatvaranja baze podataka!"); + } +} + + +/** + * Callback funkcija za sqlite3 +*/ + +static int callback(void* data, int argc, char** argv, char** azColName) { + int i; + fprintf(stderr, "%s: ", (const char*)data); + char res[1000]; + for (i = 0; i < argc; i++) { + sprintf(res, "%s = %s", azColName[i], argv[i] ? argv[i] : "NULL"); + responseDatabase += res; + responseDatabase += '\n'; + } + return 0; +} diff --git a/test/compile.sh b/test/compile.sh new file mode 100644 index 0000000..d78b604 --- /dev/null +++ b/test/compile.sh @@ -0,0 +1 @@ +g++ test.cpp ../src/* -o test.o -l sqlite3 \ No newline at end of file diff --git a/test/test.cpp b/test/test.cpp new file mode 100644 index 0000000..9b8cf32 --- /dev/null +++ b/test/test.cpp @@ -0,0 +1,19 @@ +#include + +#include "../lib/sql3.hpp" + +using namespace std; + +int main() { + + sql3 mydb("../example/example.db", true); + + //cout << mydb.ask("Select * from Tab1"); + // cout << mydb.ask("INSERT INTO Tab1 VALUES(3,'Pakora', 'marijanab@bitelex.ml');"); + + auto res = mydb.query("Select * from Tab1"); + + cout << endl << res["NAME"][0]; + + return 0; +} \ No newline at end of file diff --git a/test/test.o b/test/test.o new file mode 100755 index 0000000000000000000000000000000000000000..a601bab76628b43c6ab845b0f2010b917c15412b GIT binary patch literal 100840 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