aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/server/shared/Database/PreparedStatement.cpp24
-rw-r--r--src/server/shared/Database/PreparedStatement.h6
-rw-r--r--src/server/shared/Database/QueryResult.cpp6
-rwxr-xr-xsrc/server/shared/Database/QueryResult.h1
4 files changed, 34 insertions, 3 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);
diff --git a/src/server/shared/Database/PreparedStatement.h b/src/server/shared/Database/PreparedStatement.h
index ad95789102b..00e7ad89018 100644
--- a/src/server/shared/Database/PreparedStatement.h
+++ b/src/server/shared/Database/PreparedStatement.h
@@ -33,7 +33,8 @@ union PreparedStatementDataUnion
int32 i32;
uint64 ui64;
int64 i64;
- double f; // TODO: Maybe split it up in double and float types
+ float f;
+ double d;
};
//- This enum helps us differ data held in above union
@@ -49,6 +50,7 @@ enum PreparedStatementValueType
TYPE_I32,
TYPE_I64,
TYPE_FLOAT,
+ TYPE_DOUBLE,
TYPE_STRING
};
@@ -82,6 +84,7 @@ class PreparedStatement
void setInt16(const uint8 index, const int16 value);
void setInt32(const uint8 index, const int32 value);
void setInt64(const uint8 index, const int64 value);
+ void setFloat(const uint8 index, const float value);
void setDouble(const uint8 index, const double value);
void setString(const uint8 index, const std::string& value);
@@ -115,6 +118,7 @@ class MySQLPreparedStatement
void setInt16(const uint8 index, const int16 value);
void setInt32(const uint8 index, const int32 value);
void setInt64(const uint8 index, const int64 value);
+ void setFloat(const uint8 index, const float value);
void setDouble(const uint8 index, const double value);
void setString(const uint8 index, const char* value);
diff --git a/src/server/shared/Database/QueryResult.cpp b/src/server/shared/Database/QueryResult.cpp
index 61f41e75587..283734b80b7 100644
--- a/src/server/shared/Database/QueryResult.cpp
+++ b/src/server/shared/Database/QueryResult.cpp
@@ -185,6 +185,12 @@ void ResultBind::CleanUp()
delete[] m_rBind;
}
+bool PreparedResultSet::GetBool(uint32 index)
+{
+ // TODO: Perhaps start storing data in genuine bool formats in tables
+ return GetUInt8(index) == 1 ? true : false;
+}
+
uint8 PreparedResultSet::GetUInt8(uint32 index)
{
if (!CheckFieldIndex(index))
diff --git a/src/server/shared/Database/QueryResult.h b/src/server/shared/Database/QueryResult.h
index 25661a2b06e..22cd8bbf19e 100755
--- a/src/server/shared/Database/QueryResult.h
+++ b/src/server/shared/Database/QueryResult.h
@@ -195,6 +195,7 @@ class PreparedResultSet
operator bool() { return num_rows > 0; }
+ bool GetBool(uint32 index);
uint8 GetUInt8(uint32 index);
int8 GetInt8(uint32 index);
uint16 GetUInt16(uint32 index);