summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/database/database.cpp21
-rw-r--r--src/database/database.hpp11
2 files changed, 31 insertions, 1 deletions
diff --git a/src/database/database.cpp b/src/database/database.cpp
index 812d27c..b1525d5 100644
--- a/src/database/database.cpp
+++ b/src/database/database.cpp
@@ -106,6 +106,8 @@ void Database::set_after_connection_commands(const Database::IrcServerOptions& s
const auto id = server_options.col<Id>();
if (id == Id::unset_value)
return ;
+
+ Transaction transaction;
auto query = Database::after_connection_commands.del();
query.where() << ForeignKey{} << "=" << id;
query.execute(*Database::db);
@@ -330,4 +332,23 @@ std::string Database::gen_uuid()
return uuid_str;
}
+Transaction::Transaction()
+{
+ const auto result = Database::raw_exec("BEGIN");
+ if (std::get<bool>(result) == false)
+ log_error("Failed to create SQL transaction: ", std::get<std::string>(result));
+ else
+ this->success = true;
+
+}
+
+Transaction::~Transaction()
+{
+ if (this->success)
+ {
+ const auto result = Database::raw_exec("END");
+ if (std::get<bool>(result) == false)
+ log_error("Failed to end SQL transaction: ", std::get<std::string>(result));
+ }
+}
#endif
diff --git a/src/database/database.hpp b/src/database/database.hpp
index 0e88be8..5dde447 100644
--- a/src/database/database.hpp
+++ b/src/database/database.hpp
@@ -203,11 +203,20 @@ class Database
static auto raw_exec(const std::string& query)
{
- Database::db->raw_exec(query);
+ return Database::db->raw_exec(query);
}
private:
static std::string gen_uuid();
static std::map<CacheKey, EncodingIn::real_type> encoding_in_cache;
};
+
+class Transaction
+{
+public:
+ Transaction();
+ ~Transaction();
+ bool success{false};
+};
+
#endif /* USE_DATABASE */