From 3ebcb71c3dc80e0bea9a36207401a033712bda88 Mon Sep 17 00:00:00 2001 From: Ujp8LfXBJ6wCPR Date: Sat, 29 Feb 2020 17:14:15 +0100 Subject: Replace MySQL prepared statement union with std::variant (#24158) --- src/server/database/Database/PreparedStatement.h | 34 +++++++++++------------- 1 file changed, 16 insertions(+), 18 deletions(-) (limited to 'src/server/database/Database/PreparedStatement.h') diff --git a/src/server/database/Database/PreparedStatement.h b/src/server/database/Database/PreparedStatement.h index f1ab3f2a1b6..18f82240436 100644 --- a/src/server/database/Database/PreparedStatement.h +++ b/src/server/database/Database/PreparedStatement.h @@ -22,27 +22,12 @@ #include "SQLOperation.h" #include #include +#include #ifdef __APPLE__ #undef TYPE_BOOL #endif -//- Union for data buffer (upper-level bind -> queue -> lower-level bind) -union PreparedStatementDataUnion -{ - bool boolean; - uint8 ui8; - int8 i8; - uint16 ui16; - int16 i16; - uint32 ui32; - int32 i32; - uint64 ui64; - int64 i64; - float f; - double d; -}; - //- This enum helps us differ data held in above union enum PreparedStatementValueType { @@ -64,9 +49,22 @@ enum PreparedStatementValueType struct PreparedStatementData { - PreparedStatementDataUnion data; + std::variant< + bool, // TYPE_BOOL + uint8, // TYPE_UI8 + uint16, // TYPE_UI16 + uint32, // TYPE_UI32 + uint64, // TYPE_UI64 + int8, // TYPE_I8 + int16, // TYPE_I16 + int32, // TYPE_UI32 + int64, // TYPE_UI64 + float, // TYPE_FLOAT + double, // TYPE_DOUBLE + std::string, // TYPE_STRING + std::vector> // TYPE_BINARY + data; PreparedStatementValueType type; - std::vector binary; }; //- Forward declare -- cgit v1.2.3