From cecb36bd68d30408a0741b161318aadc70a81e20 Mon Sep 17 00:00:00 2001 From: Shauren Date: Mon, 2 Mar 2020 22:50:56 +0100 Subject: Core/DBLayer: Use std::variant's stored type instead of relying on our own separate enum for prepared statement parameters (cherry picked from commit 30482038559d65648d9bcfa29cd426a6f266eeba) --- src/server/database/Database/PreparedStatement.cpp | 61 +++++++++++++++++----- 1 file changed, 47 insertions(+), 14 deletions(-) (limited to 'src/server/database/Database/PreparedStatement.cpp') diff --git a/src/server/database/Database/PreparedStatement.cpp b/src/server/database/Database/PreparedStatement.cpp index 6cefaf14119..c387d7d6ad8 100644 --- a/src/server/database/Database/PreparedStatement.cpp +++ b/src/server/database/Database/PreparedStatement.cpp @@ -33,97 +33,84 @@ void PreparedStatementBase::setBool(const uint8 index, const bool value) { ASSERT(index < statement_data.size()); 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 = 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 = 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 = 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 = 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 = 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 = 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 = 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 = 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 = 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 = 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].data = value; - statement_data[index].type = TYPE_STRING; } void PreparedStatementBase::setBinary(const uint8 index, const std::vector& value) { ASSERT(index < statement_data.size()); statement_data[index].data = value; - statement_data[index].type = TYPE_BINARY; } void PreparedStatementBase::setNull(const uint8 index) { ASSERT(index < statement_data.size()); - statement_data[index].type = TYPE_NULL; + statement_data[index].data = nullptr; } //- Execution @@ -159,3 +146,49 @@ bool PreparedStatementTask::Execute() return m_conn->Execute(m_stmt); } + +template +std::string PreparedStatementData::ToString(T value) +{ + return fmt::format("{}", value); +} + +std::string PreparedStatementData::ToString(bool value) +{ + return ToString(value); +} + +std::string PreparedStatementData::ToString(uint8 value) +{ + return ToString(value); +} + +template std::string PreparedStatementData::ToString(uint16); +template std::string PreparedStatementData::ToString(uint32); +template std::string PreparedStatementData::ToString(uint64); + +std::string PreparedStatementData::ToString(int8 value) +{ + return ToString(value); +} + +template std::string PreparedStatementData::ToString(int16); +template std::string PreparedStatementData::ToString(int32); +template std::string PreparedStatementData::ToString(int64); +template std::string PreparedStatementData::ToString(float); +template std::string PreparedStatementData::ToString(double); + +std::string PreparedStatementData::ToString(std::string const& value) +{ + return fmt::format("'{}'", value); +} + +std::string PreparedStatementData::ToString(std::vector const& /*value*/) +{ + return "BINARY"; +} + +std::string PreparedStatementData::ToString(std::nullptr_t) +{ + return "NULL"; +} -- cgit v1.2.3