aboutsummaryrefslogtreecommitdiff
path: root/src/server/database/Database/Field.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/server/database/Database/Field.h')
-rw-r--r--src/server/database/Database/Field.h49
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