aboutsummaryrefslogtreecommitdiff
path: root/src/server/database/Database/Transaction.h
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2023-12-27 00:14:12 +0100
committerShauren <shauren.trinity@gmail.com>2023-12-27 00:14:12 +0100
commit3a9cbd217aa14bd7543722d9f4849f736b7c3264 (patch)
tree1dbe14196d6a6ae0dcceb70a6edc9ebd9eb0bbba /src/server/database/Database/Transaction.h
parent13dc139742655ea523f02f67995ad376c9b912dc (diff)
Core/Database: Replace union with std::variant in Transaction
Diffstat (limited to 'src/server/database/Database/Transaction.h')
-rw-r--r--src/server/database/Database/Transaction.h19
1 files changed, 17 insertions, 2 deletions
diff --git a/src/server/database/Database/Transaction.h b/src/server/database/Database/Transaction.h
index 5fc81bd05c9..f4dcb9fae34 100644
--- a/src/server/database/Database/Transaction.h
+++ b/src/server/database/Database/Transaction.h
@@ -20,14 +20,25 @@
#include "Define.h"
#include "DatabaseEnvFwd.h"
-#include "SQLOperation.h"
#include "StringFormat.h"
#include <functional>
#include <mutex>
+#include <variant>
#include <vector>
class MySQLConnection;
+struct TransactionData
+{
+ std::variant<std::unique_ptr<PreparedStatementBase>, std::string> query;
+
+ template<typename... Args>
+ TransactionData(Args&&... args) : query(std::forward<Args>(args)...) { }
+
+ static PreparedStatementBase* ToExecutable(std::unique_ptr<PreparedStatementBase> const& stmt) { return stmt.get(); }
+ static char const* ToExecutable(std::string const& sql) { return sql.c_str(); }
+};
+
/*! Transactions, high level class. */
class TC_DATABASE_API TransactionBase
{
@@ -39,6 +50,10 @@ class TC_DATABASE_API TransactionBase
public:
TransactionBase() : _cleanedUp(false) { }
+ TransactionBase(TransactionBase const&) = delete;
+ TransactionBase(TransactionBase &&) noexcept = default;
+ TransactionBase& operator=(TransactionBase const&) = delete;
+ TransactionBase& operator=(TransactionBase &&) noexcept = default;
virtual ~TransactionBase() { Cleanup(); }
void Append(char const* sql);
@@ -53,7 +68,7 @@ class TC_DATABASE_API TransactionBase
protected:
void AppendPreparedStatement(PreparedStatementBase* statement);
void Cleanup();
- std::vector<SQLElementData> m_queries;
+ std::vector<TransactionData> m_queries;
private:
bool _cleanedUp;