#include #include MscEngineDBProvider::MscEngineDBProvider() : MscEngineDBProvider(":memory:") { } MscEngineDBProvider::MscEngineDBProvider(const std::string &filepath) { const int result = sqlite3_open(filepath.c_str(), &_db); if (result != SQLITE_OK) { const std::string message = _db != nullptr ? sqlite3_errmsg(_db) : "unknown SQLite error"; if (_db != nullptr) { sqlite3_close(_db); _db = nullptr; } throw std::runtime_error("Failed to open SQLite database: " + message); } } MscEngineDBProvider::~MscEngineDBProvider() { if (_db != nullptr) sqlite3_close(_db); } void MscEngineDBProvider::execute(const std::string &sql) { char *errorMessage = nullptr; const int result = sqlite3_exec(_db, sql.c_str(), nullptr, nullptr, &errorMessage); if (result == SQLITE_OK) return; std::string message(errorMessage); sqlite3_free(errorMessage); throw std::runtime_error("Failed to execute SQL: " + message); }