diff options
Diffstat (limited to 'src/server/database/Database/Transaction.h')
-rw-r--r-- | src/server/database/Database/Transaction.h | 19 |
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; |