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:311
 
@ 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