46 lines
1.1 KiB
C++
46 lines
1.1 KiB
C++
#include <engine/core/engine_db_provider.hpp>
|
|
#include <stdexcept>
|
|
|
|
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);
|
|
}
|