26#ifndef MYSQL_ROUTER_CLASSIC_PROTOCOL_CODEC_MESSAGE_H_ 
   27#define MYSQL_ROUTER_CLASSIC_PROTOCOL_CODEC_MESSAGE_H_ 
   32#include <system_error>   
   81template <
bool Borrowed>
 
   84          Codec<borrowable::message::server::Greeting<Borrowed>>> {
 
   85  template <
class Accumulator>
 
   87    namespace bw = borrowable::wire;
 
   89    if (v_.protocol_version() == 0x09) {
 
   90      return accu.step(bw::FixedInt<1>(v_.protocol_version()))
 
   91          .step(bw::NulTermString<Borrowed>(v_.version()))
 
   92          .step(bw::FixedInt<4>(v_.connection_id()))
 
   93          .step(bw::NulTermString<Borrowed>(v_.auth_method_data().substr(0, 8)))
 
   96      uint8_t auth_method_data_size{0};
 
   98        auth_method_data_size = v_.auth_method_data().size();
 
  101      accu.step(bw::FixedInt<1>(v_.protocol_version()))
 
  102          .step(bw::NulTermString<Borrowed>(v_.version()))
 
  103          .step(bw::FixedInt<4>(v_.connection_id()))
 
  104          .step(bw::NulTermString<Borrowed>(v_.auth_method_data().substr(0, 8)))
 
  105          .step(bw::FixedInt<2>(v_.capabilities().to_ulong() & 0xffff));
 
  107      if ((v_.capabilities().to_ullong() >= (1 << 16)) ||
 
  108          v_.status_flags().any() || (v_.collation() != 0)) {
 
  109        accu.step(bw::FixedInt<1>(v_.collation()))
 
  110            .step(bw::FixedInt<2>(v_.status_flags().to_ulong()))
 
  112                bw::FixedInt<2>((v_.capabilities().to_ulong() >> 16) & 0xffff))
 
  113            .step(bw::FixedInt<1>(auth_method_data_size))
 
  114            .step(bw::String<Borrowed>(std::string(10, 
'\0')));
 
  115        if (v_.capabilities()
 
  117          accu.step(bw::String<Borrowed>(v_.auth_method_data().substr(8)));
 
  118          if (v_.capabilities()
 
  120            accu.step(bw::NulTermString<Borrowed>(v_.auth_method_name()));
 
  124      return accu.result();
 
  129  using value_type = borrowable::message::server::Greeting<Borrowed>;
 
  141    namespace bw = borrowable::wire;
 
  144    auto protocol_version_res = accu.template step<bw::FixedInt<1>>();
 
  147    if (protocol_version_res->value() != 0x09 &&
 
  148        protocol_version_res->value() != 0x0a) {
 
  152    auto version_res = accu.template step<bw::NulTermString<Borrowed>>();
 
  153    auto connection_id_res = accu.template step<bw::FixedInt<4>>();
 
  154    auto auth_method_data_res =
 
  155        accu.template step<bw::NulTermString<Borrowed>>();
 
  157    if (protocol_version_res->value() == 0x09) {
 
  158      return std::make_pair(
 
  160          value_type(protocol_version_res->value(), version_res->value(),
 
  161                     connection_id_res->value(), auth_method_data_res->value(),
 
  166      auto cap_lower_res = accu.template step<bw::FixedInt<2>>();
 
  171        return std::make_pair(
 
  173            value_type(protocol_version_res->value(), version_res->value(),
 
  174                       connection_id_res->value(),
 
  175                       auth_method_data_res->value(), cap_lower_res->value(),
 
  180      auto collation_res = accu.template step<bw::FixedInt<1>>();
 
  181      auto status_flags_res = accu.template step<bw::FixedInt<2>>();
 
  182      auto cap_hi_res = accu.template step<bw::FixedInt<2>>();
 
  188          cap_lower_res->value() | (cap_hi_res->value() << 16));
 
  190      size_t auth_method_data_len{13};
 
  192        auto auth_method_data_len_res = accu.template step<bw::FixedInt<1>>();
 
  196        if (auth_method_data_len_res->value() < 8) {
 
  199        auth_method_data_len = auth_method_data_len_res->value() - 8;
 
  201        accu.template step<void>(1);  
 
  204      accu.template step<void>(10);  
 
  207          auth_method_data_2_res;
 
  213        auth_method_data_2_res =
 
  214            accu.template step<bw::String<Borrowed>>(auth_method_data_len);
 
  218          auth_method_res = accu.template step<bw::NulTermString<Borrowed>>();
 
  224      return std::make_pair(
 
  227              protocol_version_res->value(), version_res->value(),
 
  228              connection_id_res->value(),
 
  229              auth_method_data_res->value() + auth_method_data_2_res->
value(),
 
  230              capabilities, collation_res->value(), status_flags_res->value(),
 
  231              auth_method_res->
value()));
 
  242template <
bool Borrowed>
 
  245          Codec<borrowable::message::server::AuthMethodSwitch<Borrowed>>> {
 
  246  template <
class Accumulator>
 
  248    namespace bw = borrowable::wire;
 
  250    accu.step(bw::FixedInt<1>(cmd_byte()));
 
  253      accu.step(bw::NulTermString<Borrowed>(v_.auth_method()))
 
  254          .step(bw::String<Borrowed>(v_.auth_method_data()));
 
  257    return accu.result();
 
  261  using value_type = borrowable::message::server::AuthMethodSwitch<Borrowed>;
 
  269  static constexpr uint8_t 
cmd_byte() noexcept { 
return 0xfe; }
 
  282    namespace bw = borrowable::wire;
 
  285    auto cmd_byte_res = accu.template step<bw::FixedInt<1>>();
 
  288    if (cmd_byte_res->value() != cmd_byte()) {
 
  296    auto auth_method_res = accu.template step<bw::NulTermString<Borrowed>>();
 
  297    auto auth_method_data_res = accu.template step<bw::String<Borrowed>>();
 
  301    return std::make_pair(
 
  303        value_type(auth_method_res->value(), auth_method_data_res->value()));
 
  313template <
bool Borrowed>
 
  316          Codec<borrowable::message::server::AuthMethodData<Borrowed>>> {
 
  317  template <
class Accumulator>
 
  319    namespace bw = borrowable::wire;
 
  321    return accu.step(bw::FixedInt<1>(cmd_byte()))
 
  322        .step(bw::String<Borrowed>(v_.auth_method_data()))
 
  327  using value_type = borrowable::message::server::AuthMethodData<Borrowed>;
 
  335  static constexpr uint8_t 
cmd_byte() noexcept { 
return 0x01; }
 
  348    namespace bw = borrowable::wire;
 
  350    auto cmd_byte_res = accu.template step<bw::FixedInt<1>>();
 
  353    if (cmd_byte_res->value() != cmd_byte()) {
 
  356    auto auth_method_data_res = accu.template step<bw::String<Borrowed>>();
 
  371template <
bool Borrowed>
 
  374          Codec<borrowable::message::server::Ok<Borrowed>>> {
 
  375  template <
class Accumulator>
 
  377    namespace bw = borrowable::wire;
 
  379    accu.step(bw::FixedInt<1>(cmd_byte()))
 
  385      accu.step(bw::FixedInt<2>(v_.status_flags().to_ulong()));
 
  387        accu.step(bw::FixedInt<2>(v_.warning_count()));
 
  392    const bool has_session_track_cap =
 
  395    if (!v_.message().empty() || has_session_track_cap) {
 
  396      accu.step(bw::VarString<Borrowed>(v_.message()));
 
  397      if (has_session_track_cap &&
 
  399        accu.step(bw::VarString<Borrowed>(v_.session_changes()));
 
  403    return accu.result();
 
  407  using value_type = borrowable::message::server::Ok<Borrowed>;
 
  415  static constexpr uint8_t 
cmd_byte() noexcept { 
return 0x00; }
 
  444    namespace bw = borrowable::wire;
 
  446    auto cmd_byte_res = accu.template step<bw::FixedInt<1>>();
 
  449    if (cmd_byte_res->value() != cmd_byte()) {
 
  453    auto affected_rows_res = accu.template step<bw::VarInt>();
 
  454    auto last_insert_id_res = accu.template step<bw::VarInt>();
 
  460      status_flags_res = accu.template step<bw::FixedInt<2>>();
 
  462        warning_count_res = accu.template step<bw::FixedInt<2>>();
 
  469    auto message_res = accu.template try_step<bw::VarString<Borrowed>>();
 
  472        if (status_flags_res->
value() &
 
  474          session_changes_res = accu.template step<bw::VarString<Borrowed>>();
 
  484    return std::make_pair(
 
  486        value_type(affected_rows_res->value(), last_insert_id_res->value(),
 
  487                   status_flags_res->
value(), warning_count_res->
value(),
 
  488                   message_res->value(), session_changes_res->
value()));
 
  513template <
bool Borrowed>
 
  516          Codec<borrowable::message::server::Eof<Borrowed>>> {
 
  517  template <
class Accumulator>
 
  519    namespace bw = borrowable::wire;
 
  521    accu.step(bw::FixedInt<1>(cmd_byte()));
 
  523    auto shared_caps = this->caps();
 
  525    if (shared_caps.test(
 
  532        accu.step(bw::FixedInt<2>(v_.status_flags().to_ulong()));
 
  534          accu.step(bw::FixedInt<2>(v_.warning_count()));
 
  539        if (!v_.message().empty() ||
 
  543          accu.step(bw::VarString<Borrowed>(v_.message()));
 
  545            accu.step(bw::VarString<Borrowed>(v_.session_changes()));
 
  549        accu.step(bw::String<Borrowed>(v_.message()));
 
  552      accu.step(bw::FixedInt<2>(v_.warning_count()))
 
  553          .step(bw::FixedInt<2>(v_.status_flags().to_ulong()));
 
  556    return accu.result();
 
  560  using value_type = borrowable::message::server::Eof<Borrowed>;
 
  568  static constexpr uint8_t 
cmd_byte() noexcept { 
return 0xfe; }
 
  602    namespace bw = borrowable::wire;
 
  604    const auto cmd_byte_res = accu.template step<bw::FixedInt<1>>();
 
  607    if (cmd_byte_res->value() != cmd_byte()) {
 
  612      const auto affected_rows_res = accu.template step<bw::VarInt>();
 
  613      const auto last_insert_id_res = accu.template step<bw::VarInt>();
 
  619        status_flags_res = accu.template step<bw::FixedInt<2>>();
 
  621          warning_count_res = accu.template step<bw::FixedInt<2>>();
 
  627          session_state_info_res;
 
  631        const auto var_message_res =
 
  632            accu.template try_step<bw::VarString<Borrowed>>();
 
  633        if (var_message_res) {
 
  635          message_res = var_message_res.
value();
 
  638        if (status_flags_res->
value() &
 
  640          session_state_info_res =
 
  641              accu.template step<bw::VarString<Borrowed>>();
 
  644        message_res = accu.template step<bw::String<Borrowed>>();
 
  649      return std::make_pair(
 
  651          value_type(affected_rows_res->value(), last_insert_id_res->value(),
 
  652                     status_flags_res->
value(), warning_count_res->
value(),
 
  653                     message_res->
value(), session_state_info_res->
value()));
 
  655      const auto warning_count_res = accu.template step<bw::FixedInt<2>>();
 
  656      const auto status_flags_res = accu.template step<bw::FixedInt<2>>();
 
  658      return std::make_pair(
 
  660          value_type(status_flags_res->value(), warning_count_res->value()));
 
  694template <
bool Borrowed>
 
  697          Codec<borrowable::message::server::Error<Borrowed>>> {
 
  698  template <
class Accumulator>
 
  700    namespace bw = borrowable::wire;
 
  702    accu.step(bw::FixedInt<1>(cmd_byte()))
 
  703        .step(bw::FixedInt<2>(v_.error_code()));
 
  705      accu.step(bw::FixedInt<1>(
'#'))
 
  706          .step(bw::String<Borrowed>(v_.sql_state()));
 
  709    return accu.step(bw::String<Borrowed>(v_.message())).result();
 
  713  using value_type = borrowable::message::server::Error<Borrowed>;
 
  721  static constexpr uint8_t 
cmd_byte() { 
return 0xff; }
 
  738    namespace bw = borrowable::wire;
 
  740    auto cmd_byte_res = accu.template step<bw::FixedInt<1>>();
 
  743    if (cmd_byte_res->value() != cmd_byte()) {
 
  748    auto error_code_res = accu.template step<bw::FixedInt<2>>();
 
  751      auto sql_state_hash_res = accu.template step<bw::FixedInt<1>>();
 
  752      if (!sql_state_hash_res) {
 
  755      sql_state_res = accu.template step<bw::String<Borrowed>>(5);
 
  757    auto message_res = accu.template step<bw::String<Borrowed>>();
 
  761    return std::make_pair(
 
  763        value_type(error_code_res->value(), message_res->value(),
 
  764                   sql_state_res->value()));
 
  776    : 
public impl::EncodeBase<Codec<borrowable::message::server::ColumnCount>> {
 
  777  template <
class Accumulator>
 
  779    namespace bw = borrowable::wire;
 
  781    return accu.step(
bw::VarInt(v_.count())).result();
 
  801    namespace bw = borrowable::wire;
 
  803    auto count_res = accu.template step<bw::VarInt>();
 
  820template <
bool Borrowed>
 
  823          Codec<borrowable::message::server::ColumnMeta<Borrowed>>> {
 
  824  template <
class Accumulator>
 
  826    namespace bw = borrowable::wire;
 
  829      accu.step(bw::VarString<Borrowed>(v_.table()))
 
  830          .step(bw::VarString<Borrowed>(v_.name()))
 
  832          .step(bw::FixedInt<3>(v_.column_length()))
 
  834          .step(bw::FixedInt<1>(v_.type()));
 
  838            .step(bw::FixedInt<2>(v_.flags().to_ulong()))
 
  839            .step(bw::FixedInt<1>(v_.decimals()));
 
  842            .step(bw::FixedInt<1>(v_.flags().to_ulong()))
 
  843            .step(bw::FixedInt<1>(v_.decimals()));
 
  846      return accu.result();
 
  848      return accu.step(bw::VarString<Borrowed>(v_.catalog()))
 
  849          .step(bw::VarString<Borrowed>(v_.schema()))
 
  850          .step(bw::VarString<Borrowed>(v_.table()))
 
  851          .step(bw::VarString<Borrowed>(v_.orig_table()))
 
  852          .step(bw::VarString<Borrowed>(v_.name()))
 
  853          .step(bw::VarString<Borrowed>(v_.orig_name()))
 
  855          .step(bw::FixedInt<2>(v_.collation()))
 
  856          .step(bw::FixedInt<4>(v_.column_length()))
 
  857          .step(bw::FixedInt<1>(v_.type()))
 
  858          .step(bw::FixedInt<2>(v_.flags().to_ulong()))
 
  859          .step(bw::FixedInt<1>(v_.decimals()))
 
  860          .step(bw::FixedInt<2>(0))
 
  866  using value_type = borrowable::message::server::ColumnMeta<Borrowed>;
 
  882    namespace bw = borrowable::wire;
 
  890      const auto table_res = accu.template step<bw::VarString<Borrowed>>();
 
  891      const auto name_res = accu.template step<bw::VarString<Borrowed>>();
 
  893      const auto column_length_len_res = accu.template step<bw::VarInt>();
 
  896      if (column_length_len_res->value() != 3) {
 
  900      const auto column_length_res = accu.template step<bw::FixedInt<3>>();
 
  901      const auto type_len_res = accu.template step<bw::VarInt>();
 
  904      if (type_len_res->value() != 1) {
 
  908      const auto type_res = accu.template step<bw::FixedInt<1>>();
 
  909      const auto flags_and_decimals_len_res = accu.template step<bw::VarInt>();
 
  912      if (flags_and_decimals_len_res->value() != flags_size + 1) {
 
  918      if (flags_size == 2) {
 
  919        flags_and_decimals_res = accu.template step<bw::FixedInt<3>>();
 
  921        const auto small_flags_and_decimals_res =
 
  922            accu.template step<bw::FixedInt<2>>();
 
  923        if (small_flags_and_decimals_res) {
 
  924          flags_and_decimals_res =
 
  925              bw::FixedInt<3>(small_flags_and_decimals_res->value());
 
  931      const uint16_t 
flags =
 
  932          flags_and_decimals_res->
value() & ((1 << (flags_size * 8)) - 1);
 
  933      const uint8_t decimals =
 
  934          flags_and_decimals_res->
value() >> (flags_size * 8);
 
  936      return std::make_pair(
 
  938          value_type({}, {}, table_res->value(), {}, name_res->value(), {}, {},
 
  939                     column_length_res->value(), type_res->value(), 
flags,
 
  942      const auto catalog_res = accu.template step<bw::VarString<Borrowed>>();
 
  943      const auto schema_res = accu.template step<bw::VarString<Borrowed>>();
 
  944      const auto table_res = accu.template step<bw::VarString<Borrowed>>();
 
  945      const auto orig_table_res = accu.template step<bw::VarString<Borrowed>>();
 
  946      const auto name_res = accu.template step<bw::VarString<Borrowed>>();
 
  947      const auto orig_name_res = accu.template step<bw::VarString<Borrowed>>();
 
  951      const auto other_len_res = accu.template step<bw::VarInt>();
 
  953      if (other_len_res->value() != 12) {
 
  957      const auto collation_res = accu.template step<bw::FixedInt<2>>();
 
  958      const auto column_length_res = accu.template step<bw::FixedInt<4>>();
 
  959      const auto type_res = accu.template step<bw::FixedInt<1>>();
 
  960      const auto flags_res = accu.template step<bw::FixedInt<2>>();
 
  961      const auto decimals_res = accu.template step<bw::FixedInt<1>>();
 
  963      accu.template step<void>(2);  
 
  967      return std::make_pair(
 
  969          value_type(catalog_res->value(), schema_res->value(),
 
  970                     table_res->value(), orig_table_res->value(),
 
  971                     name_res->value(), orig_name_res->value(),
 
  972                     collation_res->value(), column_length_res->value(),
 
  973                     type_res->value(), flags_res->value(),
 
  974                     decimals_res->value()));
 
  991template <
bool Borrowed>
 
  994          Codec<borrowable::message::server::SendFileRequest<Borrowed>>> {
 
  995  template <
class Accumulator>
 
  997    namespace bw = borrowable::wire;
 
  999    return accu.step(bw::FixedInt<1>(cmd_byte()))
 
 1000        .step(bw::String<Borrowed>(v_.filename()))
 
 1005  using value_type = borrowable::message::server::SendFileRequest<Borrowed>;
 
 1013  static constexpr uint8_t 
cmd_byte() noexcept { 
return 0xfb; }
 
 1026    namespace bw = borrowable::wire;
 
 1028    auto cmd_byte_res = accu.template step<bw::FixedInt<1>>();
 
 1031    if (cmd_byte_res->value() != cmd_byte()) {
 
 1035    auto filename_res = accu.template step<bw::String<Borrowed>>();
 
 1067          Codec<borrowable::message::server::StmtPrepareOk>> {
 
 1068  template <
class Accumulator>
 
 1070    namespace bw = borrowable::wire;
 
 1072    accu.step(bw::FixedInt<1>(cmd_byte()))
 
 1073        .step(bw::FixedInt<4>(v_.statement_id()))
 
 1074        .step(bw::FixedInt<2>(v_.column_count()))
 
 1075        .step(bw::FixedInt<2>(v_.param_count()))
 
 1076        .step(bw::FixedInt<1>(0))
 
 1077        .step(bw::FixedInt<2>(v_.warning_count()));
 
 1080      accu.step(bw::FixedInt<1>(v_.with_metadata()));
 
 1083    return accu.result();
 
 1095  constexpr static uint8_t 
cmd_byte() noexcept { 
return 0x00; }
 
 1108    namespace bw = borrowable::wire;
 
 1110    auto cmd_byte_res = accu.template step<bw::FixedInt<1>>();
 
 1112    auto stmt_id_res = accu.template step<bw::FixedInt<4>>();
 
 1113    auto column_count_res = accu.template step<bw::FixedInt<2>>();
 
 1114    auto param_count_res = accu.template step<bw::FixedInt<2>>();
 
 1115    auto filler_res = accu.template step<bw::FixedInt<1>>();
 
 1117    auto warning_count_res = accu.template step<bw::FixedInt<2>>();
 
 1120    int8_t with_metadata{1};
 
 1122      auto with_metadata_res = accu.template step<bw::FixedInt<1>>();
 
 1124      if (with_metadata_res) {
 
 1125        with_metadata = with_metadata_res->value();
 
 1131    return std::make_pair(
 
 1133        value_type(stmt_id_res->value(), column_count_res->value(),
 
 1134                   param_count_res->value(), warning_count_res->value(),
 
 1145template <
bool Borrowed>
 
 1148          Codec<borrowable::message::server::Row<Borrowed>>> {
 
 1149  template <
class Accumulator>
 
 1151    namespace bw = borrowable::wire;
 
 1153    for (
const auto &field : v_) {
 
 1155        accu.step(bw::VarString<Borrowed>(*field));
 
 1161    return accu.result();
 
 1181    namespace bw = borrowable::wire;
 
 1183    std::vector<typename value_type::value_type> fields;
 
 1189      auto null_res = accu.template try_step<bw::Null>();
 
 1191        fields.emplace_back(std::nullopt);
 
 1193        auto field_res = accu.template step<bw::VarString<Borrowed>>();
 
 1196        fields.emplace_back(field_res->value());
 
 1223template <
bool Borrowed>
 
 1226          Codec<borrowable::message::server::StmtRow<Borrowed>>> {
 
 1227  template <
class Accumulator>
 
 1229    namespace bw = borrowable::wire;
 
 1231    accu.step(bw::FixedInt<1>(0));
 
 1235    uint8_t null_bit_byte{};
 
 1237    for (
auto const &field : v_) {
 
 1238      if (!field) null_bit_byte |= (1 << bit_pos);
 
 1240      if (++bit_pos > 7) {
 
 1241        accu.step(bw::FixedInt<1>(null_bit_byte));
 
 1248    if (bit_pos != 0) accu.step(bw::FixedInt<1>(null_bit_byte));
 
 1251      if (!field) 
continue;
 
 1253      switch (v_.types()[
n]) {
 
 1273          accu.step(bw::FixedInt<1>(field->size()));
 
 1289    return accu.result();
 
 1293  using value_type = borrowable::message::server::StmtRow<Borrowed>;
 
 1307      std::vector<field_type::value_type> types) {
 
 1308    namespace bw = borrowable::wire;
 
 1312    const auto row_byte_res = accu.template step<bw::FixedInt<1>>();
 
 1316    if (row_byte_res->value() != 0x00) {
 
 1320    const auto nullbits_res =
 
 1321        accu.template step<bw::String<Borrowed>>(
bytes_per_bits(types.size()));
 
 1324    const auto nullbits = nullbits_res->value();
 
 1326    std::vector<typename value_type::value_type> values;
 
 1328    for (
size_t n{}, bit_pos{2}, byte_pos{}; 
n < types.size(); ++
n, ++bit_pos) {
 
 1334      if (!(nullbits[byte_pos] & (1 << bit_pos))) {
 
 1351            auto string_field_size_res = accu.template step<bw::VarInt>();
 
 1354            field_size_res = string_field_size_res->
value();
 
 1360            auto time_field_size_res = accu.template step<bw::FixedInt<1>>();
 
 1363            field_size_res = time_field_size_res->
value();
 
 1383        if (!field_size_res) {
 
 1388        const auto value_res =
 
 1389            accu.template step<bw::String<Borrowed>>(field_size_res.
value());
 
 1392        values.push_back(value_res->value());
 
 1394        values.emplace_back(std::nullopt);
 
 1410template <
bool Borrowed>
 
 1413          Codec<borrowable::message::server::Statistics<Borrowed>>> {
 
 1414  template <
class Accumulator>
 
 1416    namespace bw = borrowable::wire;
 
 1418    return accu.step(bw::String<Borrowed>(v_.stats())).result();
 
 1422  using value_type = borrowable::message::server::Statistics<Borrowed>;
 
 1434    namespace bw = borrowable::wire;
 
 1436    auto stats_res = accu.template step<bw::String<Borrowed>>();
 
 1451template <
class Base, 
class ValueType>
 
 1454  template <
class Accumulator>
 
 1456    namespace bw = borrowable::wire;
 
 1458    return accu.step(bw::FixedInt<1>(Base::cmd_byte())).result();
 
 1468  static constexpr size_t max_size() noexcept { 
return 1; }
 
 1474    namespace bw = borrowable::wire;
 
 1476    auto cmd_byte_res = accu.template step<bw::FixedInt<1>>();
 
 1479    if (cmd_byte_res->value() != Base::cmd_byte()) {
 
 1483    return std::make_pair(accu.
result().
value(), ValueType());
 
 1528                                borrowable::message::client::Quit> {
 
 1553          Codec<borrowable::message::client::ResetConnection>,
 
 1554          borrowable::message::client::ResetConnection> {
 
 1579                                borrowable::message::client::Ping> {
 
 1604                                borrowable::message::client::Statistics> {
 
 1629                                borrowable::message::client::Debug> {
 
 1651template <
bool Borrowed>
 
 1654          Codec<borrowable::message::client::InitSchema<Borrowed>>> {
 
 1655  template <
class Accumulator>
 
 1657    namespace bw = borrowable::wire;
 
 1659    return accu.step(bw::FixedInt<1>(cmd_byte()))
 
 1660        .step(bw::String<Borrowed>(v_.schema()))
 
 1688    namespace bw = borrowable::wire;
 
 1690    auto cmd_byte_res = accu.template step<bw::FixedInt<1>>();
 
 1693    if (cmd_byte_res->value() != cmd_byte()) {
 
 1697    auto schema_res = accu.template step<bw::String<Borrowed>>();
 
 1711template <
bool Borrowed>
 
 1714          Codec<borrowable::message::client::Query<Borrowed>>> {
 
 1715  template <
class Accumulator>
 
 1717    namespace bw = borrowable::wire;
 
 1719    accu.step(bw::FixedInt<1>(cmd_byte()));
 
 1721    auto caps = this->caps();
 
 1724      uint64_t param_count = v_.values().size();
 
 1728      if (param_count > 0) {
 
 1735        uint8_t null_bit_byte{};
 
 1738        for (
auto const ¶m : v_.values()) {
 
 1739          if (!param.value) null_bit_byte |= 1 << bit_pos;
 
 1741          if (++bit_pos > 7) {
 
 1742            accu.step(bw::FixedInt<1>(null_bit_byte));
 
 1749        if (bit_pos != 0) accu.step(bw::FixedInt<1>(null_bit_byte));
 
 1751        accu.step(bw::FixedInt<1>(1));  
 
 1753        for (
const auto ¶m : v_.values()) {
 
 1754          accu.step(bw::FixedInt<2>(param.type_and_flags))
 
 1755              .step(bw::VarString<Borrowed>(param.name));
 
 1758        for (
const auto ¶m : v_.values()) {
 
 1759          if (!param.value) 
continue;
 
 1761          auto type = param.type_and_flags & 0xff;
 
 1777              accu.template step<bw::VarInt>(param.value->size());
 
 1783              assert(param.value->size() <= 255);
 
 1785              accu.template step<bw::FixedInt<1>>(param.value->size());
 
 1790              assert(param.value->size() == 8);
 
 1796              assert(param.value->size() == 4);
 
 1801              assert(param.value->size() == 2);
 
 1805              assert(param.value->size() == 1);
 
 1809              assert(
true || 
"unknown field-type");
 
 1812          accu.template step<bw::String<Borrowed>>(*param.value);
 
 1817    accu.step(bw::String<Borrowed>(v_.statement()));
 
 1818    return accu.result();
 
 1821  template <
class Accu>
 
 1823      Accu &accu, uint8_t 
type) {
 
 1824    namespace bw = borrowable::wire;
 
 1841        auto string_field_size_res = accu.template step<bw::VarInt>();
 
 1842        if (!accu.result()) {
 
 1846        return string_field_size_res->value();
 
 1852        auto time_field_size_res = accu.template step<bw::FixedInt<1>>();
 
 1853        if (!accu.result()) {
 
 1857        return time_field_size_res->value();
 
 1900    namespace bw = borrowable::wire;
 
 1902    auto cmd_byte_res = accu.template step<bw::FixedInt<1>>();
 
 1905    if (cmd_byte_res->value() != cmd_byte()) {
 
 1909    std::vector<typename value_type::Param> params;
 
 1912      auto param_count_res = accu.template step<bw::VarInt>();
 
 1916      auto param_set_count_res = accu.template step<bw::VarInt>();
 
 1917      if (!param_set_count_res)
 
 1920      if (param_set_count_res->value() != 1) {
 
 1924      const auto param_count = param_count_res->value();
 
 1925      if (param_count > 0) {
 
 1927        const auto nullbits_res = accu.template step<bw::String<Borrowed>>(
 
 1931        const auto nullbits = nullbits_res->value();
 
 1934        auto new_params_bound_res = accu.template step<bw::FixedInt<1>>();
 
 1937        auto new_params_bound = new_params_bound_res->value();
 
 1938        if (new_params_bound != 1) {
 
 1948        if (new_params_bound == 1) {
 
 1949          for (
long n{}; 
n < param_count; ++
n) {
 
 1950            auto param_type_res = accu.template step<bw::FixedInt<2>>();
 
 1954            auto param_name_res = accu.template step<bw::VarString<Borrowed>>();
 
 1959            params.emplace_back(param_type_res->value(),
 
 1960                                param_name_res->value(),
 
 1961                                std::optional<std::string>());
 
 1965        for (
long n{}, nullbit_pos{}, nullbyte_pos{}; 
n < param_count;
 
 1966             ++
n, ++nullbit_pos) {
 
 1967          if (nullbit_pos > 7) {
 
 1972          if (!(nullbits[nullbyte_pos] & (1 << nullbit_pos))) {
 
 1973            auto ¶m = params[
n];
 
 1975            auto field_size_res =
 
 1976                decode_field_size(accu, param.type_and_flags & 0xff);
 
 1977            if (!field_size_res) {
 
 1981            auto param_value_res = accu.template step<bw::String<Borrowed>>(
 
 1982                field_size_res.value());
 
 1987            param.value = param_value_res->value();
 
 1993    auto statement_res = accu.template step<bw::String<Borrowed>>();
 
 1997    return std::make_pair(
 
 1999        value_type(statement_res->value(), std::move(params)));
 
 2015template <
bool Borrowed>
 
 2018          Codec<borrowable::message::client::SendFile<Borrowed>>> {
 
 2019  template <
class Accumulator>
 
 2021    namespace bw = borrowable::wire;
 
 2023    return accu.step(bw::String<Borrowed>(v_.payload())).result();
 
 2046    namespace bw = borrowable::wire;
 
 2048    auto payload_res = accu.template step<bw::String<Borrowed>>();
 
 2062template <
bool Borrowed>
 
 2065          Codec<borrowable::message::client::ListFields<Borrowed>>> {
 
 2066  template <
class Accumulator>
 
 2068    namespace bw = borrowable::wire;
 
 2070    return accu.step(bw::FixedInt<1>(cmd_byte()))
 
 2071        .step(bw::NulTermString<Borrowed>(v_.table_name()))
 
 2072        .step(bw::String<Borrowed>(v_.wildcard()))
 
 2100    namespace bw = borrowable::wire;
 
 2102    auto cmd_byte_res = accu.template step<bw::FixedInt<1>>();
 
 2105    if (cmd_byte_res->value() != cmd_byte()) {
 
 2109    auto table_name_res = accu.template step<bw::NulTermString<Borrowed>>();
 
 2110    auto wildcard_res = accu.template step<bw::String<Borrowed>>();
 
 2113    return std::make_pair(
 
 2115        value_type(table_name_res->value(), wildcard_res->value()));
 
 2128  template <
class Accumulator>
 
 2130    namespace bw = borrowable::wire;
 
 2132    return accu.step(bw::FixedInt<1>(cmd_byte()))
 
 2133        .step(bw::FixedInt<1>(v_.cmds().to_ulong()))
 
 2161    namespace bw = borrowable::wire;
 
 2163    auto cmd_byte_res = accu.template step<bw::FixedInt<1>>();
 
 2166    if (cmd_byte_res->value() != cmd_byte()) {
 
 2170    auto cmds_res = accu.template step<bw::FixedInt<1>>();
 
 2191  template <
class Accumulator>
 
 2193    namespace bw = borrowable::wire;
 
 2195    return accu.step(bw::FixedInt<1>(cmd_byte()))
 
 2196        .step(bw::FixedInt<4>(v_.connection_id()))
 
 2224    namespace bw = borrowable::wire;
 
 2226    auto cmd_byte_res = accu.template step<bw::FixedInt<1>>();
 
 2229    if (cmd_byte_res->value() != cmd_byte()) {
 
 2233    auto connection_id_res = accu.template step<bw::FixedInt<4>>();
 
 2247template <
bool Borrowed>
 
 2250          Codec<borrowable::message::client::StmtPrepare<Borrowed>>> {
 
 2251  template <
class Accumulator>
 
 2253    namespace bw = borrowable::wire;
 
 2255    return accu.step(bw::FixedInt<1>(cmd_byte()))
 
 2256        .step(bw::String<Borrowed>(v_.statement()))
 
 2284    namespace bw = borrowable::wire;
 
 2286    auto cmd_byte_res = accu.template step<bw::FixedInt<1>>();
 
 2289    if (cmd_byte_res->value() != cmd_byte()) {
 
 2293    auto statement_res = accu.template step<bw::String<Borrowed>>();
 
 2307template <
bool Borrowed>
 
 2310          Codec<borrowable::message::client::StmtExecute<Borrowed>>> {
 
 2311  template <
class Accumulator>
 
 2313    namespace bw = borrowable::wire;
 
 2315    auto caps = this->caps();
 
 2317    accu.step(bw::FixedInt<1>(cmd_byte()))
 
 2318        .step(bw::FixedInt<4>(v_.statement_id()))
 
 2319        .step(bw::FixedInt<1>(v_.flags().to_ullong()))
 
 2320        .step(bw::FixedInt<4>(v_.iteration_count()));
 
 2323    auto num_params = v_.values().size();
 
 2325    const bool supports_query_attributes =
 
 2328    if (supports_query_attributes &&
 
 2333    if (num_params == 0) 
return accu.result();
 
 2339    uint8_t null_bit_byte{};
 
 2342    for (
auto const ¶m : v_.values()) {
 
 2343      if (!param.has_value()) null_bit_byte |= 1 << bit_pos;
 
 2345      if (++bit_pos > 7) {
 
 2346        accu.step(bw::FixedInt<1>(null_bit_byte));
 
 2353    if (bit_pos != 0) accu.step(bw::FixedInt<1>(null_bit_byte));
 
 2355    accu.step(bw::FixedInt<1>(v_.new_params_bound()));
 
 2357    if (v_.new_params_bound()) {
 
 2358      for (
const auto ¶m_def : v_.types()) {
 
 2359        accu.step(bw::FixedInt<2>(param_def.type_and_flags));
 
 2361        if (supports_query_attributes) {
 
 2369      if (!v.has_value()) 
continue;
 
 2372      switch (v_.types()[
n].type_and_flags & 0xff) {
 
 2392          accu.step(bw::FixedInt<1>(v->size()));
 
 2405          assert(
false || 
"Unknown Type");
 
 2410    return accu.result();
 
 2476  template <
class Func>
 
 2479      Func &&metadata_lookup) {
 
 2482    namespace bw = borrowable::wire;
 
 2484    auto cmd_byte_res = accu.template step<bw::FixedInt<1>>();
 
 2487    if (cmd_byte_res->value() != cmd_byte()) {
 
 2491    auto statement_id_res = accu.template step<bw::FixedInt<4>>();
 
 2492    auto flags_res = accu.template step<bw::FixedInt<1>>();
 
 2493    auto iteration_count_res = accu.template step<bw::FixedInt<4>>();
 
 2499    const bool supports_query_attributes =
 
 2503        metadata_res = metadata_lookup(statement_id_res->value());
 
 2504    if (!metadata_res) {
 
 2509    size_t param_count = metadata_res->size();
 
 2511    if (supports_query_attributes &&
 
 2513      auto param_count_res = accu.template step<bw::VarInt>();
 
 2518      if (
static_cast<uint64_t
>(param_count_res->value()) < param_count) {
 
 2523      param_count = param_count_res->value();
 
 2526    if (param_count == 0) {
 
 2527      return std::make_pair(
 
 2529          value_type(statement_id_res->value(), flags_res->value(),
 
 2530                     iteration_count_res->value(), 
false, {}, {}));
 
 2534        accu.template step<bw::String<Borrowed>>(
bytes_per_bits(param_count));
 
 2537    auto new_params_bound_res = accu.template step<bw::FixedInt<1>>();
 
 2540    std::vector<typename value_type::ParamDef> types;
 
 2542    auto new_params_bound = new_params_bound_res->value();
 
 2543    if (new_params_bound == 0) {
 
 2545      types = *metadata_res;
 
 2546    } 
else if (new_params_bound == 1) {
 
 2553      types.reserve(param_count);
 
 2555      for (
size_t n{}; 
n < param_count; ++
n) {
 
 2556        auto type_res = accu.template step<bw::FixedInt<2>>();
 
 2559        if (supports_query_attributes) {
 
 2560          auto name_res = accu.template step<bw::VarString<Borrowed>>();
 
 2564          types.emplace_back(type_res->value(), name_res->value());
 
 2566          types.emplace_back(type_res->value(), 
"");
 
 2573    if (param_count != types.size()) {
 
 2578    std::vector<std::optional<typename value_type::string_type>> values;
 
 2579    values.reserve(param_count);
 
 2581    const auto nullbits = nullbits_res->value();
 
 2582    for (
size_t n{}, bit_pos{}, byte_pos{}; 
n < param_count; ++
n, ++bit_pos) {
 
 2590      const auto param_already_sent =
 
 2591          n < metadata_res->size() ? (*metadata_res)[
n].param_already_sent
 
 2594      if (param_already_sent) {
 
 2595        values.emplace_back(
"");  
 
 2596      } 
else if (!(nullbits[byte_pos] & (1 << bit_pos))) {
 
 2599        switch (types[
n].type_and_flags & 0xff) {
 
 2613            auto string_field_size_res = accu.template step<bw::VarInt>();
 
 2618            field_size_res = string_field_size_res->
value();
 
 2624            auto time_field_size_res = accu.template step<bw::FixedInt<1>>();
 
 2629            field_size_res = time_field_size_res->
value();
 
 2649        if (!field_size_res) {
 
 2655            accu.template step<bw::String<Borrowed>>(field_size_res.
value());
 
 2660        values.push_back(value_res->value());
 
 2663        values.emplace_back(std::nullopt);
 
 2669    return std::make_pair(
 
 2671        value_type(statement_id_res->value(), flags_res->value(),
 
 2672                   iteration_count_res->value(), new_params_bound_res->value(),
 
 2683template <
bool Borrowed>
 
 2686          Codec<borrowable::message::client::StmtParamAppendData<Borrowed>>> {
 
 2687  template <
class Accumulator>
 
 2689    namespace bw = borrowable::wire;
 
 2691    return accu.step(bw::FixedInt<1>(cmd_byte()))
 
 2692        .step(bw::FixedInt<4>(v_.statement_id()))
 
 2693        .step(bw::FixedInt<2>(v_.param_id()))
 
 2694        .step(bw::String<Borrowed>(v_.data()))
 
 2722    namespace bw = borrowable::wire;
 
 2724    auto cmd_byte_res = accu.template step<bw::FixedInt<1>>();
 
 2727    if (cmd_byte_res->value() != cmd_byte()) {
 
 2731    auto statement_id_res = accu.template step<bw::FixedInt<4>>();
 
 2732    auto param_id_res = accu.template step<bw::FixedInt<2>>();
 
 2733    auto data_res = accu.template step<bw::String<Borrowed>>();
 
 2738                                     param_id_res->value(), data_res->value()));
 
 2751  template <
class Accumulator>
 
 2753    namespace bw = borrowable::wire;
 
 2755    return accu.step(bw::FixedInt<1>(cmd_byte()))
 
 2756        .step(bw::FixedInt<4>(v_.statement_id()))
 
 2784    namespace bw = borrowable::wire;
 
 2786    auto cmd_byte_res = accu.template step<bw::FixedInt<1>>();
 
 2789    if (cmd_byte_res->value() != cmd_byte()) {
 
 2793    auto statement_id_res = accu.template step<bw::FixedInt<4>>();
 
 2810  template <
class Accumulator>
 
 2812    namespace bw = borrowable::wire;
 
 2814    return accu.step(bw::FixedInt<1>(cmd_byte()))
 
 2815        .step(bw::FixedInt<4>(v_.statement_id()))
 
 2843    namespace bw = borrowable::wire;
 
 2845    auto cmd_byte_res = accu.template step<bw::FixedInt<1>>();
 
 2848    if (cmd_byte_res->value() != cmd_byte()) {
 
 2852    auto statement_id_res = accu.template step<bw::FixedInt<4>>();
 
 2869  template <
class Accumulator>
 
 2871    namespace bw = borrowable::wire;
 
 2873    return accu.step(bw::FixedInt<1>(cmd_byte()))
 
 2874        .step(bw::FixedInt<2>(v_.option()))
 
 2902    namespace bw = borrowable::wire;
 
 2904    auto cmd_byte_res = accu.template step<bw::FixedInt<1>>();
 
 2907    if (cmd_byte_res->value() != cmd_byte()) {
 
 2911    auto option_res = accu.template step<bw::FixedInt<2>>();
 
 2928  template <
class Accumulator>
 
 2930    namespace bw = borrowable::wire;
 
 2932    return accu.step(bw::FixedInt<1>(cmd_byte()))
 
 2933        .step(bw::FixedInt<4>(v_.statement_id()))
 
 2934        .step(bw::FixedInt<4>(v_.row_count()))
 
 2962    namespace bw = borrowable::wire;
 
 2964    auto cmd_byte_res = accu.template step<bw::FixedInt<1>>();
 
 2967    if (cmd_byte_res->value() != cmd_byte()) {
 
 2971    auto statement_id_res = accu.template step<bw::FixedInt<4>>();
 
 2972    auto row_count_res = accu.template step<bw::FixedInt<4>>();
 
 2975    return std::make_pair(
 
 2977        value_type(statement_id_res->value(), row_count_res->value()));
 
 3023template <
bool Borrowed>
 
 3026          Codec<borrowable::message::client::Greeting<Borrowed>>> {
 
 3027  template <
class Accumulator>
 
 3029    namespace bw = borrowable::wire;
 
 3031    const auto shared_caps = v_.capabilities() & this->caps();
 
 3034      accu.step(bw::FixedInt<4>(v_.capabilities().to_ulong()))
 
 3035          .step(bw::FixedInt<4>(v_.max_packet_size()))
 
 3036          .step(bw::FixedInt<1>(v_.collation()))
 
 3037          .step(bw::String<Borrowed>(std::string(23, 
'\0')));
 
 3039            v_.username().empty())) {
 
 3042        accu.step(bw::NulTermString<Borrowed>(v_.username()));
 
 3046          accu.step(bw::VarString<Borrowed>(v_.auth_method_data()));
 
 3049          accu.step(bw::FixedInt<1>(v_.auth_method_data().size()))
 
 3050              .step(bw::String<Borrowed>(v_.auth_method_data()));
 
 3052          accu.step(bw::NulTermString<Borrowed>(v_.auth_method_data()));
 
 3057          accu.step(bw::NulTermString<Borrowed>(v_.schema()));
 
 3069              !v_.auth_method_name().empty()) {
 
 3070            accu.step(bw::NulTermString<Borrowed>(v_.auth_method_name()));
 
 3074            accu.step(bw::NulTermString<Borrowed>(v_.auth_method_name()));
 
 3077          accu.step(bw::VarString<Borrowed>(v_.attributes()));
 
 3081      accu.step(bw::FixedInt<2>(v_.capabilities().to_ulong()))
 
 3082          .step(bw::FixedInt<3>(v_.max_packet_size()))
 
 3083          .step(bw::NulTermString<Borrowed>(v_.username()));
 
 3086        accu.step(bw::NulTermString<Borrowed>(v_.auth_method_data()))
 
 3087            .step(bw::String<Borrowed>(v_.schema()));
 
 3089        accu.step(bw::String<Borrowed>(v_.auth_method_data()));
 
 3093    return accu.result();
 
 3118    namespace bw = borrowable::wire;
 
 3120    auto capabilities_lo_res = accu.template step<bw::FixedInt<2>>();
 
 3121    if (!capabilities_lo_res)
 
 3125        capabilities_lo_res->value());
 
 3129    auto shared_capabilities = caps & client_capabilities;
 
 3134      auto capabilities_hi_res = accu.template step<bw::FixedInt<2>>();
 
 3135      if (!capabilities_hi_res)
 
 3139          capabilities_hi_res->value() << 16);
 
 3141      shared_capabilities = caps & client_capabilities;
 
 3143      auto max_packet_size_res = accu.template step<bw::FixedInt<4>>();
 
 3144      auto collation_res = accu.template step<bw::FixedInt<1>>();
 
 3146      accu.template step<bw::String<Borrowed>>(23);  
 
 3148      auto last_accu_res = accu.
result();
 
 3150      auto username_res = accu.template step<bw::NulTermString<Borrowed>>();
 
 3154        if (last_accu_res &&
 
 3156          return std::make_pair(
 
 3157              last_accu_res.value(),
 
 3158              value_type(client_capabilities, max_packet_size_res->value(),
 
 3159                         collation_res->value(), {}, {}, {}, {}, {}));
 
 3171          auth_method_data_res;
 
 3174        auto res = accu.template step<bw::VarString<Borrowed>>();
 
 3177        auth_method_data_res = bw::String<Borrowed>(res->value());
 
 3178      } 
else if (shared_capabilities
 
 3180        auto auth_method_data_len_res = accu.template step<bw::FixedInt<1>>();
 
 3181        if (!auth_method_data_len_res)
 
 3183        auto auth_method_data_len = auth_method_data_len_res->value();
 
 3186            accu.template step<bw::String<Borrowed>>(auth_method_data_len);
 
 3189        auth_method_data_res = bw::String<Borrowed>(res->value());
 
 3191        auto res = accu.template step<bw::NulTermString<Borrowed>>();
 
 3194        auth_method_data_res = bw::String<Borrowed>(res->value());
 
 3198      if (shared_capabilities
 
 3200        schema_res = accu.template step<bw::NulTermString<Borrowed>>();
 
 3206      if (shared_capabilities
 
 3211          auth_method_res = bw::NulTermString<Borrowed>{};
 
 3213          auth_method_res = accu.template step<bw::NulTermString<Borrowed>>();
 
 3219      if (shared_capabilities
 
 3221        attributes_res = accu.template step<bw::VarString<Borrowed>>();
 
 3226      return std::make_pair(
 
 3228          value_type(client_capabilities, max_packet_size_res->value(),
 
 3229                     collation_res->value(), username_res->value(),
 
 3230                     auth_method_data_res->
value(), schema_res->
value(),
 
 3231                     auth_method_res->
value(), attributes_res->
value()));
 
 3234      auto max_packet_size_res = accu.template step<bw::FixedInt<3>>();
 
 3236      auto username_res = accu.template step<bw::NulTermString<Borrowed>>();
 
 3239          auth_method_data_res;
 
 3242      if (shared_capabilities
 
 3244        auto res = accu.template step<bw::NulTermString<Borrowed>>();
 
 3248        auth_method_data_res = bw::String<Borrowed>(res->value());
 
 3250        schema_res = accu.template step<bw::String<Borrowed>>();
 
 3252        auth_method_data_res = accu.template step<bw::String<Borrowed>>();
 
 3275      return std::make_pair(
 
 3277          value_type(client_capabilities, max_packet_size_res->value(), 0x00,
 
 3278                     username_res->value(), auth_method_data_res->value(),
 
 3279                     schema_res->
value(), {}, {}));
 
 3296template <
bool Borrowed>
 
 3299          Codec<borrowable::message::client::AuthMethodData<Borrowed>>> {
 
 3300  template <
class Accumulator>
 
 3302    namespace bw = borrowable::wire;
 
 3304    return accu.step(bw::String<Borrowed>(v_.auth_method_data())).result();
 
 3327    namespace bw = borrowable::wire;
 
 3329    auto auth_method_data_res = accu.template step<bw::String<Borrowed>>();
 
 3350template <
bool Borrowed>
 
 3353          Codec<borrowable::message::client::ChangeUser<Borrowed>>> {
 
 3354  template <
class Accumulator>
 
 3356    namespace bw = borrowable::wire;
 
 3358    accu.step(bw::FixedInt<1>(cmd_byte()))
 
 3359        .step(bw::NulTermString<Borrowed>(v_.username()));
 
 3362      accu.step(bw::FixedInt<1>(v_.auth_method_data().size()))
 
 3363          .step(bw::String<Borrowed>(v_.auth_method_data()));
 
 3365      accu.step(bw::NulTermString<Borrowed>(v_.auth_method_data()));
 
 3367    accu.step(bw::NulTermString<Borrowed>(v_.schema()));
 
 3373    if (v_.collation() != 0x00 ||
 
 3376      accu.step(bw::FixedInt<2>(v_.collation()));
 
 3378        accu.step(bw::NulTermString<Borrowed>(v_.auth_method_name()));
 
 3383        accu.step(bw::VarString<Borrowed>(v_.attributes()));
 
 3387    return accu.result();
 
 3415    namespace bw = borrowable::wire;
 
 3417    auto cmd_byte_res = accu.template step<bw::FixedInt<1>>();
 
 3420    if (cmd_byte_res->value() != cmd_byte()) {
 
 3423    auto username_res = accu.template step<bw::NulTermString<Borrowed>>();
 
 3431      auto auth_method_data_len_res = accu.template step<bw::FixedInt<1>>();
 
 3432      if (!auth_method_data_len_res)
 
 3434      auto auth_method_data_len = auth_method_data_len_res->value();
 
 3436      auto res = accu.template step<bw::String<Borrowed>>(auth_method_data_len);
 
 3439      auth_method_data_res = bw::String<Borrowed>(res->value());
 
 3441      auto res = accu.template step<bw::NulTermString<Borrowed>>();
 
 3444      auth_method_data_res = bw::String<Borrowed>(res->value());
 
 3447    auto schema_res = accu.template step<bw::NulTermString<Borrowed>>();
 
 3453      return std::make_pair(
 
 3455          value_type(username_res->value(), auth_method_data_res->value(),
 
 3456                     schema_res->value(), 0x00, {}, {}));
 
 3460    auto collation_res = accu.template step<bw::FixedInt<2>>();
 
 3463        auth_method_name_res;
 
 3465      auth_method_name_res = accu.template step<bw::NulTermString<Borrowed>>();
 
 3470      attributes_res = accu.template step<bw::VarString<Borrowed>>();
 
 3475    return std::make_pair(
 
 3477        value_type(username_res->value(), auth_method_data_res->value(),
 
 3478                   schema_res->value(), collation_res->value(),
 
 3479                   auth_method_name_res->value(), attributes_res->
value()));
 
 3494                                borrowable::message::client::Clone> {
 
 3516template <
bool Borrowed>
 
 3519          Codec<borrowable::message::client::BinlogDump<Borrowed>>> {
 
 3524  template <
class Accumulator>
 
 3526    namespace bw = borrowable::wire;
 
 3528    return accu.step(bw::FixedInt<1>(cmd_byte()))
 
 3529        .step(bw::FixedInt<4>(v_.position()))
 
 3530        .step(bw::FixedInt<2>(v_.flags().underlying_value()))
 
 3531        .step(bw::FixedInt<4>(v_.server_id()))
 
 3532        .step(bw::String<Borrowed>(v_.filename()))
 
 3559    namespace bw = borrowable::wire;
 
 3561    auto cmd_byte_res = accu.template step<bw::FixedInt<1>>();
 
 3564    if (cmd_byte_res->value() != cmd_byte()) {
 
 3567    auto position_res = accu.template step<bw::FixedInt<4>>();
 
 3568    auto flags_res = accu.template step<bw::FixedInt<2>>();
 
 3569    auto server_id_res = accu.template step<bw::FixedInt<4>>();
 
 3571    auto filename_res = accu.template step<bw::String<Borrowed>>();
 
 3576    flags.underlying_value(flags_res->value());
 
 3578    return std::make_pair(
 
 3581                   position_res->value()));
 
 3591template <
bool Borrowed>
 
 3594          Codec<borrowable::message::client::RegisterReplica<Borrowed>>> {
 
 3599  template <
class Accumulator>
 
 3601    namespace bw = borrowable::wire;
 
 3603    return accu.step(bw::FixedInt<1>(cmd_byte()))
 
 3604        .step(bw::FixedInt<4>(v_.server_id()))
 
 3605        .step(bw::FixedInt<1>(v_.hostname().size()))
 
 3606        .step(bw::String<Borrowed>(v_.hostname()))
 
 3607        .step(bw::FixedInt<1>(v_.username().size()))
 
 3608        .step(bw::String<Borrowed>(v_.username()))
 
 3609        .step(bw::FixedInt<1>(v_.password().size()))
 
 3610        .step(bw::String<Borrowed>(v_.password()))
 
 3611        .step(bw::FixedInt<2>(v_.port()))
 
 3612        .step(bw::FixedInt<4>(v_.replication_rank()))
 
 3613        .step(bw::FixedInt<4>(v_.master_id()))
 
 3640    namespace bw = borrowable::wire;
 
 3642    auto cmd_byte_res = accu.template step<bw::FixedInt<1>>();
 
 3645    if (cmd_byte_res->value() != cmd_byte()) {
 
 3648    auto server_id_res = accu.template step<bw::FixedInt<4>>();
 
 3649    auto hostname_len_res = accu.template step<bw::FixedInt<1>>();
 
 3653        accu.template step<bw::String<Borrowed>>(hostname_len_res->value());
 
 3655    auto username_len_res = accu.template step<bw::FixedInt<1>>();
 
 3659        accu.template step<bw::String<Borrowed>>(username_len_res->value());
 
 3661    auto password_len_res = accu.template step<bw::FixedInt<1>>();
 
 3665        accu.template step<bw::String<Borrowed>>(password_len_res->value());
 
 3667    auto port_res = accu.template step<bw::FixedInt<2>>();
 
 3668    auto replication_rank_res = accu.template step<bw::FixedInt<4>>();
 
 3669    auto master_id_res = accu.template step<bw::FixedInt<4>>();
 
 3673    return std::make_pair(
 
 3675        value_type(server_id_res->value(), hostname_res->value(),
 
 3676                   username_res->value(), password_res->value(),
 
 3677                   port_res->value(), replication_rank_res->value(),
 
 3678                   master_id_res->value()));
 
 3688template <
bool Borrowed>
 
 3691          Codec<borrowable::message::client::BinlogDumpGtid<Borrowed>>> {
 
 3696  template <
class Accumulator>
 
 3698    namespace bw = borrowable::wire;
 
 3700    accu.step(bw::FixedInt<1>(cmd_byte()))
 
 3701        .step(bw::FixedInt<2>(v_.flags().underlying_value()))
 
 3702        .step(bw::FixedInt<4>(v_.server_id()))
 
 3703        .step(bw::FixedInt<4>(v_.filename().size()))
 
 3704        .step(bw::String<Borrowed>(v_.filename()))
 
 3705        .step(bw::FixedInt<8>(v_.position()));
 
 3707    if (v_.flags() & value_type::Flags::through_gtid) {
 
 3708      accu.step(bw::FixedInt<4>(v_.sids().size()))
 
 3709          .step(bw::String<Borrowed>(v_.sids()));
 
 3712    return accu.result();
 
 3721      : 
base_(caps), v_{
std::move(val)} {}
 
 3738    namespace bw = borrowable::wire;
 
 3740    auto cmd_byte_res = accu.template step<bw::FixedInt<1>>();
 
 3743    if (cmd_byte_res->value() != cmd_byte()) {
 
 3746    auto flags_res = accu.template step<bw::FixedInt<2>>();
 
 3747    auto server_id_res = accu.template step<bw::FixedInt<4>>();
 
 3748    auto filename_len_res = accu.template step<bw::FixedInt<4>>();
 
 3752        accu.template step<bw::String<Borrowed>>(filename_len_res->value());
 
 3753    auto position_res = accu.template step<bw::FixedInt<8>>();
 
 3756    flags.underlying_value(flags_res->value());
 
 3758    if (!(
flags & value_type::Flags::through_gtid)) {
 
 3761      return std::make_pair(
 
 3764                     position_res->value(), {}));
 
 3767    auto sids_len_res = accu.template step<bw::FixedInt<4>>();
 
 3771        accu.template step<bw::String<Borrowed>>(sids_len_res->value());
 
 3775    return std::make_pair(
 
 3778                   position_res->value(), sids_res->value()));
 
CRTP base for client-side commands that are encoded as a single byte.
Definition: classic_protocol_codec_message.h:1453
 
constexpr CodecSimpleCommand(capabilities::value_type caps)
Definition: classic_protocol_codec_message.h:1466
 
friend __base
Definition: classic_protocol_codec_message.h:1464
 
static constexpr size_t max_size() noexcept
Definition: classic_protocol_codec_message.h:1468
 
static stdx::expected< std::pair< size_t, ValueType >, std::error_code > decode(const net::const_buffer &buffer, capabilities::value_type caps)
Definition: classic_protocol_codec_message.h:1470
 
constexpr auto accumulate_fields(Accumulator &&accu) const
Definition: classic_protocol_codec_message.h:1455
 
const value_type v_
Definition: classic_protocol_codec_message.h:3338
 
static stdx::expected< std::pair< size_t, value_type >, std::error_code > decode(const net::const_buffer &buffer, capabilities::value_type caps)
Definition: classic_protocol_codec_message.h:3323
 
static constexpr capabilities::value_type depends_on_capabilities() noexcept
capabilities the codec depends on.
Definition: classic_protocol_codec_message.h:3319
 
friend __base
Definition: classic_protocol_codec_message.h:3311
 
constexpr auto accumulate_fields(Accumulator &&accu) const
Definition: classic_protocol_codec_message.h:3301
 
constexpr Codec(value_type v, capabilities::value_type caps)
Definition: classic_protocol_codec_message.h:3313
 
constexpr static uint8_t cmd_byte() noexcept
Definition: classic_protocol_codec_message.h:3723
 
const value_type v_
Definition: classic_protocol_codec_message.h:3782
 
static stdx::expected< std::pair< size_t, value_type >, std::error_code > decode(const net::const_buffer &buffer, capabilities::value_type caps)
Definition: classic_protocol_codec_message.h:3734
 
constexpr Codec(value_type val, capabilities::value_type caps)
Definition: classic_protocol_codec_message.h:3720
 
friend base_
Definition: classic_protocol_codec_message.h:3718
 
static constexpr capabilities::value_type depends_on_capabilities() noexcept
capabilities the codec depends on.
Definition: classic_protocol_codec_message.h:3730
 
constexpr auto accumulate_fields(Accumulator &&accu) const
Definition: classic_protocol_codec_message.h:3697
 
constexpr Codec(value_type v, capabilities::value_type caps)
Definition: classic_protocol_codec_message.h:3541
 
friend __base
Definition: classic_protocol_codec_message.h:3539
 
const value_type v_
Definition: classic_protocol_codec_message.h:3585
 
static stdx::expected< std::pair< size_t, value_type >, std::error_code > decode(const net::const_buffer &buffer, capabilities::value_type caps)
Definition: classic_protocol_codec_message.h:3555
 
constexpr auto accumulate_fields(Accumulator &&accu) const
Definition: classic_protocol_codec_message.h:3525
 
constexpr static uint8_t cmd_byte() noexcept
Definition: classic_protocol_codec_message.h:3544
 
static constexpr capabilities::value_type depends_on_capabilities() noexcept
capabilities the codec depends on.
Definition: classic_protocol_codec_message.h:3551
 
const value_type v_
Definition: classic_protocol_codec_message.h:3483
 
static constexpr capabilities::value_type depends_on_capabilities() noexcept
capabilities the codec depends on.
Definition: classic_protocol_codec_message.h:3406
 
constexpr static uint8_t cmd_byte() noexcept
Definition: classic_protocol_codec_message.h:3399
 
static stdx::expected< std::pair< size_t, value_type >, std::error_code > decode(const net::const_buffer &buffer, capabilities::value_type caps)
Definition: classic_protocol_codec_message.h:3411
 
constexpr Codec(value_type v, capabilities::value_type caps)
Definition: classic_protocol_codec_message.h:3396
 
constexpr auto accumulate_fields(Accumulator &&accu) const
Definition: classic_protocol_codec_message.h:3355
 
friend __base
Definition: classic_protocol_codec_message.h:3394
 
constexpr static uint8_t cmd_byte() noexcept
Definition: classic_protocol_codec_message.h:3501
 
constexpr Codec(value_type, capabilities::value_type caps)
Definition: classic_protocol_codec_message.h:3499
 
static constexpr capabilities::value_type depends_on_capabilities() noexcept
capabilities the codec depends on.
Definition: classic_protocol_codec_message.h:3508
 
constexpr static uint8_t cmd_byte() noexcept
Definition: classic_protocol_codec_message.h:1636
 
constexpr Codec(value_type, capabilities::value_type caps)
Definition: classic_protocol_codec_message.h:1634
 
static constexpr capabilities::value_type depends_on_capabilities() noexcept
capabilities the codec depends on.
Definition: classic_protocol_codec_message.h:1643
 
friend __base
Definition: classic_protocol_codec_message.h:3100
 
static stdx::expected< std::pair< size_t, value_type >, std::error_code > decode(const net::const_buffer &buffer, capabilities::value_type caps)
Definition: classic_protocol_codec_message.h:3114
 
constexpr Codec(value_type v, capabilities::value_type caps)
Definition: classic_protocol_codec_message.h:3102
 
constexpr auto accumulate_fields(Accumulator &&accu) const
Definition: classic_protocol_codec_message.h:3028
 
static constexpr capabilities::value_type depends_on_capabilities() noexcept
capabilities the codec depends on.
Definition: classic_protocol_codec_message.h:3108
 
const value_type v_
Definition: classic_protocol_codec_message.h:3284
 
static stdx::expected< std::pair< size_t, value_type >, std::error_code > decode(const net::const_buffer &buffer, capabilities::value_type caps)
Definition: classic_protocol_codec_message.h:1684
 
constexpr auto accumulate_fields(Accumulator &&accu) const
Definition: classic_protocol_codec_message.h:1656
 
static constexpr capabilities::value_type depends_on_capabilities() noexcept
capabilities the codec depends on.
Definition: classic_protocol_codec_message.h:1680
 
const value_type v_
Definition: classic_protocol_codec_message.h:1705
 
friend __base
Definition: classic_protocol_codec_message.h:1668
 
constexpr Codec(value_type v, capabilities::value_type caps)
Definition: classic_protocol_codec_message.h:1670
 
constexpr static uint8_t cmd_byte() noexcept
Definition: classic_protocol_codec_message.h:1673
 
static constexpr capabilities::value_type depends_on_capabilities() noexcept
capabilities the codec depends on.
Definition: classic_protocol_codec_message.h:2216
 
constexpr auto accumulate_fields(Accumulator &&accu) const
Definition: classic_protocol_codec_message.h:2192
 
value_type v_
Definition: classic_protocol_codec_message.h:2241
 
friend __base
Definition: classic_protocol_codec_message.h:2204
 
static stdx::expected< std::pair< size_t, value_type >, std::error_code > decode(const net::const_buffer &buffer, capabilities::value_type caps)
Definition: classic_protocol_codec_message.h:2220
 
constexpr static uint8_t cmd_byte() noexcept
Definition: classic_protocol_codec_message.h:2209
 
constexpr Codec(value_type v, capabilities::value_type caps)
Definition: classic_protocol_codec_message.h:2206
 
const value_type v_
Definition: classic_protocol_codec_message.h:2119
 
constexpr Codec(value_type v, capabilities::value_type caps)
Definition: classic_protocol_codec_message.h:2082
 
constexpr static uint8_t cmd_byte() noexcept
Definition: classic_protocol_codec_message.h:2085
 
static constexpr capabilities::value_type depends_on_capabilities() noexcept
capabilities the codec depends on.
Definition: classic_protocol_codec_message.h:2092
 
constexpr auto accumulate_fields(Accumulator &&accu) const
Definition: classic_protocol_codec_message.h:2067
 
friend __base
Definition: classic_protocol_codec_message.h:2080
 
static stdx::expected< std::pair< size_t, value_type >, std::error_code > decode(const net::const_buffer &buffer, capabilities::value_type caps)
Definition: classic_protocol_codec_message.h:2096
 
constexpr Codec(value_type, capabilities::value_type caps)
Definition: classic_protocol_codec_message.h:1584
 
static constexpr capabilities::value_type depends_on_capabilities() noexcept
capabilities the codec depends on.
Definition: classic_protocol_codec_message.h:1593
 
constexpr static uint8_t cmd_byte() noexcept
Definition: classic_protocol_codec_message.h:1586
 
const value_type v_
Definition: classic_protocol_codec_message.h:2003
 
friend __base
Definition: classic_protocol_codec_message.h:1880
 
auto accumulate_fields(Accumulator &&accu) const
Definition: classic_protocol_codec_message.h:1716
 
static stdx::expected< std::pair< size_t, value_type >, std::error_code > decode(const net::const_buffer &buffer, capabilities::value_type caps)
Definition: classic_protocol_codec_message.h:1896
 
constexpr static uint8_t cmd_byte() noexcept
Definition: classic_protocol_codec_message.h:1885
 
static constexpr capabilities::value_type depends_on_capabilities() noexcept
capabilities the codec depends on.
Definition: classic_protocol_codec_message.h:1892
 
static stdx::expected< size_t, std::error_code > decode_field_size(Accu &accu, uint8_t type)
Definition: classic_protocol_codec_message.h:1822
 
constexpr Codec(value_type v, capabilities::value_type caps)
Definition: classic_protocol_codec_message.h:1882
 
constexpr static uint8_t cmd_byte() noexcept
Definition: classic_protocol_codec_message.h:1535
 
constexpr Codec(value_type, capabilities::value_type caps)
Definition: classic_protocol_codec_message.h:1533
 
static constexpr capabilities::value_type depends_on_capabilities() noexcept
capabilities the codec depends on.
Definition: classic_protocol_codec_message.h:1542
 
constexpr auto accumulate_fields(Accumulator &&accu) const
Definition: classic_protocol_codec_message.h:3600
 
const value_type v_
Definition: classic_protocol_codec_message.h:3682
 
constexpr static uint8_t cmd_byte() noexcept
Definition: classic_protocol_codec_message.h:3625
 
constexpr Codec(value_type v, capabilities::value_type caps)
Definition: classic_protocol_codec_message.h:3622
 
friend __base
Definition: classic_protocol_codec_message.h:3620
 
static stdx::expected< std::pair< size_t, value_type >, std::error_code > decode(const net::const_buffer &buffer, capabilities::value_type caps)
Definition: classic_protocol_codec_message.h:3636
 
static constexpr capabilities::value_type depends_on_capabilities() noexcept
capabilities the codec depends on.
Definition: classic_protocol_codec_message.h:3632
 
static constexpr capabilities::value_type depends_on_capabilities() noexcept
capabilities the codec depends on.
Definition: classic_protocol_codec_message.h:2153
 
constexpr auto accumulate_fields(Accumulator &&accu) const
Definition: classic_protocol_codec_message.h:2129
 
constexpr static uint8_t cmd_byte() noexcept
Definition: classic_protocol_codec_message.h:2146
 
constexpr Codec(value_type v, capabilities::value_type caps)
Definition: classic_protocol_codec_message.h:2143
 
friend __base
Definition: classic_protocol_codec_message.h:2141
 
static stdx::expected< std::pair< size_t, value_type >, std::error_code > decode(const net::const_buffer &buffer, capabilities::value_type caps)
Definition: classic_protocol_codec_message.h:2157
 
const value_type v_
Definition: classic_protocol_codec_message.h:2177
 
constexpr Codec(value_type, capabilities::value_type caps)
Definition: classic_protocol_codec_message.h:1559
 
constexpr static uint8_t cmd_byte() noexcept
Definition: classic_protocol_codec_message.h:1561
 
static constexpr capabilities::value_type depends_on_capabilities() noexcept
capabilities the codec depends on.
Definition: classic_protocol_codec_message.h:1568
 
static stdx::expected< std::pair< size_t, value_type >, std::error_code > decode(const net::const_buffer &buffer, capabilities::value_type caps)
Definition: classic_protocol_codec_message.h:2042
 
constexpr auto accumulate_fields(Accumulator &&accu) const
Definition: classic_protocol_codec_message.h:2020
 
static constexpr capabilities::value_type depends_on_capabilities() noexcept
capabilities the codec depends on.
Definition: classic_protocol_codec_message.h:2038
 
friend __base
Definition: classic_protocol_codec_message.h:2030
 
constexpr Codec(value_type v, capabilities::value_type caps)
Definition: classic_protocol_codec_message.h:2032
 
const value_type v_
Definition: classic_protocol_codec_message.h:2056
 
const value_type v_
Definition: classic_protocol_codec_message.h:2919
 
static stdx::expected< std::pair< size_t, value_type >, std::error_code > decode(const net::const_buffer &buffer, capabilities::value_type caps)
Definition: classic_protocol_codec_message.h:2898
 
constexpr Codec(value_type v, capabilities::value_type caps)
Definition: classic_protocol_codec_message.h:2884
 
static constexpr capabilities::value_type depends_on_capabilities() noexcept
capabilities the codec depends on.
Definition: classic_protocol_codec_message.h:2894
 
constexpr auto accumulate_fields(Accumulator &&accu) const
Definition: classic_protocol_codec_message.h:2870
 
constexpr static uint8_t cmd_byte() noexcept
Definition: classic_protocol_codec_message.h:2887
 
friend __base
Definition: classic_protocol_codec_message.h:2882
 
static constexpr capabilities::value_type depends_on_capabilities() noexcept
capabilities the codec depends on.
Definition: classic_protocol_codec_message.h:1618
 
constexpr Codec(value_type, capabilities::value_type caps)
Definition: classic_protocol_codec_message.h:1609
 
constexpr static uint8_t cmd_byte() noexcept
Definition: classic_protocol_codec_message.h:1611
 
static constexpr capabilities::value_type depends_on_capabilities() noexcept
capabilities the codec depends on.
Definition: classic_protocol_codec_message.h:2776
 
friend __base
Definition: classic_protocol_codec_message.h:2764
 
const value_type v_
Definition: classic_protocol_codec_message.h:2801
 
constexpr static uint8_t cmd_byte() noexcept
Definition: classic_protocol_codec_message.h:2769
 
constexpr auto accumulate_fields(Accumulator &&accu) const
Definition: classic_protocol_codec_message.h:2752
 
static stdx::expected< std::pair< size_t, value_type >, std::error_code > decode(const net::const_buffer &buffer, capabilities::value_type caps)
Definition: classic_protocol_codec_message.h:2780
 
constexpr Codec(value_type v, capabilities::value_type caps)
Definition: classic_protocol_codec_message.h:2766
 
static constexpr capabilities::value_type depends_on_capabilities() noexcept
capabilities the codec depends on.
Definition: classic_protocol_codec_message.h:2429
 
friend __base
Definition: classic_protocol_codec_message.h:2417
 
const value_type v_
Definition: classic_protocol_codec_message.h:2677
 
static stdx::expected< std::pair< size_t, value_type >, std::error_code > decode(const net::const_buffer &buffer, capabilities::value_type caps, Func &&metadata_lookup)
decode a buffer into a message::client::StmtExecute.
Definition: classic_protocol_codec_message.h:2477
 
auto accumulate_fields(Accumulator &&accu) const
Definition: classic_protocol_codec_message.h:2312
 
constexpr static uint8_t cmd_byte() noexcept
Definition: classic_protocol_codec_message.h:2422
 
constexpr Codec(value_type val, capabilities::value_type caps)
Definition: classic_protocol_codec_message.h:2419
 
static stdx::expected< std::pair< size_t, value_type >, std::error_code > decode(const net::const_buffer &buffer, capabilities::value_type caps)
Definition: classic_protocol_codec_message.h:2958
 
constexpr static uint8_t cmd_byte() noexcept
Definition: classic_protocol_codec_message.h:2947
 
const value_type v_
Definition: classic_protocol_codec_message.h:2981
 
constexpr auto accumulate_fields(Accumulator &&accu) const
Definition: classic_protocol_codec_message.h:2929
 
constexpr Codec(value_type v, capabilities::value_type caps)
Definition: classic_protocol_codec_message.h:2944
 
friend __base
Definition: classic_protocol_codec_message.h:2942
 
static constexpr capabilities::value_type depends_on_capabilities() noexcept
capabilities the codec depends on.
Definition: classic_protocol_codec_message.h:2954
 
constexpr Codec(value_type v, capabilities::value_type caps)
Definition: classic_protocol_codec_message.h:2704
 
constexpr static uint8_t cmd_byte() noexcept
Definition: classic_protocol_codec_message.h:2707
 
friend __base
Definition: classic_protocol_codec_message.h:2702
 
const value_type v_
Definition: classic_protocol_codec_message.h:2742
 
static constexpr capabilities::value_type depends_on_capabilities() noexcept
capabilities the codec depends on.
Definition: classic_protocol_codec_message.h:2714
 
static stdx::expected< std::pair< size_t, value_type >, std::error_code > decode(const net::const_buffer &buffer, capabilities::value_type caps)
Definition: classic_protocol_codec_message.h:2718
 
constexpr auto accumulate_fields(Accumulator &&accu) const
Definition: classic_protocol_codec_message.h:2688
 
constexpr static uint8_t cmd_byte() noexcept
Definition: classic_protocol_codec_message.h:2269
 
static stdx::expected< std::pair< size_t, value_type >, std::error_code > decode(const net::const_buffer &buffer, capabilities::value_type caps)
Definition: classic_protocol_codec_message.h:2280
 
const value_type v_
Definition: classic_protocol_codec_message.h:2301
 
constexpr Codec(value_type v, capabilities::value_type caps)
Definition: classic_protocol_codec_message.h:2266
 
static constexpr capabilities::value_type depends_on_capabilities() noexcept
capabilities the codec depends on.
Definition: classic_protocol_codec_message.h:2276
 
constexpr auto accumulate_fields(Accumulator &&accu) const
Definition: classic_protocol_codec_message.h:2252
 
friend __base
Definition: classic_protocol_codec_message.h:2264
 
constexpr static uint8_t cmd_byte() noexcept
Definition: classic_protocol_codec_message.h:2828
 
static stdx::expected< std::pair< size_t, value_type >, std::error_code > decode(const net::const_buffer &buffer, capabilities::value_type caps)
Definition: classic_protocol_codec_message.h:2839
 
constexpr auto accumulate_fields(Accumulator &&accu) const
Definition: classic_protocol_codec_message.h:2811
 
friend __base
Definition: classic_protocol_codec_message.h:2823
 
static constexpr capabilities::value_type depends_on_capabilities() noexcept
capabilities the codec depends on.
Definition: classic_protocol_codec_message.h:2835
 
const value_type v_
Definition: classic_protocol_codec_message.h:2860
 
constexpr Codec(value_type v, capabilities::value_type caps)
Definition: classic_protocol_codec_message.h:2825
 
constexpr Codec(value_type v, capabilities::value_type caps)
Definition: classic_protocol_codec_message.h:332
 
const value_type v_
Definition: classic_protocol_codec_message.h:365
 
constexpr auto accumulate_fields(Accumulator &&accu) const
Definition: classic_protocol_codec_message.h:318
 
borrowable::message::server::AuthMethodData< Borrowed > value_type
Definition: classic_protocol_codec_message.h:327
 
static constexpr uint8_t cmd_byte() noexcept
Definition: classic_protocol_codec_message.h:335
 
static constexpr capabilities::value_type depends_on_capabilities() noexcept
capabilities the codec depends on.
Definition: classic_protocol_codec_message.h:340
 
static stdx::expected< std::pair< size_t, value_type >, std::error_code > decode(const net::const_buffer &buffer, capabilities::value_type caps)
Definition: classic_protocol_codec_message.h:344
 
friend __base
Definition: classic_protocol_codec_message.h:330
 
friend __base
Definition: classic_protocol_codec_message.h:264
 
borrowable::message::server::AuthMethodSwitch< Borrowed > value_type
Definition: classic_protocol_codec_message.h:261
 
constexpr Codec(value_type v, capabilities::value_type caps)
Definition: classic_protocol_codec_message.h:266
 
constexpr auto accumulate_fields(Accumulator &&accu) const
Definition: classic_protocol_codec_message.h:247
 
static stdx::expected< std::pair< size_t, value_type >, std::error_code > decode(const net::const_buffer &buffer, capabilities::value_type caps)
Definition: classic_protocol_codec_message.h:278
 
static constexpr uint8_t cmd_byte() noexcept
Definition: classic_protocol_codec_message.h:269
 
const value_type v_
Definition: classic_protocol_codec_message.h:307
 
static constexpr capabilities::value_type depends_on_capabilities() noexcept
capabilities the codec depends on.
Definition: classic_protocol_codec_message.h:274
 
borrowable::message::server::ColumnCount value_type
Definition: classic_protocol_codec_message.h:785
 
constexpr Codec(value_type v, capabilities::value_type caps)
Definition: classic_protocol_codec_message.h:790
 
friend __base
Definition: classic_protocol_codec_message.h:788
 
const value_type v_
Definition: classic_protocol_codec_message.h:811
 
constexpr auto accumulate_fields(Accumulator &&accu) const
Definition: classic_protocol_codec_message.h:778
 
static constexpr size_t max_size() noexcept
Definition: classic_protocol_codec_message.h:793
 
static stdx::expected< std::pair< size_t, value_type >, std::error_code > decode(const net::const_buffer &buffer, capabilities::value_type caps)
Definition: classic_protocol_codec_message.h:797
 
borrowable::message::server::Eof< Borrowed > value_type
Definition: classic_protocol_codec_message.h:560
 
const value_type v_
Definition: classic_protocol_codec_message.h:667
 
friend __base
Definition: classic_protocol_codec_message.h:563
 
static constexpr capabilities::value_type depends_on_capabilities() noexcept
capabilities the codec depends on.
Definition: classic_protocol_codec_message.h:573
 
constexpr Codec(value_type v, capabilities::value_type caps)
Definition: classic_protocol_codec_message.h:565
 
constexpr auto accumulate_fields(Accumulator &&accu) const
Definition: classic_protocol_codec_message.h:518
 
static constexpr uint8_t cmd_byte() noexcept
Definition: classic_protocol_codec_message.h:568
 
static stdx::expected< std::pair< size_t, value_type >, std::error_code > decode(const net::const_buffer &buffer, capabilities::value_type caps)
decode a server::Eof message from a buffer-sequence.
Definition: classic_protocol_codec_message.h:598
 
friend __base
Definition: classic_protocol_codec_message.h:716
 
static constexpr uint8_t cmd_byte()
Definition: classic_protocol_codec_message.h:721
 
constexpr Codec(value_type v, capabilities::value_type caps)
Definition: classic_protocol_codec_message.h:718
 
static constexpr capabilities::value_type depends_on_capabilities() noexcept
capabilities the codec depends on.
Definition: classic_protocol_codec_message.h:726
 
static stdx::expected< std::pair< size_t, value_type >, std::error_code > decode(const net::const_buffer &buffer, capabilities::value_type caps)
Definition: classic_protocol_codec_message.h:734
 
borrowable::message::server::Error< Borrowed > value_type
Definition: classic_protocol_codec_message.h:713
 
const value_type v_
Definition: classic_protocol_codec_message.h:768
 
static constexpr size_t max_size() noexcept
Definition: classic_protocol_codec_message.h:730
 
constexpr auto accumulate_fields(Accumulator &&accu) const
Definition: classic_protocol_codec_message.h:699
 
const value_type v_
Definition: classic_protocol_codec_message.h:236
 
friend __base
Definition: classic_protocol_codec_message.h:132
 
constexpr Codec(value_type v, capabilities::value_type caps)
Definition: classic_protocol_codec_message.h:134
 
static stdx::expected< std::pair< size_t, value_type >, std::error_code > decode(const net::const_buffer &buffer, capabilities::value_type caps)
Definition: classic_protocol_codec_message.h:137
 
constexpr auto accumulate_fields(Accumulator &&accu) const
Definition: classic_protocol_codec_message.h:86
 
borrowable::message::server::Greeting< Borrowed > value_type
Definition: classic_protocol_codec_message.h:129
 
static constexpr capabilities::value_type depends_on_capabilities() noexcept
capabilities the codec depends on.
Definition: classic_protocol_codec_message.h:420
 
const value_type v_
Definition: classic_protocol_codec_message.h:492
 
borrowable::message::server::Ok< Borrowed > value_type
Definition: classic_protocol_codec_message.h:407
 
constexpr auto accumulate_fields(Accumulator &&accu) const
Definition: classic_protocol_codec_message.h:376
 
constexpr Codec(value_type v, capabilities::value_type caps)
Definition: classic_protocol_codec_message.h:412
 
static stdx::expected< std::pair< size_t, value_type >, std::error_code > decode(const net::const_buffer &buffer, capabilities::value_type caps)
decode a server::Ok message from a buffer-sequence.
Definition: classic_protocol_codec_message.h:440
 
friend __base
Definition: classic_protocol_codec_message.h:410
 
static constexpr uint8_t cmd_byte() noexcept
Definition: classic_protocol_codec_message.h:415
 
static size_t max_size() noexcept
Definition: classic_protocol_codec_message.h:1173
 
Codec(value_type v, capabilities::value_type caps)
Definition: classic_protocol_codec_message.h:1170
 
const value_type v_
Definition: classic_protocol_codec_message.h:1206
 
auto accumulate_fields(Accumulator &&accu) const
Definition: classic_protocol_codec_message.h:1150
 
static stdx::expected< std::pair< size_t, value_type >, std::error_code > decode(const net::const_buffer &buffer, capabilities::value_type caps)
Definition: classic_protocol_codec_message.h:1177
 
borrowable::message::server::Row< Borrowed > value_type
Definition: classic_protocol_codec_message.h:1165
 
friend __base
Definition: classic_protocol_codec_message.h:1168
 
static constexpr capabilities::value_type depends_on_capabilities() noexcept
capabilities the codec depends on.
Definition: classic_protocol_codec_message.h:1018
 
const value_type v_
Definition: classic_protocol_codec_message.h:1043
 
constexpr Codec(value_type v, capabilities::value_type caps)
Definition: classic_protocol_codec_message.h:1010
 
friend __base
Definition: classic_protocol_codec_message.h:1008
 
borrowable::message::server::SendFileRequest< Borrowed > value_type
Definition: classic_protocol_codec_message.h:1005
 
static stdx::expected< std::pair< size_t, value_type >, std::error_code > decode(const net::const_buffer &buffer, capabilities::value_type caps)
Definition: classic_protocol_codec_message.h:1022
 
static constexpr uint8_t cmd_byte() noexcept
Definition: classic_protocol_codec_message.h:1013
 
constexpr auto accumulate_fields(Accumulator &&accu) const
Definition: classic_protocol_codec_message.h:996
 
const value_type v_
Definition: classic_protocol_codec_message.h:1445
 
constexpr Codec(value_type v, capabilities::value_type caps)
Definition: classic_protocol_codec_message.h:1427
 
borrowable::message::server::Statistics< Borrowed > value_type
Definition: classic_protocol_codec_message.h:1422
 
friend __base
Definition: classic_protocol_codec_message.h:1425
 
static stdx::expected< std::pair< size_t, value_type >, std::error_code > decode(const net::const_buffer &buffer, capabilities::value_type caps)
Definition: classic_protocol_codec_message.h:1430
 
constexpr auto accumulate_fields(Accumulator &&accu) const
Definition: classic_protocol_codec_message.h:1415
 
constexpr static uint8_t cmd_byte() noexcept
Definition: classic_protocol_codec_message.h:1095
 
static stdx::expected< std::pair< size_t, value_type >, std::error_code > decode(const net::const_buffer &buffer, capabilities::value_type caps)
Definition: classic_protocol_codec_message.h:1104
 
friend __base
Definition: classic_protocol_codec_message.h:1090
 
constexpr Codec(value_type v, capabilities::value_type caps)
Definition: classic_protocol_codec_message.h:1092
 
static constexpr capabilities::value_type depends_on_capabilities() noexcept
capabilities the codec depends on.
Definition: classic_protocol_codec_message.h:1100
 
borrowable::message::server::StmtPrepareOk value_type
Definition: classic_protocol_codec_message.h:1087
 
constexpr auto accumulate_fields(Accumulator &&accu) const
Definition: classic_protocol_codec_message.h:1069
 
const value_type v_
Definition: classic_protocol_codec_message.h:1139
 
const value_type v_
Definition: classic_protocol_codec_message.h:1404
 
Codec(value_type v, capabilities::value_type caps)
Definition: classic_protocol_codec_message.h:1298
 
borrowable::message::server::StmtRow< Borrowed > value_type
Definition: classic_protocol_codec_message.h:1293
 
static stdx::expected< std::pair< size_t, value_type >, std::error_code > decode(const net::const_buffer &buffer, capabilities::value_type caps, std::vector< field_type::value_type > types)
Definition: classic_protocol_codec_message.h:1305
 
static size_t max_size() noexcept
Definition: classic_protocol_codec_message.h:1301
 
auto accumulate_fields(Accumulator &&accu) const
Definition: classic_protocol_codec_message.h:1228
 
friend __base
Definition: classic_protocol_codec_message.h:1296
 
Codec for a type.
Definition: classic_protocol_codec_base.h:72
 
Definition: classic_protocol_message.h:1273
 
Definition: classic_protocol_message.h:1335
 
Definition: classic_protocol_message.h:1307
 
Definition: classic_protocol_message.h:888
 
Definition: classic_protocol_message.h:1304
 
Definition: classic_protocol_message.h:1268
 
Definition: classic_protocol_message.h:684
 
Definition: classic_protocol_message.h:863
 
Definition: classic_protocol_message.h:976
 
Definition: classic_protocol_message.h:826
 
Definition: classic_protocol_message.h:1263
 
Definition: classic_protocol_message.h:786
 
Definition: classic_protocol_message.h:1258
 
Definition: classic_protocol_message.h:1367
 
Definition: classic_protocol_message.h:954
 
Definition: classic_protocol_message.h:941
 
Definition: classic_protocol_message.h:996
 
set options on the current connection.
Definition: classic_protocol_message.h:1238
 
Definition: classic_protocol_message.h:948
 
close a prepared statement.
Definition: classic_protocol_message.h:1168
 
execute a prepared statement.
Definition: classic_protocol_message.h:1090
 
fetch rows from an executed statement.
Definition: classic_protocol_message.h:1212
 
append data to a parameter of a prepared statement.
Definition: classic_protocol_message.h:1049
 
Definition: classic_protocol_message.h:1021
 
reset a prepared statement.
Definition: classic_protocol_message.h:1190
 
Definition: classic_protocol_wire.h:38
 
Definition: classic_protocol_wire.h:65
 
Generator of decoded Types of a buffer.
Definition: classic_protocol_codec_base.h:150
 
result_type result() const
get result of the step().
Definition: classic_protocol_codec_base.h:216
 
CRTP base for the Codec's encode part.
Definition: classic_protocol_codec_base.h:371
 
constexpr capabilities::value_type caps() const noexcept
Definition: classic_protocol_codec_base.h:386
 
size_t size() const noexcept
Definition: buffer.h:120
 
Definition: expected.h:286
 
constexpr const error_type & error() const &
Definition: expected.h:755
 
constexpr value_type & value() &
Definition: expected.h:642
 
a type-safe flags type.
Definition: flags.h:115
 
Definition: expected.h:112
 
constexpr DWORD buf_size
Definition: create_def.cc:229
 
static int flags[50]
Definition: hp_test1.cc:40
 
borrowable::binary::Null Null
Definition: classic_protocol_binary.h:337
 
borrowable::wire::VarInt VarInt
Definition: classic_protocol_wire.h:148
 
Definition: classic_protocol_constants.h:36
 
constexpr value_type text_result_with_session_tracking
Definition: classic_protocol_constants.h:62
 
constexpr value_type long_flag
Definition: classic_protocol_constants.h:40
 
constexpr value_type transactions
Definition: classic_protocol_constants.h:51
 
constexpr value_type plugin_auth
Definition: classic_protocol_constants.h:57
 
constexpr value_type session_track
Definition: classic_protocol_constants.h:61
 
constexpr value_type optional_resultset_metadata
Definition: classic_protocol_constants.h:63
 
constexpr value_type query_attributes
Definition: classic_protocol_constants.h:65
 
constexpr value_type connect_attributes
Definition: classic_protocol_constants.h:58
 
constexpr value_type client_auth_method_data_varint
Definition: classic_protocol_constants.h:59
 
constexpr value_type ssl
Definition: classic_protocol_constants.h:49
 
constexpr value_type connect_with_schema
Definition: classic_protocol_constants.h:41
 
constexpr value_type secure_connection
Definition: classic_protocol_constants.h:53
 
constexpr value_type protocol_41
Definition: classic_protocol_constants.h:47
 
constexpr value_type client_auth_method_data_varint
Definition: classic_protocol_constants.h:130
 
constexpr value_type connect_attributes
Definition: classic_protocol_constants.h:128
 
constexpr value_type plugin_auth
Definition: classic_protocol_constants.h:126
 
constexpr value_type ssl
Definition: classic_protocol_constants.h:110
 
constexpr value_type protocol_41
Definition: classic_protocol_constants.h:104
 
constexpr value_type transactions
Definition: classic_protocol_constants.h:113
 
constexpr value_type optional_resultset_metadata
Definition: classic_protocol_constants.h:142
 
constexpr value_type text_result_with_session_tracking
Definition: classic_protocol_constants.h:137
 
constexpr value_type secure_connection
Definition: classic_protocol_constants.h:116
 
constexpr value_type query_attributes
Definition: classic_protocol_constants.h:145
 
std::bitset< 32 > value_type
Definition: classic_protocol_constants.h:73
 
constexpr value_type connect_with_schema
Definition: classic_protocol_constants.h:86
 
constexpr value_type session_track
Definition: classic_protocol_constants.h:135
 
constexpr value_type param_count_available
Definition: classic_protocol_constants.h:216
 
constexpr value_type Short
Definition: classic_protocol_constants.h:233
 
constexpr value_type DateTime
Definition: classic_protocol_constants.h:243
 
constexpr value_type LongLong
Definition: classic_protocol_constants.h:239
 
constexpr value_type Varchar
Definition: classic_protocol_constants.h:246
 
constexpr value_type NewDecimal
Definition: classic_protocol_constants.h:253
 
constexpr value_type Time
Definition: classic_protocol_constants.h:242
 
constexpr value_type Decimal
Definition: classic_protocol_constants.h:231
 
constexpr value_type VarString
Definition: classic_protocol_constants.h:260
 
constexpr value_type MediumBlob
Definition: classic_protocol_constants.h:257
 
constexpr value_type String
Definition: classic_protocol_constants.h:261
 
constexpr value_type Set
Definition: classic_protocol_constants.h:255
 
constexpr value_type Geometry
Definition: classic_protocol_constants.h:262
 
constexpr value_type Bit
Definition: classic_protocol_constants.h:247
 
constexpr value_type Tiny
Definition: classic_protocol_constants.h:232
 
constexpr value_type TinyBlob
Definition: classic_protocol_constants.h:256
 
constexpr value_type Json
Definition: classic_protocol_constants.h:252
 
constexpr value_type Int24
Definition: classic_protocol_constants.h:240
 
constexpr value_type Enum
Definition: classic_protocol_constants.h:254
 
constexpr value_type Long
Definition: classic_protocol_constants.h:234
 
constexpr value_type Double
Definition: classic_protocol_constants.h:236
 
constexpr value_type Year
Definition: classic_protocol_constants.h:244
 
constexpr value_type Timestamp
Definition: classic_protocol_constants.h:238
 
constexpr value_type LongBlob
Definition: classic_protocol_constants.h:258
 
constexpr value_type Blob
Definition: classic_protocol_constants.h:259
 
constexpr value_type Date
Definition: classic_protocol_constants.h:241
 
constexpr value_type Float
Definition: classic_protocol_constants.h:235
 
borrowable::message::client::StmtFetch StmtFetch
Definition: classic_protocol_message.h:1446
 
borrowable::message::client::StmtReset StmtReset
Definition: classic_protocol_message.h:1441
 
borrowable::message::client::Reload Reload
Definition: classic_protocol_message.h:1436
 
borrowable::message::client::SetOption SetOption
Definition: classic_protocol_message.h:1445
 
borrowable::message::client::Kill Kill
Definition: classic_protocol_message.h:1434
 
borrowable::message::client::StmtClose StmtClose
Definition: classic_protocol_message.h:1442
 
borrowable::message::server::AuthMethodSwitch< false > AuthMethodSwitch
Definition: classic_protocol_message.h:1416
 
borrowable::message::server::Error< false > Error
Definition: classic_protocol_message.h:1411
 
borrowable::message::server::StmtPrepareOk StmtPrepareOk
Definition: classic_protocol_message.h:1421
 
borrowable::message::server::Greeting< false > Greeting
Definition: classic_protocol_message.h:1413
 
borrowable::message::server::Row< false > Row
Definition: classic_protocol_message.h:1419
 
borrowable::message::server::Eof< false > Eof
Definition: classic_protocol_message.h:1412
 
borrowable::message::server::ColumnCount ColumnCount
Definition: classic_protocol_message.h:1414
 
borrowable::message::server::Ok< false > Ok
Definition: classic_protocol_message.h:1410
 
borrowable::message::server::AuthMethodData< false > AuthMethodData
Definition: classic_protocol_message.h:1417
 
borrowable::message::server::Statistics< false > Statistics
Definition: classic_protocol_message.h:1422
 
borrowable::message::server::StmtRow< false > StmtRow
Definition: classic_protocol_message.h:1420
 
borrowable::message::server::SendFileRequest< false > SendFileRequest
Definition: classic_protocol_message.h:1418
 
borrowable::message::server::ColumnMeta< false > ColumnMeta
Definition: classic_protocol_message.h:1415
 
constexpr value_type session_state_changed
Definition: classic_protocol_constants.h:165
 
constexpr value_type session_state_changed
Definition: classic_protocol_constants.h:207
 
Definition: classic_protocol_binary.h:39
 
std::error_code make_error_code(codec_errc e) noexcept
Definition: classic_protocol_codec_error.h:86
 
CommandByte
Definition: classic_protocol_codec_message.h:1487
 
constexpr size_t bytes_per_bits(size_t bits)
Definition: classic_protocol_codec_base.h:55
 
ValueType max(X &&first)
Definition: gtid.h:103
 
mutable_buffer buffer(void *p, size_t n) noexcept
Definition: buffer.h:418
 
size_t buffer_size(const ConstBufferSequence &buffers) noexcept
Definition: buffer.h:313
 
Definition: gcs_xcom_synode.h:64
 
constexpr auto enumerate(T &&iterable)
Definition: ranges.h:143
 
unexpected(E) -> unexpected< E >
 
required string type
Definition: replication_group_member_actions.proto:34
 
int n
Definition: xcom_base.cc:509