#include "TransactionDatabase.hpp" #include "Model/Project.hpp" #include #include #include namespace fs = std::filesystem; static bool TableExists(sqlite3* db, const char* table, const char* column = nullptr) { return sqlite3_table_column_metadata(db, nullptr, table, column, nullptr, nullptr, nullptr, nullptr, nullptr) == SQLITE_OK; } TransactionDatabase::TransactionDatabase(Project& project) : mProject{ &project } , mDatabase{ nullptr } { fs::path dbDir = project.GetPath() / "databases"; fs::create_directories(dbDir); fs::path dbPath = dbDir / "transactions.sqlite3"; #if PLATFORM_WIN32 if (int rc = sqlite3_open16(dbPath.c_str(), &mDatabase); rc) { #else if (int rc = sqlite3_open(transactionDbPath.c_str(), &mDatabase); rc) { #endif sqlite3_close(mDatabase); std::string message; message += "Failed to open SQLite database for transactions. Error code: "; message += rc; message += "."; throw std::runtime_error(message); } } TransactionDatabase::~TransactionDatabase() { sqlite3_close(mDatabase); mDatabase = nullptr; }