mirror of
https://github.com/mod-playerbots/azerothcore-wotlk.git
synced 2026-01-19 03:45:43 +00:00
feat(Core/DBLayer): replace char const* to std::string_view (#10211)
* feat(Core/DBLayer): replace `char const*` to `std::string_view` * CString * 1 * chore(Core/Misc): code cleanup * cl * db fix * fmt style sql * to fmt * py * del old * 1 * 2 * 3 * 1 * 1
This commit is contained in:
@@ -20,11 +20,26 @@
|
||||
|
||||
#include "DatabaseEnvFwd.h"
|
||||
#include "Define.h"
|
||||
#include "Duration.h"
|
||||
#include <array>
|
||||
#include <string>
|
||||
#include <string_view>
|
||||
#include <vector>
|
||||
|
||||
namespace Acore::Types
|
||||
{
|
||||
template <typename T>
|
||||
using is_chrono_v = std::enable_if_t<std::is_same_v<Milliseconds, T>
|
||||
|| std::is_same_v<Seconds, T>
|
||||
|| std::is_same_v<Minutes, T>
|
||||
|| std::is_same_v<Hours, T>
|
||||
|| std::is_same_v<Days, T>
|
||||
|| std::is_same_v<Weeks, T>
|
||||
|| std::is_same_v<Years, T>
|
||||
|| std::is_same_v<Months, T>, T>;
|
||||
}
|
||||
|
||||
using Binary = std::vector<uint8>;
|
||||
|
||||
enum class DatabaseFieldTypes : uint8
|
||||
{
|
||||
Null,
|
||||
@@ -41,11 +56,11 @@ enum class DatabaseFieldTypes : uint8
|
||||
|
||||
struct QueryResultFieldMetadata
|
||||
{
|
||||
char const* TableName = nullptr;
|
||||
char const* TableAlias = nullptr;
|
||||
char const* Name = nullptr;
|
||||
char const* Alias = nullptr;
|
||||
char const* TypeName = nullptr;
|
||||
std::string TableName{};
|
||||
std::string TableAlias{};
|
||||
std::string Name{};
|
||||
std::string Alias{};
|
||||
std::string TypeName{};
|
||||
uint32 Index = 0;
|
||||
DatabaseFieldTypes Type = DatabaseFieldTypes::Null;
|
||||
};
|
||||
@@ -57,20 +72,20 @@ struct QueryResultFieldMetadata
|
||||
|
||||
Guideline on field type matching:
|
||||
|
||||
| MySQL type | method to use |
|
||||
|------------------------|----------------------------------------|
|
||||
| TINYINT | GetBool, GetInt8, GetUInt8 |
|
||||
| SMALLINT | GetInt16, GetUInt16 |
|
||||
| MEDIUMINT, INT | GetInt32, GetUInt32 |
|
||||
| BIGINT | GetInt64, GetUInt64 |
|
||||
| FLOAT | GetFloat |
|
||||
| DOUBLE, DECIMAL | GetDouble |
|
||||
| CHAR, VARCHAR, | GetCString, GetString |
|
||||
| TINYTEXT, MEDIUMTEXT, | GetCString, GetString |
|
||||
| TEXT, LONGTEXT | GetCString, GetString |
|
||||
| TINYBLOB, MEDIUMBLOB, | GetBinary, GetString |
|
||||
| BLOB, LONGBLOB | GetBinary, GetString |
|
||||
| BINARY, VARBINARY | GetBinary |
|
||||
| MySQL type | method to use |
|
||||
|------------------------|-----------------------------------------|
|
||||
| TINYINT | Get<bool>, Get<int8>, Get<uint8> |
|
||||
| SMALLINT | Get<int16>, Get<uint16> |
|
||||
| MEDIUMINT, INT | Get<int32>, Get<uint32> |
|
||||
| BIGINT | Get<int64>, Get<uint64> |
|
||||
| FLOAT | Get<float> |
|
||||
| DOUBLE, DECIMAL | Get<double> |
|
||||
| CHAR, VARCHAR, | Get<std::string>, Get<std::string_view> |
|
||||
| TINYTEXT, MEDIUMTEXT, | Get<std::string>, Get<std::string_view> |
|
||||
| TEXT, LONGTEXT | Get<std::string>, Get<std::string_view> |
|
||||
| TINYBLOB, MEDIUMBLOB, | Get<Binary>, Get<std::string> |
|
||||
| BLOB, LONGBLOB | Get<Binary>, Get<std::string> |
|
||||
| BINARY, VARBINARY | Get<Binary> |
|
||||
|
||||
Return types of aggregate functions:
|
||||
|
||||
@@ -87,39 +102,49 @@ friend class PreparedResultSet;
|
||||
|
||||
public:
|
||||
Field();
|
||||
~Field();
|
||||
~Field() = default;
|
||||
|
||||
[[nodiscard]] bool GetBool() const // Wrapper, actually gets integer
|
||||
[[nodiscard]] inline bool IsNull() const
|
||||
{
|
||||
return GetUInt8() == 1 ? true : false;
|
||||
return data.value == nullptr;
|
||||
}
|
||||
|
||||
[[nodiscard]] uint8 GetUInt8() const;
|
||||
[[nodiscard]] int8 GetInt8() const;
|
||||
[[nodiscard]] uint16 GetUInt16() const;
|
||||
[[nodiscard]] int16 GetInt16() const;
|
||||
[[nodiscard]] uint32 GetUInt32() const;
|
||||
[[nodiscard]] int32 GetInt32() const;
|
||||
[[nodiscard]] uint64 GetUInt64() const;
|
||||
[[nodiscard]] int64 GetInt64() const;
|
||||
[[nodiscard]] float GetFloat() const;
|
||||
[[nodiscard]] double GetDouble() const;
|
||||
[[nodiscard]] char const* GetCString() const;
|
||||
[[nodiscard]] std::string GetString() const;
|
||||
[[nodiscard]] std::string_view GetStringView() const;
|
||||
[[nodiscard]] std::vector<uint8> GetBinary() const;
|
||||
|
||||
template <size_t S>
|
||||
std::array<uint8, S> GetBinary() const
|
||||
template<typename T>
|
||||
inline std::enable_if_t<std::is_arithmetic_v<T>, T> Get() const
|
||||
{
|
||||
std::array<uint8, S> buf;
|
||||
return GetData<T>();
|
||||
}
|
||||
|
||||
template<typename T>
|
||||
inline std::enable_if_t<std::is_same_v<std::string, T>, T> Get() const
|
||||
{
|
||||
return GetDataString();
|
||||
}
|
||||
|
||||
template<typename T>
|
||||
inline std::enable_if_t<std::is_same_v<std::string_view, T>, T> Get() const
|
||||
{
|
||||
return GetDataStringView();
|
||||
}
|
||||
|
||||
template<typename T>
|
||||
inline std::enable_if_t<std::is_same_v<Binary, T>, T> Get() const
|
||||
{
|
||||
return GetDataBinary();
|
||||
}
|
||||
|
||||
template <typename T, size_t S>
|
||||
inline std::enable_if_t<std::is_same_v<Binary, T>, std::array<uint8, S>> Get() const
|
||||
{
|
||||
std::array<uint8, S> buf = {};
|
||||
GetBinarySizeChecked(buf.data(), S);
|
||||
return buf;
|
||||
}
|
||||
|
||||
[[nodiscard]] bool IsNull() const
|
||||
template<typename T>
|
||||
inline Acore::Types::is_chrono_v<T> Get(bool convertToUin32 = true) const
|
||||
{
|
||||
return data.value == nullptr;
|
||||
return convertToUin32 ? T(GetData<uint32>()) : T(GetData<uint64>());
|
||||
}
|
||||
|
||||
DatabaseFieldTypes GetType() { return meta->Type; }
|
||||
@@ -138,8 +163,15 @@ protected:
|
||||
[[nodiscard]] bool IsNumeric() const;
|
||||
|
||||
private:
|
||||
template<typename T>
|
||||
T GetData() const;
|
||||
|
||||
std::string GetDataString() const;
|
||||
std::string_view GetDataStringView() const;
|
||||
Binary GetDataBinary() const;
|
||||
|
||||
QueryResultFieldMetadata const* meta;
|
||||
void LogWrongType(char const* getter) const;
|
||||
void LogWrongType(std::string_view getter, std::string_view typeName) const;
|
||||
void SetMetadata(QueryResultFieldMetadata const* fieldMeta);
|
||||
void GetBinarySizeChecked(uint8* buf, size_t size) const;
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user