From eadafb0347d606e5e3e660d21227aa15378bdb21 Mon Sep 17 00:00:00 2001 From: Shauren Date: Sun, 14 May 2023 16:30:05 +0200 Subject: Core/DBLayer: Relaxed restrictions on which Field class member function can be used to access column value from "strict match" to "must not truncate" --- src/server/database/Database/Field.h | 37 ++++++++++++++++-------------------- 1 file changed, 16 insertions(+), 21 deletions(-) (limited to 'src/server/database/Database/Field.h') diff --git a/src/server/database/Database/Field.h b/src/server/database/Database/Field.h index 0229c852647..d0613a3a94f 100644 --- a/src/server/database/Database/Field.h +++ b/src/server/database/Database/Field.h @@ -15,22 +15,27 @@ * with this program. If not, see . */ -#ifndef _FIELD_H -#define _FIELD_H +#ifndef TRINITY_DATABASE_FIELD_H +#define TRINITY_DATABASE_FIELD_H #include "Define.h" -#include "DatabaseEnvFwd.h" #include #include #include #include +class BaseDatabaseResultValueConverter; + enum class DatabaseFieldTypes : uint8 { Null, + UInt8, Int8, + UInt16, Int16, + UInt32, Int32, + UInt64, Int64, Float, Double, @@ -48,6 +53,7 @@ struct QueryResultFieldMetadata char const* TypeName = nullptr; uint32 Index = 0; DatabaseFieldTypes Type = DatabaseFieldTypes::Null; + BaseDatabaseResultValueConverter const* Converter = nullptr; }; /** @@ -118,28 +124,17 @@ class TC_DATABASE_API Field bool IsNull() const { - return data.value == nullptr; + return _value == nullptr; } - protected: - struct - { - char const* value; // Actual data in memory - uint32 length; // Length - bool raw; // Raw bytes? (Prepared statement or ad hoc) - } data; - - void SetByteValue(char const* newValue, uint32 length); - void SetStructuredValue(char const* newValue, uint32 length); - - bool IsType(DatabaseFieldTypes type) const; + private: + char const* _value; // Actual data in memory + uint32 _length; // Length - bool IsNumeric() const; + void SetValue(char const* newValue, uint32 length); - private: - QueryResultFieldMetadata const* meta; - void LogWrongType(char const* getter) const; - void SetMetadata(QueryResultFieldMetadata const* fieldMeta); + QueryResultFieldMetadata const* _meta; + void SetMetadata(QueryResultFieldMetadata const* meta); void GetBinarySizeChecked(uint8* buf, size_t size) const; }; -- cgit v1.2.3