From 5fde5c52aadb3b5661dc7f7012db1b7a4b8eb8ea Mon Sep 17 00:00:00 2001 From: marcelb Date: Thu, 12 Sep 2024 19:57:35 +0200 Subject: [PATCH] Add namespace, clear --- .gitignore | 1 + .vscode/settings.json | 11 ++++++++- lib/{sql3.hpp => sqlite3.hpp} | 33 +++++++++++++------------ src/{sql3.cpp => sqlite3.cpp} | 45 ++++++++++++++++++---------------- test/test.cpp | 7 +++--- test/test.o | Bin 96512 -> 0 bytes 6 files changed, 57 insertions(+), 40 deletions(-) create mode 100644 .gitignore rename lib/{sql3.hpp => sqlite3.hpp} (59%) rename src/{sql3.cpp => sqlite3.cpp} (70%) delete mode 100755 test/test.o diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..1530978 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +*.o \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json index 859361c..94ddb0b 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,6 +1,15 @@ { "files.associations": { "string": "cpp", - "vector": "cpp" + "vector": "cpp", + "*.tcc": "cpp", + "deque": "cpp", + "unordered_map": "cpp", + "system_error": "cpp", + "iostream": "cpp", + "type_traits": "cpp", + "tuple": "cpp", + "array": "cpp", + "utility": "cpp" } } \ No newline at end of file diff --git a/lib/sql3.hpp b/lib/sqlite3.hpp similarity index 59% rename from lib/sql3.hpp rename to lib/sqlite3.hpp index 738dc34..037fc52 100644 --- a/lib/sql3.hpp +++ b/lib/sqlite3.hpp @@ -1,5 +1,5 @@ -#ifndef _SQL3_ -#define _SQL3_ +#ifndef _MARCELB_SQLITE3_ +#define _MARCELB_SQLITE3_ #include #include @@ -8,35 +8,38 @@ #include #include #include -// #include #include #include - using namespace std; +namespace marcelb::SQlite3 { + static string responseDatabase; static int callback(void* data, int argc, char** argv, char** azColName); -class sql3 { - public: - +class SQLite3 { + mutex io; sqlite3* db; string path; bool keepOpen; - string Answer; - map> parsed; - mutex io; - - sql3(const string path, bool _keepOpen = false); + bool open(); bool close(); - void mapit(); + map> parse(const string& result); - map> query(const string sql_command); +public: + + // string Answer; + // map> parsed; - ~sql3(); + SQLite3(const string path, bool _keepOpen = false); + + map> query(const string sql_command); + + ~SQLite3(); }; +} #endif \ No newline at end of file diff --git a/src/sql3.cpp b/src/sqlite3.cpp similarity index 70% rename from src/sql3.cpp rename to src/sqlite3.cpp index 04f09ff..3cbf82e 100644 --- a/src/sql3.cpp +++ b/src/sqlite3.cpp @@ -1,6 +1,8 @@ -#include "../lib/sql3.hpp" +#include "../lib/sqlite3.hpp" -sql3::sql3(const string _path, bool _keepOpen) { +namespace marcelb::SQlite3 { + +SQLite3::SQLite3(const string _path, bool _keepOpen) { path = _path; keepOpen = _keepOpen; @@ -9,21 +11,20 @@ sql3::sql3(const string _path, bool _keepOpen) { throw string("[ERROR] Unable to open database "); } } - } -bool sql3::open() { +bool SQLite3::open() { uint operationStatus = sqlite3_open(path.c_str(), &db); return operationStatus != SQLITE_OK; } -bool sql3::close() { +bool SQLite3::close() { uint operationStatus = sqlite3_close(db); db = NULL; return operationStatus != SQLITE_OK; } -map> sql3::query(const string sql_command) { +map> SQLite3::query(const string sql_command) { io.lock(); if (!keepOpen) { if (open()) { @@ -34,15 +35,16 @@ map> sql3::query(const string sql_command) { bool r = true; char *messaggeError; - uint exec_stuts; - exec_stuts = sqlite3_exec(db, sql_command.c_str(), callback, NULL, &messaggeError); + uint exec_status; + exec_status = sqlite3_exec(db, sql_command.c_str(), callback, NULL, &messaggeError); - if (exec_stuts != SQLITE_OK) { + string result; + if (exec_status != SQLITE_OK) { sqlite3_free(messaggeError); r = false; } else { - Answer = responseDatabase; + result = responseDatabase; responseDatabase.clear(); } @@ -61,16 +63,16 @@ map> sql3::query(const string sql_command) { } else { - mapit(); - _parsed = parsed; - parsed.clear(); + _parsed = parse(result); } io.unlock(); return _parsed; } -void sql3::mapit() { - string a = Answer; + +map> SQLite3::parse(const string& result) { + string a = result; + map> parsed; while (a.find("\n") < a.length()) { uint lineend = a.find("\n"); @@ -81,27 +83,25 @@ void sql3::mapit() { 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); } - + return parsed; } -sql3::~sql3() { +SQLite3::~SQLite3() { if(close()) { - throw string("[ERROR] Unable to close database "); + // throw string("[ERROR] Unable to close database "); } } /** - * Callback funkcija za sqlite3 + * Callback funkcija za SQLite3 */ static int callback(void* data, int argc, char** argv, char** azColName) { int i; - // fprintf(stderr, "%s: ", (const char*)data); // ovo je ispisivalo Ĩudne stringove toplo se nadam da nam ne treba char res[1000]; for (i = 0; i < argc; i++) { sprintf(res, "%s = %s", azColName[i], argv[i] ? argv[i] : "NULL"); @@ -109,3 +109,6 @@ static int callback(void* data, int argc, char** argv, char** azColName) { } return 0; } + + +} \ No newline at end of file diff --git a/test/test.cpp b/test/test.cpp index d772a86..f1f4541 100644 --- a/test/test.cpp +++ b/test/test.cpp @@ -1,13 +1,14 @@ #include +using namespace std; -#include "../lib/sql3.hpp" -using namespace std; +#include "../lib/sqlite3.hpp" +using namespace marcelb::SQlite3; int main() { try { - sql3 mydb("../example/example.db", false); + SQLite3 mydb("../example/example.db", false); // cout << mydb.ask("Select * from Tab1"); // cout << mydb.ask("INSERT INTO Tab1 VALUES(3,'Pakora', 'marijanab@bitelex.ml');"); diff --git a/test/test.o b/test/test.o deleted file mode 100755 index 115037e57d9d71732dbe0a00803af205afada060..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 96512 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 z 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