aboutsummaryrefslogtreecommitdiff
path: root/src/server/database
diff options
context:
space:
mode:
Diffstat (limited to 'src/server/database')
-rw-r--r--src/server/database/Database/Field.cpp27
-rw-r--r--src/server/database/Database/Field.h2
-rw-r--r--src/server/database/Database/PreparedStatement.cpp16
-rw-r--r--src/server/database/Database/PreparedStatement.h15
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; }