TrinityCore
Loading...
Searching...
No Matches
FieldValueConverters.h
Go to the documentation of this file.
1/*
2 * This file is part of the TrinityCore Project. See AUTHORS file for Copyright information
3 *
4 * This program is free software; you can redistribute it and/or modify it
5 * under the terms of the GNU General Public License as published by the
6 * Free Software Foundation; either version 2 of the License, or (at your
7 * option) any later version.
8 *
9 * This program is distributed in the hope that it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
12 * more details.
13 *
14 * You should have received a copy of the GNU General Public License along
15 * with this program. If not, see <http://www.gnu.org/licenses/>.
16 */
17
18#ifndef TRINITY_FIELD_VALUE_CONVERTERS_H
19#define TRINITY_FIELD_VALUE_CONVERTERS_H
20
21#include "FieldValueConverter.h"
22#include "StringConvert.h"
23
24// converts string value returned from query to type specified in column metadata
25template<typename DatabaseType>
27{
28public:
29 static DatabaseType GetDatabaseValue(char const* data, uint32 size)
30 {
31 return Trinity::StringTo<DatabaseType>({ data, size }).template value_or<DatabaseType>(0);
32 }
33
34 static char const* GetStringValue(char const* data)
35 {
36 return data;
37 }
38};
39
40// converts binary value returned from query to type specified in column metadata
41template<typename DatabaseType>
43{
44public:
45 static DatabaseType GetDatabaseValue(char const* data, uint32 /*size*/)
46 {
47 return *reinterpret_cast<DatabaseType const*>(data);
48 }
49
50 static char const* GetStringValue(char const* /*data*/)
51 {
52 return nullptr;
53 }
54};
55
56// converts column value from type specified in column metadata to type requested by Field::Get* function
57template<typename DatabaseType, template<typename> typename ToDatabaseTypeConverter>
59{
60public:
61 template<typename T>
62 static T GetNumericValue(char const* data, uint32 size, QueryResultFieldMetadata const* meta, char const* func)
63 {
64 DatabaseType source = ToDatabaseTypeConverter<DatabaseType>::GetDatabaseValue(data, size);
65 T result = static_cast<T>(source);
66 if (static_cast<DatabaseType>(result) != source)
67 {
68 LogTruncation(func, meta);
69 return T();
70 }
71 return result;
72 }
73
74 uint8 GetUInt8(char const* data, uint32 size, QueryResultFieldMetadata const* meta) const override { return GetNumericValue<uint8>(data, size, meta, "Field::GetUInt8"); }
75 int8 GetInt8(char const* data, uint32 size, QueryResultFieldMetadata const* meta) const override { return GetNumericValue<int8>(data, size, meta, "Field::GetInt8"); }
76 uint16 GetUInt16(char const* data, uint32 size, QueryResultFieldMetadata const* meta) const override { return GetNumericValue<uint16>(data, size, meta, "Field::GetUInt16"); }
77 int16 GetInt16(char const* data, uint32 size, QueryResultFieldMetadata const* meta) const override { return GetNumericValue<int16>(data, size, meta, "Field::GetInt16"); }
78 uint32 GetUInt32(char const* data, uint32 size, QueryResultFieldMetadata const* meta) const override { return GetNumericValue<uint32>(data, size, meta, "Field::GetUInt32"); }
79 int32 GetInt32(char const* data, uint32 size, QueryResultFieldMetadata const* meta) const override { return GetNumericValue<int32>(data, size, meta, "Field::GetInt32"); }
80 uint64 GetUInt64(char const* data, uint32 size, QueryResultFieldMetadata const* meta) const override { return GetNumericValue<uint64>(data, size, meta, "Field::GetUInt64"); }
81 int64 GetInt64(char const* data, uint32 size, QueryResultFieldMetadata const* meta) const override { return GetNumericValue<int64>(data, size, meta, "Field::GetInt64"); }
82 float GetFloat(char const* data, uint32 size, QueryResultFieldMetadata const* meta) const override { return GetNumericValue<float>(data, size, meta, "Field::GetFloat"); }
83 double GetDouble(char const* data, uint32 size, QueryResultFieldMetadata const* meta) const override { return GetNumericValue<double>(data, size, meta, "Field::GetDouble"); }
84 SystemTimePoint GetDate(char const* /*data*/, uint32 /*size*/, QueryResultFieldMetadata const* meta) const override { LogTruncation("Field::GetDate", meta); return SystemTimePoint::min(); }
85 char const* GetCString(char const* data, uint32 /*size*/, QueryResultFieldMetadata const* meta) const override
86 {
87 char const* result = ToDatabaseTypeConverter<DatabaseType>::GetStringValue(data);
88 if (data && !result)
89 LogTruncation("Field::GetCString", meta);
90 return result;
91 }
92};
93
94template<>
95class PrimitiveResultValueConverter<char const*, std::type_identity_t> : public BaseDatabaseResultValueConverter
96{
97public:
98 uint8 GetUInt8(char const* /*data*/, uint32 /*size*/, QueryResultFieldMetadata const* meta) const override { LogTruncation("Field::GetUInt8", meta); return 0; }
99 int8 GetInt8(char const* /*data*/, uint32 /*size*/, QueryResultFieldMetadata const* meta) const override { LogTruncation("Field::GetInt8", meta); return 0; }
100 uint16 GetUInt16(char const* /*data*/, uint32 /*size*/, QueryResultFieldMetadata const* meta) const override { LogTruncation("Field::GetUInt16", meta); return 0; }
101 int16 GetInt16(char const* /*data*/, uint32 /*size*/, QueryResultFieldMetadata const* meta) const override { LogTruncation("Field::GetInt16", meta); return 0; }
102 uint32 GetUInt32(char const* /*data*/, uint32 /*size*/, QueryResultFieldMetadata const* meta) const override { LogTruncation("Field::GetUInt32", meta); return 0; }
103 int32 GetInt32(char const* /*data*/, uint32 /*size*/, QueryResultFieldMetadata const* meta) const override { LogTruncation("Field::GetInt32", meta); return 0; }
104 uint64 GetUInt64(char const* /*data*/, uint32 /*size*/, QueryResultFieldMetadata const* meta) const override { LogTruncation("Field::GetUInt64", meta); return 0; }
105 int64 GetInt64(char const* /*data*/, uint32 /*size*/, QueryResultFieldMetadata const* meta) const override { LogTruncation("Field::GetInt64", meta); return 0; }
106 float GetFloat(char const* /*data*/, uint32 /*size*/, QueryResultFieldMetadata const* meta) const override { LogTruncation("Field::GetFloat", meta); return 0.0f; }
107 double GetDouble(char const* /*data*/, uint32 /*size*/, QueryResultFieldMetadata const* meta) const override { LogTruncation("Field::GetDouble", meta); return 0.0; }
108 SystemTimePoint GetDate(char const* /*data*/, uint32 /*size*/, QueryResultFieldMetadata const* meta) const override { LogTruncation("Field::GetDate", meta); return SystemTimePoint::min(); }
109 char const* GetCString(char const* data, uint32 /*size*/, QueryResultFieldMetadata const* /*meta*/) const override { return data; }
110};
111
113
115{
116public:
117 uint8 GetUInt8(char const* /*data*/, uint32 /*size*/, QueryResultFieldMetadata const* meta) const override { LogTruncation("Field::GetUInt8", meta); return 0; }
118 int8 GetInt8(char const* /*data*/, uint32 /*size*/, QueryResultFieldMetadata const* meta) const override { LogTruncation("Field::GetInt8", meta); return 0; }
119 uint16 GetUInt16(char const* /*data*/, uint32 /*size*/, QueryResultFieldMetadata const* meta) const override { LogTruncation("Field::GetUInt16", meta); return 0; }
120 int16 GetInt16(char const* /*data*/, uint32 /*size*/, QueryResultFieldMetadata const* meta) const override { LogTruncation("Field::GetInt16", meta); return 0; }
121 uint32 GetUInt32(char const* /*data*/, uint32 /*size*/, QueryResultFieldMetadata const* meta) const override { LogTruncation("Field::GetUInt32", meta); return 0; }
122 int32 GetInt32(char const* /*data*/, uint32 /*size*/, QueryResultFieldMetadata const* meta) const override { LogTruncation("Field::GetInt32", meta); return 0; }
123 uint64 GetUInt64(char const* /*data*/, uint32 /*size*/, QueryResultFieldMetadata const* meta) const override { LogTruncation("Field::GetUInt64", meta); return 0; }
124 int64 GetInt64(char const* /*data*/, uint32 /*size*/, QueryResultFieldMetadata const* meta) const override { LogTruncation("Field::GetInt64", meta); return 0; }
125 float GetFloat(char const* /*data*/, uint32 /*size*/, QueryResultFieldMetadata const* meta) const override { LogTruncation("Field::GetFloat", meta); return 0.0f; }
126 double GetDouble(char const* /*data*/, uint32 /*size*/, QueryResultFieldMetadata const* meta) const override { LogTruncation("Field::GetDouble", meta); return 0.0; }
127 SystemTimePoint GetDate(char const* /*data*/, uint32 /*size*/, QueryResultFieldMetadata const* meta) const override { LogTruncation("Field::GetDate", meta); return SystemTimePoint::min(); }
128 char const* GetCString(char const* /*data*/, uint32 /*size*/, QueryResultFieldMetadata const* meta) const override { LogTruncation("Field::GetCString", meta); return nullptr; }
129};
130
131#endif // TRINITY_FIELD_VALUE_CONVERTERS_H
uint8_t uint8
Definition Define.h:156
int64_t int64
Definition Define.h:149
int16_t int16
Definition Define.h:151
int8_t int8
Definition Define.h:152
int32_t int32
Definition Define.h:150
uint64_t uint64
Definition Define.h:153
uint16_t uint16
Definition Define.h:155
uint32_t uint32
Definition Define.h:154
std::chrono::system_clock::time_point SystemTimePoint
Definition Duration.h:41
static void LogTruncation(char const *getter, QueryResultFieldMetadata const *meta)
static char const * GetStringValue(char const *)
static DatabaseType GetDatabaseValue(char const *data, uint32)
static DatabaseType GetDatabaseValue(char const *data, uint32 size)
static char const * GetStringValue(char const *data)
float GetFloat(char const *, uint32, QueryResultFieldMetadata const *meta) const override
int8 GetInt8(char const *, uint32, QueryResultFieldMetadata const *meta) const override
int64 GetInt64(char const *, uint32, QueryResultFieldMetadata const *meta) const override
uint32 GetUInt32(char const *, uint32, QueryResultFieldMetadata const *meta) const override
SystemTimePoint GetDate(char const *, uint32, QueryResultFieldMetadata const *meta) const override
char const * GetCString(char const *, uint32, QueryResultFieldMetadata const *meta) const override
int16 GetInt16(char const *, uint32, QueryResultFieldMetadata const *meta) const override
uint64 GetUInt64(char const *, uint32, QueryResultFieldMetadata const *meta) const override
uint16 GetUInt16(char const *, uint32, QueryResultFieldMetadata const *meta) const override
double GetDouble(char const *, uint32, QueryResultFieldMetadata const *meta) const override
uint8 GetUInt8(char const *, uint32, QueryResultFieldMetadata const *meta) const override
int32 GetInt32(char const *, uint32, QueryResultFieldMetadata const *meta) const override
float GetFloat(char const *, uint32, QueryResultFieldMetadata const *meta) const override
uint16 GetUInt16(char const *, uint32, QueryResultFieldMetadata const *meta) const override
int64 GetInt64(char const *, uint32, QueryResultFieldMetadata const *meta) const override
uint32 GetUInt32(char const *, uint32, QueryResultFieldMetadata const *meta) const override
int32 GetInt32(char const *, uint32, QueryResultFieldMetadata const *meta) const override
uint8 GetUInt8(char const *, uint32, QueryResultFieldMetadata const *meta) const override
int8 GetInt8(char const *, uint32, QueryResultFieldMetadata const *meta) const override
uint64 GetUInt64(char const *, uint32, QueryResultFieldMetadata const *meta) const override
int16 GetInt16(char const *, uint32, QueryResultFieldMetadata const *meta) const override
double GetDouble(char const *, uint32, QueryResultFieldMetadata const *meta) const override
SystemTimePoint GetDate(char const *, uint32, QueryResultFieldMetadata const *meta) const override
char const * GetCString(char const *data, uint32, QueryResultFieldMetadata const *) const override
double GetDouble(char const *data, uint32 size, QueryResultFieldMetadata const *meta) const override
float GetFloat(char const *data, uint32 size, QueryResultFieldMetadata const *meta) const override
int64 GetInt64(char const *data, uint32 size, QueryResultFieldMetadata const *meta) const override
int32 GetInt32(char const *data, uint32 size, QueryResultFieldMetadata const *meta) const override
int16 GetInt16(char const *data, uint32 size, QueryResultFieldMetadata const *meta) const override
static T GetNumericValue(char const *data, uint32 size, QueryResultFieldMetadata const *meta, char const *func)
SystemTimePoint GetDate(char const *, uint32, QueryResultFieldMetadata const *meta) const override
uint32 GetUInt32(char const *data, uint32 size, QueryResultFieldMetadata const *meta) const override
uint8 GetUInt8(char const *data, uint32 size, QueryResultFieldMetadata const *meta) const override
int8 GetInt8(char const *data, uint32 size, QueryResultFieldMetadata const *meta) const override
uint16 GetUInt16(char const *data, uint32 size, QueryResultFieldMetadata const *meta) const override
uint64 GetUInt64(char const *data, uint32 size, QueryResultFieldMetadata const *meta) const override
char const * GetCString(char const *data, uint32, QueryResultFieldMetadata const *meta) const override