From d89ebc125c971e4ab093f141f07f3c2aeb920dda Mon Sep 17 00:00:00 2001 From: Shauren Date: Tue, 24 Jun 2025 15:41:25 +0200 Subject: Core/Database: Add new member functions to Field class that return empty optionals if database result was NULL --- src/server/database/Database/Field.h | 67 +++++++++++++++++++++++++----------- 1 file changed, 46 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 b1cbb2a8da7..919f23ee185 100644 --- a/src/server/database/Database/Field.h +++ b/src/server/database/Database/Field.h @@ -20,6 +20,7 @@ #include "Define.h" #include "Duration.h" +#include "Optional.h" #include #include #include @@ -98,40 +99,64 @@ class TC_DATABASE_API Field Field(); ~Field(); - bool GetBool() const // Wrapper, actually gets integer + bool GetBool() const noexcept // Wrapper, actually gets integer { - return GetUInt8() == 1 ? true : false; + return GetUInt8() != 0; } - uint8 GetUInt8() const; - int8 GetInt8() const; - uint16 GetUInt16() const; - int16 GetInt16() const; - uint32 GetUInt32() const; - int32 GetInt32() const; - uint64 GetUInt64() const; - int64 GetInt64() const; - float GetFloat() const; - double GetDouble() const; - SystemTimePoint GetDate() const; - char const* GetCString() const; - std::string GetString() const; - std::string_view GetStringView() const; - std::vector GetBinary() const; - std::span GetBinaryView() const; + uint8 GetUInt8() const noexcept; + int8 GetInt8() const noexcept; + uint16 GetUInt16() const noexcept; + int16 GetInt16() const noexcept; + uint32 GetUInt32() const noexcept; + int32 GetInt32() const noexcept; + uint64 GetUInt64() const noexcept; + int64 GetInt64() const noexcept; + float GetFloat() const noexcept; + double GetDouble() const noexcept; + SystemTimePoint GetDate() const noexcept; + char const* GetCString() const noexcept; + std::string GetString() const noexcept; + std::string_view GetStringView() const noexcept; + std::vector GetBinary() const noexcept; + std::span GetBinaryView() const noexcept; template - std::array GetBinary() const + std::array GetBinary() const noexcept { std::array buf; GetBinarySizeChecked(buf.data(), S); return buf; } - bool IsNull() const + bool IsNull() const noexcept { return _value == nullptr; } + Optional GetUInt8OrNull() const noexcept; + Optional GetInt8OrNull() const noexcept; + Optional GetUInt16OrNull() const noexcept; + Optional GetInt16OrNull() const noexcept; + Optional GetUInt32OrNull() const noexcept; + Optional GetInt32OrNull() const noexcept; + Optional GetUInt64OrNull() const noexcept; + Optional GetInt64OrNull() const noexcept; + Optional GetFloatOrNull() const noexcept; + Optional GetDoubleOrNull() const noexcept; + Optional GetDateOrNull() const noexcept; + Optional GetStringOrNull() const noexcept; + Optional GetStringViewOrNull() const noexcept; + Optional> GetBinaryOrNull() const noexcept; + Optional> GetBinaryViewOrNull() const noexcept; + template + Optional> GetBinaryOrNull() const noexcept + { + Optional> buf; + if (!IsNull()) + GetBinarySizeChecked(buf.emplace().data(), S); + return buf; + } + private: char const* _value; // Actual data in memory uint32 _length; // Length @@ -141,7 +166,7 @@ class TC_DATABASE_API Field QueryResultFieldMetadata const* _meta; void SetMetadata(QueryResultFieldMetadata const* meta); - void GetBinarySizeChecked(uint8* buf, size_t size) const; + void GetBinarySizeChecked(uint8* buf, size_t size) const noexcept; }; #endif -- cgit v1.2.3