aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMachiavelli <machiavelli.trinity@gmail.com>2012-03-25 14:10:06 +0300
committerMachiavelli <machiavelli.trinity@gmail.com>2012-03-25 14:10:06 +0300
commit87176c84d3604952d03e8818d4ae13765c143ee7 (patch)
tree13f989b2c88877adaf1c665c9261aacb0ba29663
parent2ba4c5fa68a5faeffc05f75c95fb47f562237251 (diff)
Core/DBLayer: Refine field type checks in Field::GetXXX methods. Should give us logs of wrong GetXXX calls for a certain type without having to dig trough valgrind logs.
-rwxr-xr-xsrc/server/shared/Database/Field.h55
1 files changed, 35 insertions, 20 deletions
diff --git a/src/server/shared/Database/Field.h b/src/server/shared/Database/Field.h
index 355f6b47ff2..36303f45e81 100755
--- a/src/server/shared/Database/Field.h
+++ b/src/server/shared/Database/Field.h
@@ -41,11 +41,12 @@ class Field
return 0;
#ifdef TRINITY_DEBUG
- if (!IsNumeric())
+ if (!IsType(MYSQL_TYPE_TINY))
{
- sLog->outSQLDriver("Error: GetUInt8() on non-numeric field.");
+ sLog->outSQLDriver("Warning: GetUInt8() on non-tinyint field.");
return 0;
}
+
#endif
if (data.raw)
return *reinterpret_cast<uint8*>(data.value);
@@ -58,12 +59,13 @@ class Field
return 0;
#ifdef TRINITY_DEBUG
- if (!IsNumeric())
+ if (!IsType(MYSQL_TYPE_TINY))
{
- sLog->outSQLDriver("Error: GeInt8() on non-numeric field.");
+ sLog->outSQLDriver("Warning: GetInt8() on non-tinyint field.");
return 0;
}
#endif
+
if (data.raw)
return *reinterpret_cast<int8*>(data.value);
return static_cast<int8>(atol((char*)data.value));
@@ -75,12 +77,13 @@ class Field
return 0;
#ifdef TRINITY_DEBUG
- if (!IsNumeric())
+ if (!IsType(MYSQL_TYPE_SHORT) && !IsType(MYSQL_TYPE_YEAR))
{
- sLog->outSQLDriver("Error: GetUInt16() on non-numeric field.");
+ sLog->outSQLDriver("Warning: GetUInt16() on non-smallint field.");
return 0;
}
#endif
+
if (data.raw)
return *reinterpret_cast<uint16*>(data.value);
return static_cast<uint16>(atol((char*)data.value));
@@ -92,12 +95,13 @@ class Field
return 0;
#ifdef TRINITY_DEBUG
- if (!IsNumeric())
+ if (!IsType(MYSQL_TYPE_SHORT) && !IsType(MYSQL_TYPE_YEAR))
{
- sLog->outSQLDriver("Error: GetInt16() on non-numeric field.");
+ sLog->outSQLDriver("Warning: GetInt16() on non-smallint field.");
return 0;
}
#endif
+
if (data.raw)
return *reinterpret_cast<int16*>(data.value);
return static_cast<int16>(atol((char*)data.value));
@@ -109,12 +113,13 @@ class Field
return 0;
#ifdef TRINITY_DEBUG
- if (!IsNumeric())
+ if (!IsType(MYSQL_TYPE_INT24) && !IsType(MYSQL_TYPE_LONG))
{
- sLog->outSQLDriver("Error: GetUInt32() on non-numeric field.");
+ sLog->outSQLDriver("Warning: GetUInt32() on non-(medium)int field.");
return 0;
}
#endif
+
if (data.raw)
return *reinterpret_cast<uint32*>(data.value);
return static_cast<uint32>(atol((char*)data.value));
@@ -126,12 +131,13 @@ class Field
return 0;
#ifdef TRINITY_DEBUG
- if (!IsNumeric())
+ if (!IsType(MYSQL_TYPE_INT24) && !IsType(MYSQL_TYPE_LONG))
{
- sLog->outSQLDriver("Error: GetInt32() on non-numeric field.");
+ sLog->outSQLDriver("Warning: GetInt32() on non-(medium)int field.");
return 0;
}
#endif
+
if (data.raw)
return *reinterpret_cast<int32*>(data.value);
return static_cast<int32>(atol((char*)data.value));
@@ -143,12 +149,13 @@ class Field
return 0;
#ifdef TRINITY_DEBUG
- if (!IsNumeric())
+ if (!IsType(MYSQL_TYPE_LONGLONG) && !IsType(MYSQL_TYPE_BIT))
{
- sLog->outSQLDriver("Error: GetUInt64() on non-numeric field.");
+ sLog->outSQLDriver("Warning: GetUInt64() on non-bigint field.");
return 0;
}
#endif
+
if (data.raw)
return *reinterpret_cast<uint64*>(data.value);
return static_cast<uint64>(atol((char*)data.value));
@@ -160,12 +167,13 @@ class Field
return 0;
#ifdef TRINITY_DEBUG
- if (!IsNumeric())
+ if (!IsType(MYSQL_TYPE_LONGLONG) && !IsType(MYSQL_TYPE_BIT))
{
- sLog->outSQLDriver("Error: GetInt64() on non-numeric field.");
+ sLog->outSQLDriver("Warning: GetInt64() on non-bigint field.");
return 0;
}
#endif
+
if (data.raw)
return *reinterpret_cast<int64*>(data.value);
return static_cast<int64>(strtol((char*)data.value, NULL, 10));
@@ -177,12 +185,13 @@ class Field
return 0.0f;
#ifdef TRINITY_DEBUG
- if (!IsNumeric())
+ if (!IsType(MYSQL_TYPE_FLOAT))
{
- sLog->outSQLDriver("Error: GetFloat() on non-numeric field.");
+ sLog->outSQLDriver("Warning: GetFloat() on non-float field.");
return 0.0f;
}
#endif
+
if (data.raw)
return *reinterpret_cast<float*>(data.value);
return static_cast<float>(atof((char*)data.value));
@@ -194,12 +203,13 @@ class Field
return 0.0f;
#ifdef TRINITY_DEBUG
- if (!IsNumeric())
+ if (!IsType(MYSQL_TYPE_FLOAT))
{
- sLog->outSQLDriver("Error: GetDouble() on non-numeric field.");
+ sLog->outSQLDriver("Warning: GetDouble() on non-double field.");
return 0.0f;
}
#endif
+
if (data.raw)
return *reinterpret_cast<double*>(data.value);
return static_cast<double>(atof((char*)data.value));
@@ -316,6 +326,11 @@ class Field
}
}
+ bool IsType(enum_field_types type) const
+ {
+ return data.type == type;
+ }
+
bool IsNumeric() const
{
return (data.type == MYSQL_TYPE_TINY ||