diff options
Diffstat (limited to 'src/server/database/Database/Field.h')
-rw-r--r-- | src/server/database/Database/Field.h | 49 |
1 files changed, 19 insertions, 30 deletions
diff --git a/src/server/database/Database/Field.h b/src/server/database/Database/Field.h index 45db25c4ecd..ea7c82d1876 100644 --- a/src/server/database/Database/Field.h +++ b/src/server/database/Database/Field.h @@ -36,6 +36,17 @@ enum class DatabaseFieldTypes : uint8 Binary }; +struct QueryResultFieldMetadata +{ + char const* TableName = nullptr; + char const* TableAlias = nullptr; + char const* Name = nullptr; + char const* Alias = nullptr; + char const* TypeName = nullptr; + uint32 Index = 0; + DatabaseFieldTypes Type = DatabaseFieldTypes::Null; +}; + /** @class Field @@ -99,47 +110,25 @@ class TC_DATABASE_API Field return data.value == nullptr; } - struct Metadata - { - char const* TableName; - char const* TableAlias; - char const* Name; - char const* Alias; - char const* Type; - uint32 Index; - }; - protected: - #pragma pack(push, 1) struct { - uint32 length; // Length (prepared strings only) - void* value; // Actual data in memory - DatabaseFieldTypes type; // Field type - bool raw; // Raw bytes? (Prepared statement or ad hoc) + char const* value; // Actual data in memory + uint32 length; // Length + bool raw; // Raw bytes? (Prepared statement or ad hoc) } data; - #pragma pack(pop) - - void SetByteValue(void* newValue, DatabaseFieldTypes newType, uint32 length); - void SetStructuredValue(char* newValue, DatabaseFieldTypes newType, uint32 length); - void CleanUp() - { - // Field does not own the data if fetched with prepared statement - if (!data.raw) - delete[] ((char*)data.value); - data.value = nullptr; - } + void SetByteValue(char const* newValue, uint32 length); + void SetStructuredValue(char const* newValue, uint32 length); bool IsType(DatabaseFieldTypes type) const; bool IsNumeric() const; private: - #ifdef TRINITY_STRICT_DATABASE_TYPE_CHECKS - void SetMetadata(MySQLField* field, uint32 fieldIndex); - Metadata meta; - #endif + QueryResultFieldMetadata const* meta; + void LogWrongType(char const* getter) const; + void SetMetadata(QueryResultFieldMetadata const* fieldMeta); }; #endif |