diff options
author | Ujp8LfXBJ6wCPR <github@lillecarl.com> | 2020-02-29 17:14:15 +0100 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2021-12-22 20:29:49 +0100 |
commit | f871f0098e8953b2f585eacddaf7415c9ddc307a (patch) | |
tree | 4adee9b00f6a903e03c1081e3b0eb398125206f2 /src/server/database/Database/PreparedStatement.cpp | |
parent | e75750b867470076d419534f79ea14666dbe30fb (diff) |
Replace MySQL prepared statement union with std::variant (#24158)
(cherry picked from commit 3ebcb71c3dc80e0bea9a36207401a033712bda88)
Diffstat (limited to 'src/server/database/Database/PreparedStatement.cpp')
-rw-r--r-- | src/server/database/Database/PreparedStatement.cpp | 75 |
1 files changed, 31 insertions, 44 deletions
diff --git a/src/server/database/Database/PreparedStatement.cpp b/src/server/database/Database/PreparedStatement.cpp index 32590c95adf..f450992d654 100644 --- a/src/server/database/Database/PreparedStatement.cpp +++ b/src/server/database/Database/PreparedStatement.cpp @@ -33,54 +33,55 @@ void PreparedStatementBase::BindParameters(MySQLPreparedStatement* stmt) ASSERT(stmt); m_stmt = stmt; - uint8 i = 0; - for (; i < statement_data.size(); i++) + uint8 pos = 0; + for (PreparedStatementData const& data : statement_data) { - switch (statement_data[i].type) + switch (data.type) { case TYPE_BOOL: - stmt->setBool(i, statement_data[i].data.boolean); + stmt->setBool(pos, std::get<bool>(data.data)); break; case TYPE_UI8: - stmt->setUInt8(i, statement_data[i].data.ui8); + stmt->setUInt8(pos, std::get<uint8>(data.data)); break; case TYPE_UI16: - stmt->setUInt16(i, statement_data[i].data.ui16); + stmt->setUInt16(pos, std::get<uint16>(data.data)); break; case TYPE_UI32: - stmt->setUInt32(i, statement_data[i].data.ui32); + stmt->setUInt32(pos, std::get<uint32>(data.data)); break; case TYPE_I8: - stmt->setInt8(i, statement_data[i].data.i8); + stmt->setInt8(pos, std::get<int8>(data.data)); break; case TYPE_I16: - stmt->setInt16(i, statement_data[i].data.i16); + stmt->setInt16(pos, std::get<int16>(data.data)); break; case TYPE_I32: - stmt->setInt32(i, statement_data[i].data.i32); + stmt->setInt32(pos, std::get<int32>(data.data)); break; case TYPE_UI64: - stmt->setUInt64(i, statement_data[i].data.ui64); + stmt->setUInt64(pos, std::get<uint64>(data.data)); break; case TYPE_I64: - stmt->setInt64(i, statement_data[i].data.i64); + stmt->setInt64(pos, std::get<int64>(data.data)); break; case TYPE_FLOAT: - stmt->setFloat(i, statement_data[i].data.f); + stmt->setFloat(pos, std::get<float>(data.data)); break; case TYPE_DOUBLE: - stmt->setDouble(i, statement_data[i].data.d); + stmt->setDouble(pos, std::get<double>(data.data)); break; case TYPE_STRING: - stmt->setBinary(i, statement_data[i].binary, true); + stmt->setString(pos, std::get<std::string>(data.data)); break; case TYPE_BINARY: - stmt->setBinary(i, statement_data[i].binary, false); + stmt->setBinary(pos, std::get<std::vector<uint8>>(data.data)); break; case TYPE_NULL: - stmt->setNull(i); + stmt->setNull(pos); break; } + ++pos; } #ifdef _DEBUG if (i < stmt->m_paramCount) @@ -92,105 +93,91 @@ void PreparedStatementBase::BindParameters(MySQLPreparedStatement* stmt) void PreparedStatementBase::setBool(const uint8 index, const bool value) { ASSERT(index < statement_data.size()); - - statement_data[index].data.boolean = value; + statement_data[index].data = value; statement_data[index].type = TYPE_BOOL; } void PreparedStatementBase::setUInt8(const uint8 index, const uint8 value) { ASSERT(index < statement_data.size()); - - statement_data[index].data.ui8 = value; + statement_data[index].data = value; statement_data[index].type = TYPE_UI8; } void PreparedStatementBase::setUInt16(const uint8 index, const uint16 value) { ASSERT(index < statement_data.size()); - - statement_data[index].data.ui16 = value; + statement_data[index].data = value; statement_data[index].type = TYPE_UI16; } void PreparedStatementBase::setUInt32(const uint8 index, const uint32 value) { ASSERT(index < statement_data.size()); - - statement_data[index].data.ui32 = value; + statement_data[index].data = value; statement_data[index].type = TYPE_UI32; } void PreparedStatementBase::setUInt64(const uint8 index, const uint64 value) { ASSERT(index < statement_data.size()); - - statement_data[index].data.ui64 = value; + statement_data[index].data = value; statement_data[index].type = TYPE_UI64; } void PreparedStatementBase::setInt8(const uint8 index, const int8 value) { ASSERT(index < statement_data.size()); - - statement_data[index].data.i8 = value; + statement_data[index].data = value; statement_data[index].type = TYPE_I8; } void PreparedStatementBase::setInt16(const uint8 index, const int16 value) { ASSERT(index < statement_data.size()); - - statement_data[index].data.i16 = value; + statement_data[index].data = value; statement_data[index].type = TYPE_I16; } void PreparedStatementBase::setInt32(const uint8 index, const int32 value) { ASSERT(index < statement_data.size()); - - statement_data[index].data.i32 = value; + statement_data[index].data = value; statement_data[index].type = TYPE_I32; } void PreparedStatementBase::setInt64(const uint8 index, const int64 value) { ASSERT(index < statement_data.size()); - - statement_data[index].data.i64 = value; + statement_data[index].data = value; statement_data[index].type = TYPE_I64; } void PreparedStatementBase::setFloat(const uint8 index, const float value) { ASSERT(index < statement_data.size()); - - statement_data[index].data.f = value; + statement_data[index].data = value; statement_data[index].type = TYPE_FLOAT; } void PreparedStatementBase::setDouble(const uint8 index, const double value) { ASSERT(index < statement_data.size()); - - statement_data[index].data.d = value; + statement_data[index].data = value; statement_data[index].type = TYPE_DOUBLE; } void PreparedStatementBase::setString(const uint8 index, const std::string& value) { ASSERT(index < statement_data.size()); - - statement_data[index].binary.resize(value.length() + 1); - memcpy(statement_data[index].binary.data(), value.c_str(), value.length() + 1); + statement_data[index].data = value; statement_data[index].type = TYPE_STRING; } void PreparedStatementBase::setBinary(const uint8 index, const std::vector<uint8>& value) { ASSERT(index < statement_data.size()); - - statement_data[index].binary = value; + statement_data[index].data = value; statement_data[index].type = TYPE_BINARY; } |