From 5da556b9a4094da461a4c88249fb0359172d72d2 Mon Sep 17 00:00:00 2001 From: Shauren Date: Fri, 3 Jan 2025 13:04:19 +0100 Subject: Core/Database: Added std::span based functions to Field and PreparedStatement (cherry picked from commit 27860c3316b7354c6bf17cac82992085d2905934) # Conflicts: # src/server/game/Entities/Player/Player.cpp --- src/server/database/Database/Field.cpp | 27 +++++++++++----------- src/server/database/Database/Field.h | 2 ++ src/server/database/Database/PreparedStatement.cpp | 16 +++++++++---- src/server/database/Database/PreparedStatement.h | 15 ++++-------- 4 files changed, 31 insertions(+), 29 deletions(-) (limited to 'src/server/database/Database') diff --git a/src/server/database/Database/Field.cpp b/src/server/database/Database/Field.cpp index 664090839c0..6045e8dee81 100644 --- a/src/server/database/Database/Field.cpp +++ b/src/server/database/Database/Field.cpp @@ -124,26 +124,20 @@ char const* Field::GetCString() const std::string Field::GetString() const { - if (!_value) - return ""; - - char const* string = GetCString(); - if (!string) - return ""; + std::string result; + if (char const* string = GetCString()) + result.assign(string, _length); - return std::string(string, _length); + return result; } std::string_view Field::GetStringView() const { - if (!_value) - return {}; - - char const* const string = GetCString(); - if (!string) - return {}; + std::string_view result; + if (char const* const string = GetCString()) + result = { string, _length }; - return { string, _length }; + return result; } std::vector Field::GetBinary() const @@ -157,6 +151,11 @@ std::vector Field::GetBinary() const return result; } +std::span Field::GetBinaryView() const +{ + return { reinterpret_cast(_value), _length }; +} + void Field::GetBinarySizeChecked(uint8* buf, size_t length) const { ASSERT(_value && (_length == length), "Expected %zu-byte binary blob, got %sdata (%u bytes) instead", length, _value ? "" : "no ", _length); diff --git a/src/server/database/Database/Field.h b/src/server/database/Database/Field.h index 1d28d8cf713..b1cbb2a8da7 100644 --- a/src/server/database/Database/Field.h +++ b/src/server/database/Database/Field.h @@ -21,6 +21,7 @@ #include "Define.h" #include "Duration.h" #include +#include #include #include #include @@ -117,6 +118,7 @@ class TC_DATABASE_API Field std::string GetString() const; std::string_view GetStringView() const; std::vector GetBinary() const; + std::span GetBinaryView() const; template std::array GetBinary() const { diff --git a/src/server/database/Database/PreparedStatement.cpp b/src/server/database/Database/PreparedStatement.cpp index 684d3ee4eb6..c0c14beec7b 100644 --- a/src/server/database/Database/PreparedStatement.cpp +++ b/src/server/database/Database/PreparedStatement.cpp @@ -100,22 +100,28 @@ void PreparedStatementBase::setDate(uint8 index, SystemTimePoint value) statement_data[index].data = value; } -void PreparedStatementBase::setString(uint8 index, std::string const& value) +void PreparedStatementBase::setString(uint8 index, std::string&& value) { ASSERT(index < statement_data.size()); - statement_data[index].data = value; + statement_data[index].data = std::move(value); } -void PreparedStatementBase::setStringView(uint8 index, std::string_view value) +void PreparedStatementBase::setString(uint8 index, std::string_view value) { ASSERT(index < statement_data.size()); statement_data[index].data.emplace(value); } -void PreparedStatementBase::setBinary(uint8 index, std::vector const& value) +void PreparedStatementBase::setBinary(uint8 index, std::vector&& value) { ASSERT(index < statement_data.size()); - statement_data[index].data = value; + statement_data[index].data = std::move(value); +} + +void PreparedStatementBase::setBinary(uint8 index, std::span value) +{ + ASSERT(index < statement_data.size()); + statement_data[index].data.emplace>(value.begin(), value.end()); } void PreparedStatementBase::setNull(uint8 index) diff --git a/src/server/database/Database/PreparedStatement.h b/src/server/database/Database/PreparedStatement.h index 88151ef193b..d34eaa9d23f 100644 --- a/src/server/database/Database/PreparedStatement.h +++ b/src/server/database/Database/PreparedStatement.h @@ -21,7 +21,7 @@ #include "DatabaseEnvFwd.h" #include "Define.h" #include "Duration.h" -#include +#include #include #include #include @@ -82,15 +82,10 @@ class TC_DATABASE_API PreparedStatementBase void setFloat(uint8 index, float value); void setDouble(uint8 index, double value); void setDate(uint8 index, SystemTimePoint value); - void setString(uint8 index, std::string const& value); - void setStringView(uint8 index, std::string_view value); - void setBinary(uint8 index, std::vector const& value); - template - void setBinary(const uint8 index, std::array const& value) - { - std::vector vec(value.begin(), value.end()); - setBinary(index, vec); - } + void setString(uint8 index, std::string&& value); + void setString(uint8 index, std::string_view value); + void setBinary(uint8 index, std::vector&& value); + void setBinary(uint8 index, std::span value); uint32 GetIndex() const { return m_index; } std::vector const& GetParameters() const { return statement_data; } -- cgit v1.2.3