feat: implement db provider
This commit is contained in:
@@ -84,3 +84,13 @@ MscEngineModule &MscEngine::getModule(const std::string &name)
|
||||
|
||||
throw std::runtime_error("Module not found: " + name);
|
||||
}
|
||||
|
||||
std::unique_ptr<MscEngineDBProvider> MscEngine::createDBProvider()
|
||||
{
|
||||
return std::make_unique<MscEngineDBProvider>();
|
||||
}
|
||||
|
||||
std::unique_ptr<MscEngineDBProvider> MscEngine::createDBProvider(const std::string &filepath)
|
||||
{
|
||||
return std::make_unique<MscEngineDBProvider>(filepath);
|
||||
}
|
||||
|
||||
@@ -0,0 +1,45 @@
|
||||
#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);
|
||||
}
|
||||
Reference in New Issue
Block a user