diff --git a/server/src/db/database.cpp b/server/src/db/database.cpp index 3440713..48baed7 100644 --- a/server/src/db/database.cpp +++ b/server/src/db/database.cpp @@ -16,7 +16,7 @@ void sosc::db::init_databases() { sqlite3_exec(_ctx.mem_db, _mem_db_sql, nullptr, nullptr, nullptr); sqlite3_open("scape.db", &_ctx.hard_db); - + _ctx.ready = true; } @@ -28,4 +28,4 @@ void sosc::db::close_databases() { sqlite3_close(_ctx.mem_db); sqlite3_close(_ctx.hard_db); _ctx.ready = false; -} \ No newline at end of file +} diff --git a/server/src/db/database.hpp b/server/src/db/database.hpp index 87bc75b..4382e3e 100644 --- a/server/src/db/database.hpp +++ b/server/src/db/database.hpp @@ -2,27 +2,60 @@ #define SOSC_DATABASE_H #include "sqlite/sqlite3.h" +#include "../utils/time.hpp" #include #include +#define DB_COL_TEXT 1 +#define DB_COL_BLOB 2 + namespace sosc { namespace db { +class Query; + class ResultSet { public: + bool IsOpen() const; + bool IsReadable() const; + bool Step(); + template + T Get(int column); + std::string Get(int column, int type = DB_COL_TEXT); private: + ResultSet(Query* query, sqlite3_stmt* stmt); + sqlite3_stmt* statement; + Query* query; + bool readable; + friend class Query; }; +double ResultSet::Get(int column); +int32_t ResultSet::Get(int column); +int64_t ResultSet::Get(int column); +sosc::time ResultSet::Get(int column); + class Query { public: Query(); Query(const std::string& query); void SetQuery(const std::string& query); + void NonQuery(); + + ResultSet* GetResults() const; + + inline bool IsOpen() const { + return this->open; + } + void Reset(); void Close(); private: + ResultSet results; + sqlite3_stmt* statement; + std::string query; bool open; };