diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/server/shared/Database/PreparedStatement.cpp | 24 | ||||
-rw-r--r-- | src/server/shared/Database/PreparedStatement.h | 6 | ||||
-rw-r--r-- | src/server/shared/Database/QueryResult.cpp | 6 | ||||
-rwxr-xr-x | src/server/shared/Database/QueryResult.h | 1 |
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); |