diff options
author | Shauren <shauren.trinity@gmail.com> | 2015-09-13 11:13:04 +0200 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2015-09-13 11:13:04 +0200 |
commit | 3109ab2da08d094df97724355bff681d7951e576 (patch) | |
tree | 39696b90d0ed3dc68668f7066f62a8e57bb2da7d /src/server/database/Database/Field.h | |
parent | f515e9ea67ae97affebba1aef765f8e8962541d4 (diff) |
Core/DBLayer: Allowed using GetDouble for SUM results instead of requiring string conversions
Diffstat (limited to 'src/server/database/Database/Field.h')
-rw-r--r-- | src/server/database/Database/Field.h | 36 |
1 files changed, 33 insertions, 3 deletions
diff --git a/src/server/database/Database/Field.h b/src/server/database/Database/Field.h index 4271d7a8d3e..d45d39265cf 100644 --- a/src/server/database/Database/Field.h +++ b/src/server/database/Database/Field.h @@ -23,6 +23,36 @@ #include <mysql.h> +/** + @class Field + + @brief Class used to access individual fields of database query result + + Guideline on field type matching: + + | MySQL type | method to use | + |------------------------|----------------------------------------| + | TINYINT | GetBool, GetInt8, GetUInt8 | + | SMALLINT | GetInt16, GetUInt16 | + | MEDIUMINT, INT | GetInt32, GetUInt32 | + | BIGINT | GetInt64, GetUInt64 | + | FLOAT | GetFloat | + | DOUBLE, DECIMAL | GetDouble | + | CHAR, VARCHAR, | GetCString, GetString | + | TINYTEXT, MEDIUMTEXT, | GetCString, GetString | + | TEXT, LONGTEXT | GetCString, GetString | + | TINYBLOB, MEDIUMBLOB, | GetBinary, GetString | + | BLOB, LONGBLOB | GetBinary, GetString | + | BINARY, VARBINARY | GetBinary | + + Return types of aggregate functions: + + | Function | Type | + |----------|-------------------| + | MIN, MAX | Same as the field | + | SUM, AVG | DECIMAL | + | COUNT | BIGINT | +*/ class Field { friend class ResultSet; @@ -214,15 +244,15 @@ class Field return 0.0f; #ifdef TRINITY_DEBUG - if (!IsType(MYSQL_TYPE_DOUBLE)) + if (!IsType(MYSQL_TYPE_DOUBLE) && !IsType(MYSQL_TYPE_NEWDECIMAL)) { - TC_LOG_WARN("sql.sql", "Warning: GetDouble() on non-double field %s.%s (%s.%s) at index %u. Using type: %s.", + TC_LOG_WARN("sql.sql", "Warning: GetDouble() on non-double/non-decimal field %s.%s (%s.%s) at index %u. Using type: %s.", meta.TableAlias, meta.Alias, meta.TableName, meta.Name, meta.Index, meta.Type); return 0.0f; } #endif - if (data.raw) + if (data.raw && !IsType(MYSQL_TYPE_NEWDECIMAL)) return *reinterpret_cast<double*>(data.value); return static_cast<double>(atof((char*)data.value)); } |