diff options
author | Machiavelli <none@none> | 2010-09-19 15:25:50 +0200 |
---|---|---|
committer | Machiavelli <none@none> | 2010-09-19 15:25:50 +0200 |
commit | 22571e9443ca3d1211f1f9888c67156481916d8b (patch) | |
tree | da772e3f7dd6c8c4381adf1bad8fc7879440818d /src/server/shared/Database/PreparedStatement.cpp | |
parent | b50c931d6eddb9493c494bc09900c79893b0bf1a (diff) |
Core/DBLayer:
- Allow storing floats in prepared statements explicitly (previously would be casted to double)
- Add GetBool ¨wrapper/hack¨ to PreparedResultset class.
--HG--
branch : trunk
Diffstat (limited to 'src/server/shared/Database/PreparedStatement.cpp')
-rw-r--r-- | src/server/shared/Database/PreparedStatement.cpp | 24 |
1 files changed, 22 insertions, 2 deletions
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); |