From 22571e9443ca3d1211f1f9888c67156481916d8b Mon Sep 17 00:00:00 2001 From: Machiavelli Date: Sun, 19 Sep 2010 15:25:50 +0200 Subject: Core/DBLayer: - Allow storing floats in prepared statements explicitly (previously would be casted to double) - Add GetBool ¨wrapper/hack¨ to PreparedResultset class. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --HG-- branch : trunk --- src/server/shared/Database/PreparedStatement.cpp | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) (limited to 'src/server/shared/Database/PreparedStatement.cpp') diff --git a/src/server/shared/Database/PreparedStatement.cpp b/src/server/shared/Database/PreparedStatement.cpp index 5f991f3a08a..6b1a55efd44 100644 --- a/src/server/shared/Database/PreparedStatement.cpp +++ b/src/server/shared/Database/PreparedStatement.cpp @@ -59,7 +59,10 @@ void PreparedStatement::BindParameters() m_stmt->setInt64(i, statement_data[i].data.i64); break; case TYPE_FLOAT: - m_stmt->setDouble(i, statement_data[i].data.f); + m_stmt->setFloat(i, statement_data[i].data.f); + break; + case TYPE_DOUBLE: + m_stmt->setDouble(i, statement_data[i].data.d); break; case TYPE_STRING: m_stmt->setString(i, statement_data[i].str.c_str()); @@ -154,7 +157,7 @@ void PreparedStatement::setInt64(const uint8 index, const int64 value) statement_data[index].type = TYPE_I64; } -void PreparedStatement::setDouble(const uint8 index, const double value) +void PreparedStatement::setFloat(const uint8 index, const float value) { if (index >= statement_data.size()) statement_data.resize(index+1); @@ -163,6 +166,15 @@ void PreparedStatement::setDouble(const uint8 index, const double value) statement_data[index].type = TYPE_FLOAT; } +void PreparedStatement::setDouble(const uint8 index, const double value) +{ + if (index >= statement_data.size()) + statement_data.resize(index+1); + + statement_data[index].data.d = value; + statement_data[index].type = TYPE_DOUBLE; +} + void PreparedStatement::setString(const uint8 index, const std::string& value) { if (index >= statement_data.size()) @@ -274,6 +286,14 @@ void MySQLPreparedStatement::setInt64(const uint8 index, const int64 value) setValue(param, MYSQL_TYPE_LONGLONG, &value, sizeof(int64), false); } +void MySQLPreparedStatement::setFloat(const uint8 index, const float value) +{ + CheckValidIndex(index); + m_paramsSet[index] = true; + MYSQL_BIND* param = &m_bind[index]; + setValue(param, MYSQL_TYPE_FLOAT, &value, sizeof(double), (value > 0.0f)); +} + void MySQLPreparedStatement::setDouble(const uint8 index, const double value) { CheckValidIndex(index); -- cgit v1.2.3