26#ifndef ROUTER_SRC_REST_MRS_SRC_HELPER_MYSQL_ROW_H_
27#define ROUTER_SRC_REST_MRS_SRC_HELPER_MYSQL_ROW_H_
75 "Number of consumed fields should be equal to number or provided "
83 template <
typename FieldType>
86 "Index out of boundary.");
92 template <
typename FieldType>
93 void unserialize(FieldType *out_field, FieldType value_default) {
95 "Index out of boundary.");
101 *out_field = value_default;
104 template <
typename FieldType,
typename Converter>
106 const Converter &converter) {
108 "Index out of boundary.");
111 converter(out_field, in_value);
114 template <
typename FieldType,
typename Converter>
116 const Converter &converter) {
118 "Index out of boundary.");
125 converter(&v, in_value);
130 template <
typename FieldType,
typename Converter>
132 const Converter &converter) {
134 "Index out of boundary.");
141 converter(&
r, in_value);
142 *out_field = std::move(
r);
146 template <
typename FieldType>
149 "Index out of boundary.");
157 *out_field = std::move(out_value);
161 template <
typename FieldType>
164 "Index out of boundary.");
172 *out_field = std::move(out_value);
187 template <
typename T>
189 unsigned field_index,
T *out_value,
const char *in_value) {
190 auto ptr =
reinterpret_cast<std::underlying_type_t<T> *
>(out_value);
191 convert(field_index, ptr, in_value);
194 void convert(
unsigned field_index,
bool *out_value,
const char *in_value) {
203 *out_value = *
reinterpret_cast<const uint8_t *
>(in_value) != 0;
209 static std::map<std::string, bool> conversion{
210 {
"false",
false}, {
"FALSE",
false}, {
"true",
true}, {
"TRUE",
true}};
212 *out_value = conversion[in_value];
216 *out_value = atoi(in_value);
219 void convert([[maybe_unused]]
unsigned field_index, std::string *out_value,
220 const char *in_value) {
222 *out_value = in_value;
227 void convert([[maybe_unused]]
unsigned field_index, uint32_t *out_value,
228 const char *in_value) {
230 *out_value = std::stoul(in_value);
235 void convert([[maybe_unused]]
unsigned field_index, int32_t *out_value,
236 const char *in_value) {
238 *out_value = atoi(in_value);
243 void convert([[maybe_unused]]
unsigned field_index, uint64_t *out_value,
244 const char *in_value) {
246 *out_value = strtoull(in_value, &out_value_end, 10);
249 void convert([[maybe_unused]]
unsigned field_index,
250 std::vector<uint64_t> *out_value,
const char *v) {
251 char *endptr =
const_cast<char *
>(v);
252 while (v && *v != 0) {
253 out_value->push_back(strtoull(v, &endptr, 10));
255 while (endptr && !(isalnum(*endptr) || *endptr ==
'-') && *endptr != 0)
261 void convert([[maybe_unused]]
unsigned field_index,
Definition: mysql_time.h:38
void from_string(const std::string &text_time)
Definition: mysql_time.h:44
Definition: mysql_row.h:45
void convert(unsigned field_index, uint64_t *out_value, const char *in_value)
Definition: mysql_row.h:243
void unserialize_with_converter(FieldType *out_field, const Converter &converter)
Definition: mysql_row.h:105
Verification
Definition: mysql_row.h:48
@ kEndCallRequired
Definition: mysql_row.h:52
@ kCheckAtDestructor
Definition: mysql_row.h:50
~MySQLRow()
Definition: mysql_row.h:63
bool unserialize_ended_
Definition: mysql_row.h:271
unsigned no_of_fields_
Definition: mysql_row.h:270
std::enable_if< std::is_enum< T >::value >::type convert(unsigned field_index, T *out_value, const char *in_value)
Definition: mysql_row.h:188
void unserialize_with_converter(std::optional< FieldType > *out_field, const Converter &converter)
Definition: mysql_row.h:115
uint32_t field_index_
Definition: mysql_row.h:267
void unserialize(helper::Optional< FieldType > *out_field)
Definition: mysql_row.h:162
void end()
Definition: mysql_row.h:79
void convert(unsigned field_index, bool *out_value, const char *in_value)
Definition: mysql_row.h:194
void convert(unsigned field_index, std::string *out_value, const char *in_value)
Definition: mysql_row.h:219
void unserialize(FieldType *out_field)
Definition: mysql_row.h:84
void convert(unsigned field_index, int32_t *out_value, const char *in_value)
Definition: mysql_row.h:235
MySQLRow(const ResultRow &row, MYSQL_FIELD *fields, unsigned number, Verification must_call_end=kCheckAtDestructor)
Definition: mysql_row.h:56
void unserialize_with_converter(helper::Optional< FieldType > *out_field, const Converter &converter)
Definition: mysql_row.h:131
const ResultRow & row_
Definition: mysql_row.h:268
void unserialize(std::optional< FieldType > *out_field)
Definition: mysql_row.h:147
void convert(unsigned field_index, uint32_t *out_value, const char *in_value)
Definition: mysql_row.h:227
void unserialize(FieldType *out_field, FieldType value_default)
Definition: mysql_row.h:93
void skip(uint32_t to_skip=1)
Definition: mysql_row.h:81
void convert(unsigned field_index, helper::DateTime *out_value, const char *in_value)
Definition: mysql_row.h:261
void convert(unsigned field_index, std::vector< uint64_t > *out_value, const char *v)
Definition: mysql_row.h:249
static void set_from_string(std::set< std::string > *out, const char *in)
Definition: mysql_row.h:176
MYSQL_FIELD * fields_
Definition: mysql_row.h:269
Lightweight implementation of optional.
Definition: optional.h:39
void reset()
Definition: optional.h:79
Definition: mysql_session.h:310
@ MYSQL_TYPE_BIT
Definition: field_types.h:72
#define T
Definition: jit_executor_value.cc:373
ValueType value(const std::optional< ValueType > &v)
Definition: gtid.h:83
bool isalpha(const char &ch)
Definition: parsing_helpers.h:37
HARNESS_EXPORT std::vector< std::string > split_string(const std::string_view &data, const char delimiter, bool allow_empty=true)
Splits a string using a delimiter.
Definition: string_utils.cc:37
const mysql_service_registry_t * r
Definition: pfs_example_plugin_employee.cc:86
required string type
Definition: replication_group_member_actions.proto:34