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