diff options
author | Shauren <shauren.trinity@gmail.com> | 2023-05-14 16:30:05 +0200 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2023-08-15 22:00:22 +0200 |
commit | 24fc0dcb1ee627cdec5ff5670a85050afc62d281 (patch) | |
tree | b0f7a1a2c6f7959d981703c199b85905bbc43c35 /src/server/database/Database/Field.h | |
parent | a4299c2a4b88d1cbdcea1301a190da6081abf876 (diff) |
Core/DBLayer: Relaxed restrictions on which Field class member function can be used to access column value from "strict match" to "must not truncate"
(cherry picked from commit eadafb0347d606e5e3e660d21227aa15378bdb21)
Diffstat (limited to 'src/server/database/Database/Field.h')
-rw-r--r-- | src/server/database/Database/Field.h | 37 |
1 files changed, 16 insertions, 21 deletions
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 <http://www.gnu.org/licenses/>. */ -#ifndef _FIELD_H -#define _FIELD_H +#ifndef TRINITY_DATABASE_FIELD_H +#define TRINITY_DATABASE_FIELD_H #include "Define.h" -#include "DatabaseEnvFwd.h" #include <array> #include <string> #include <string_view> #include <vector> +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; }; |