Core/DBLayer: Refactor PreparedStatement class to not depend on MySQLPreparedStatement

(cherry picked from commit 5b0a32d164)
This commit is contained in:
Shauren
2020-03-02 19:40:59 +01:00
parent 31efaaac40
commit ce9c7b477c
6 changed files with 79 additions and 87 deletions

View File

@@ -24,71 +24,10 @@
#include "MySQLWorkaround.h"
PreparedStatementBase::PreparedStatementBase(uint32 index, uint8 capacity) :
m_stmt(nullptr), m_index(index), statement_data(capacity) { }
m_index(index), statement_data(capacity) { }
PreparedStatementBase::~PreparedStatementBase() { }
void PreparedStatementBase::BindParameters(MySQLPreparedStatement* stmt)
{
ASSERT(stmt);
m_stmt = stmt;
uint8 pos = 0;
for (PreparedStatementData const& data : statement_data)
{
switch (data.type)
{
case TYPE_BOOL:
stmt->setBool(pos, std::get<bool>(data.data));
break;
case TYPE_UI8:
stmt->setUInt8(pos, std::get<uint8>(data.data));
break;
case TYPE_UI16:
stmt->setUInt16(pos, std::get<uint16>(data.data));
break;
case TYPE_UI32:
stmt->setUInt32(pos, std::get<uint32>(data.data));
break;
case TYPE_I8:
stmt->setInt8(pos, std::get<int8>(data.data));
break;
case TYPE_I16:
stmt->setInt16(pos, std::get<int16>(data.data));
break;
case TYPE_I32:
stmt->setInt32(pos, std::get<int32>(data.data));
break;
case TYPE_UI64:
stmt->setUInt64(pos, std::get<uint64>(data.data));
break;
case TYPE_I64:
stmt->setInt64(pos, std::get<int64>(data.data));
break;
case TYPE_FLOAT:
stmt->setFloat(pos, std::get<float>(data.data));
break;
case TYPE_DOUBLE:
stmt->setDouble(pos, std::get<double>(data.data));
break;
case TYPE_STRING:
stmt->setString(pos, std::get<std::string>(data.data));
break;
case TYPE_BINARY:
stmt->setBinary(pos, std::get<std::vector<uint8>>(data.data));
break;
case TYPE_NULL:
stmt->setNull(pos);
break;
}
++pos;
}
#ifdef _DEBUG
if (pos < stmt->m_paramCount)
TC_LOG_WARN("sql.sql", "[WARNING]: BindParameters() for statement %u did not bind all allocated parameters", m_index);
#endif
}
//- Bind to buffer
void PreparedStatementBase::setBool(const uint8 index, const bool value)
{
@@ -184,7 +123,6 @@ void PreparedStatementBase::setBinary(const uint8 index, const std::vector<uint8
void PreparedStatementBase::setNull(const uint8 index)
{
ASSERT(index < statement_data.size());
statement_data[index].type = TYPE_NULL;
}