diff options
author | Shauren <shauren.trinity@gmail.com> | 2025-01-03 13:04:19 +0100 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2025-01-03 13:04:19 +0100 |
commit | 27860c3316b7354c6bf17cac82992085d2905934 (patch) | |
tree | a0c87fdb392b2d3ce2af9e8788e1081421740975 /src/server/database | |
parent | 000e4e99702d703ada9b2798f579534b547e35a6 (diff) |
Core/Database: Added std::span based functions to Field and PreparedStatement
Diffstat (limited to 'src/server/database')
-rw-r--r-- | src/server/database/Database/Field.cpp | 27 | ||||
-rw-r--r-- | src/server/database/Database/Field.h | 2 | ||||
-rw-r--r-- | src/server/database/Database/PreparedStatement.cpp | 16 | ||||
-rw-r--r-- | src/server/database/Database/PreparedStatement.h | 15 |
4 files changed, 31 insertions, 29 deletions
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<uint8> Field::GetBinary() const @@ -157,6 +151,11 @@ std::vector<uint8> Field::GetBinary() const return result; } +std::span<uint8 const> Field::GetBinaryView() const +{ + return { reinterpret_cast<uint8 const*>(_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 <array> +#include <span> #include <string> #include <string_view> #include <vector> @@ -117,6 +118,7 @@ class TC_DATABASE_API Field std::string GetString() const; std::string_view GetStringView() const; std::vector<uint8> GetBinary() const; + std::span<uint8 const> GetBinaryView() const; template <size_t S> std::array<uint8, S> 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<std::string>(value); } -void PreparedStatementBase::setBinary(uint8 index, std::vector<uint8> const& value) +void PreparedStatementBase::setBinary(uint8 index, std::vector<uint8>&& 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<uint8 const> value) +{ + ASSERT(index < statement_data.size()); + statement_data[index].data.emplace<std::vector<uint8>>(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 <array> +#include <span> #include <string> #include <variant> #include <vector> @@ -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<uint8> const& value); - template <size_t Size> - void setBinary(const uint8 index, std::array<uint8, Size> const& value) - { - std::vector<uint8> 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<uint8>&& value); + void setBinary(uint8 index, std::span<uint8 const> value); uint32 GetIndex() const { return m_index; } std::vector<PreparedStatementData> const& GetParameters() const { return statement_data; } |