aboutsummaryrefslogtreecommitdiff
path: root/src/server/shared/Database/PreparedStatement.cpp
diff options
context:
space:
mode:
authorMachiavelli <none@none>2010-09-19 15:25:50 +0200
committerMachiavelli <none@none>2010-09-19 15:25:50 +0200
commit22571e9443ca3d1211f1f9888c67156481916d8b (patch)
treeda772e3f7dd6c8c4381adf1bad8fc7879440818d /src/server/shared/Database/PreparedStatement.cpp
parentb50c931d6eddb9493c494bc09900c79893b0bf1a (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.cpp24
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);