25#ifndef MYSQL_ROUTER_CLASSIC_PROTOCOL_CODEC_MESSAGE_H_
26#define MYSQL_ROUTER_CLASSIC_PROTOCOL_CODEC_MESSAGE_H_
30#include <system_error>
78template <
bool Borrowed>
81 Codec<borrowable::message::server::Greeting<Borrowed>>> {
82 template <
class Accumulator>
84 namespace bw = borrowable::wire;
86 if (v_.protocol_version() == 0x09) {
87 return accu.step(bw::FixedInt<1>(v_.protocol_version()))
88 .step(bw::NulTermString<Borrowed>(v_.version()))
89 .step(bw::FixedInt<4>(v_.connection_id()))
90 .step(bw::NulTermString<Borrowed>(v_.auth_method_data().substr(0, 8)))
93 uint8_t auth_method_data_size{0};
95 auth_method_data_size = v_.auth_method_data().size();
98 accu.step(bw::FixedInt<1>(v_.protocol_version()))
99 .step(bw::NulTermString<Borrowed>(v_.version()))
100 .step(bw::FixedInt<4>(v_.connection_id()))
101 .step(bw::NulTermString<Borrowed>(v_.auth_method_data().substr(0, 8)))
102 .step(bw::FixedInt<2>(v_.capabilities().to_ulong() & 0xffff));
104 if ((v_.capabilities().to_ullong() >= (1 << 16)) ||
105 v_.status_flags().any() || (v_.collation() != 0)) {
106 accu.step(bw::FixedInt<1>(v_.collation()))
107 .step(bw::FixedInt<2>(v_.status_flags().to_ulong()))
109 bw::FixedInt<2>((v_.capabilities().to_ulong() >> 16) & 0xffff))
110 .step(bw::FixedInt<1>(auth_method_data_size))
111 .step(bw::String<Borrowed>(std::string(10,
'\0')));
112 if (v_.capabilities()
114 accu.step(bw::String<Borrowed>(v_.auth_method_data().substr(8)));
115 if (v_.capabilities()
117 accu.step(bw::NulTermString<Borrowed>(v_.auth_method_name()));
121 return accu.result();
126 using value_type = borrowable::message::server::Greeting<Borrowed>;
138 namespace bw = borrowable::wire;
141 auto protocol_version_res = accu.template step<bw::FixedInt<1>>();
144 if (protocol_version_res->value() != 0x09 &&
145 protocol_version_res->value() != 0x0a) {
149 auto version_res = accu.template step<bw::NulTermString<Borrowed>>();
150 auto connection_id_res = accu.template step<bw::FixedInt<4>>();
151 auto auth_method_data_res =
152 accu.template step<bw::NulTermString<Borrowed>>();
154 if (protocol_version_res->value() == 0x09) {
155 return std::make_pair(
157 value_type(protocol_version_res->value(), version_res->value(),
158 connection_id_res->value(), auth_method_data_res->value(),
163 auto cap_lower_res = accu.template step<bw::FixedInt<2>>();
168 return std::make_pair(
170 value_type(protocol_version_res->value(), version_res->value(),
171 connection_id_res->value(),
172 auth_method_data_res->value(), cap_lower_res->value(),
177 auto collation_res = accu.template step<bw::FixedInt<1>>();
178 auto status_flags_res = accu.template step<bw::FixedInt<2>>();
179 auto cap_hi_res = accu.template step<bw::FixedInt<2>>();
185 cap_lower_res->value() | (cap_hi_res->value() << 16));
187 size_t auth_method_data_len{13};
189 auto auth_method_data_len_res = accu.template step<bw::FixedInt<1>>();
193 if (auth_method_data_len_res->value() < 8) {
197 auth_method_data_len = auth_method_data_len_res->value() - 8;
199 accu.template step<void>(1);
202 accu.template step<void>(10);
205 auth_method_data_2_res;
211 auth_method_data_2_res =
212 accu.template step<bw::String<Borrowed>>(auth_method_data_len);
216 auth_method_res = accu.template step<bw::NulTermString<Borrowed>>();
222 return std::make_pair(
225 protocol_version_res->value(), version_res->value(),
226 connection_id_res->value(),
227 auth_method_data_res->value() + auth_method_data_2_res->
value(),
228 capabilities, collation_res->value(), status_flags_res->value(),
229 auth_method_res->
value()));
240template <
bool Borrowed>
243 Codec<borrowable::message::server::AuthMethodSwitch<Borrowed>>> {
244 template <
class Accumulator>
246 namespace bw = borrowable::wire;
248 accu.step(bw::FixedInt<1>(cmd_byte()));
251 accu.step(bw::NulTermString<Borrowed>(v_.auth_method()))
252 .step(bw::String<Borrowed>(v_.auth_method_data()));
255 return accu.result();
259 using value_type = borrowable::message::server::AuthMethodSwitch<Borrowed>;
267 static constexpr uint8_t
cmd_byte() noexcept {
return 0xfe; }
273 namespace bw = borrowable::wire;
276 auto cmd_byte_res = accu.template step<bw::FixedInt<1>>();
279 if (cmd_byte_res->value() != cmd_byte()) {
287 auto auth_method_res = accu.template step<bw::NulTermString<Borrowed>>();
288 auto auth_method_data_res = accu.template step<bw::String<Borrowed>>();
292 return std::make_pair(
294 value_type(auth_method_res->value(), auth_method_data_res->value()));
304template <
bool Borrowed>
307 Codec<borrowable::message::server::AuthMethodData<Borrowed>>> {
308 template <
class Accumulator>
310 namespace bw = borrowable::wire;
312 return accu.step(bw::FixedInt<1>(cmd_byte()))
313 .step(bw::String<Borrowed>(v_.auth_method_data()))
318 using value_type = borrowable::message::server::AuthMethodData<Borrowed>;
326 static constexpr uint8_t
cmd_byte() noexcept {
return 0x01; }
332 namespace bw = borrowable::wire;
334 auto cmd_byte_res = accu.template step<bw::FixedInt<1>>();
337 if (cmd_byte_res->value() != cmd_byte()) {
340 auto auth_method_data_res = accu.template step<bw::String<Borrowed>>();
355template <
bool Borrowed>
358 Codec<borrowable::message::server::Ok<Borrowed>>> {
359 template <
class Accumulator>
361 namespace bw = borrowable::wire;
363 accu.step(bw::FixedInt<1>(cmd_byte()))
369 accu.step(bw::FixedInt<2>(v_.status_flags().to_ulong()));
371 accu.step(bw::FixedInt<2>(v_.warning_count()));
376 accu.step(bw::VarString<Borrowed>(v_.message()));
378 accu.step(bw::VarString<Borrowed>(v_.session_changes()));
381 accu.step(bw::String<Borrowed>(v_.message()));
384 return accu.result();
388 using value_type = borrowable::message::server::Ok<Borrowed>;
396 static constexpr uint8_t
cmd_byte() noexcept {
return 0x00; }
417 namespace bw = borrowable::wire;
419 auto cmd_byte_res = accu.template step<bw::FixedInt<1>>();
422 if (cmd_byte_res->value() != cmd_byte()) {
426 auto affected_rows_res = accu.template step<bw::VarInt>();
427 auto last_insert_id_res = accu.template step<bw::VarInt>();
433 status_flags_res = accu.template step<bw::FixedInt<2>>();
435 warning_count_res = accu.template step<bw::FixedInt<2>>();
444 const auto var_message_res =
445 accu.template try_step<bw::VarString<Borrowed>>();
446 if (var_message_res) {
448 message_res = var_message_res.
value();
451 if (status_flags_res->
value() &
453 session_changes_res = accu.template step<bw::VarString<Borrowed>>();
456 message_res = accu.template step<bw::String<Borrowed>>();
461 return std::make_pair(
463 value_type(affected_rows_res->value(), last_insert_id_res->value(),
464 status_flags_res->
value(), warning_count_res->
value(),
465 message_res->
value(), session_changes_res->
value()));
490template <
bool Borrowed>
493 Codec<borrowable::message::server::Eof<Borrowed>>> {
494 template <
class Accumulator>
496 namespace bw = borrowable::wire;
498 accu.step(bw::FixedInt<1>(cmd_byte()));
500 auto shared_caps = this->caps();
502 if (shared_caps.test(
509 accu.step(bw::FixedInt<2>(v_.status_flags().to_ulong()));
511 accu.step(bw::FixedInt<2>(v_.warning_count()));
516 if (!v_.message().empty() ||
520 accu.step(bw::VarString<Borrowed>(v_.message()));
522 accu.step(bw::VarString<Borrowed>(v_.session_changes()));
526 accu.step(bw::String<Borrowed>(v_.message()));
529 accu.step(bw::FixedInt<2>(v_.warning_count()))
530 .step(bw::FixedInt<2>(v_.status_flags().to_ulong()));
533 return accu.result();
537 using value_type = borrowable::message::server::Eof<Borrowed>;
545 static constexpr uint8_t
cmd_byte() noexcept {
return 0xfe; }
570 namespace bw = borrowable::wire;
572 const auto cmd_byte_res = accu.template step<bw::FixedInt<1>>();
575 if (cmd_byte_res->value() != cmd_byte()) {
580 const auto affected_rows_res = accu.template step<bw::VarInt>();
581 const auto last_insert_id_res = accu.template step<bw::VarInt>();
587 status_flags_res = accu.template step<bw::FixedInt<2>>();
589 warning_count_res = accu.template step<bw::FixedInt<2>>();
595 session_state_info_res;
599 const auto var_message_res =
600 accu.template try_step<bw::VarString<Borrowed>>();
601 if (var_message_res) {
603 message_res = var_message_res.
value();
606 if (status_flags_res->
value() &
608 session_state_info_res =
609 accu.template step<bw::VarString<Borrowed>>();
612 message_res = accu.template step<bw::String<Borrowed>>();
617 return std::make_pair(
619 value_type(affected_rows_res->value(), last_insert_id_res->value(),
620 status_flags_res->
value(), warning_count_res->
value(),
621 message_res->
value(), session_state_info_res->
value()));
623 const auto warning_count_res = accu.template step<bw::FixedInt<2>>();
624 const auto status_flags_res = accu.template step<bw::FixedInt<2>>();
626 return std::make_pair(
628 value_type(status_flags_res->value(), warning_count_res->value()));
662template <
bool Borrowed>
665 Codec<borrowable::message::server::Error<Borrowed>>> {
666 template <
class Accumulator>
668 namespace bw = borrowable::wire;
670 accu.step(bw::FixedInt<1>(cmd_byte()))
671 .step(bw::FixedInt<2>(v_.error_code()));
673 accu.step(bw::FixedInt<1>(
'#'))
674 .step(bw::String<Borrowed>(v_.sql_state()));
677 return accu.step(bw::String<Borrowed>(v_.message())).result();
681 using value_type = borrowable::message::server::Error<Borrowed>;
689 static constexpr uint8_t
cmd_byte() {
return 0xff; }
692 return std::numeric_limits<size_t>::max();
699 namespace bw = borrowable::wire;
701 auto cmd_byte_res = accu.template step<bw::FixedInt<1>>();
704 if (cmd_byte_res->value() != cmd_byte()) {
709 auto error_code_res = accu.template step<bw::FixedInt<2>>();
712 auto sql_state_hash_res = accu.template step<bw::FixedInt<1>>();
713 sql_state_res = accu.template step<bw::String<Borrowed>>(5);
715 auto message_res = accu.template step<bw::String<Borrowed>>();
719 return std::make_pair(
721 value_type(error_code_res->value(), message_res->value(),
722 sql_state_res->value()));
734 :
public impl::EncodeBase<Codec<borrowable::message::server::ColumnCount>> {
735 template <
class Accumulator>
737 namespace bw = borrowable::wire;
739 return accu.step(
bw::VarInt(v_.count())).result();
752 return std::numeric_limits<size_t>::max();
759 namespace bw = borrowable::wire;
761 auto count_res = accu.template step<bw::VarInt>();
778template <
bool Borrowed>
781 Codec<borrowable::message::server::ColumnMeta<Borrowed>>> {
782 template <
class Accumulator>
784 namespace bw = borrowable::wire;
787 accu.step(bw::VarString<Borrowed>(v_.table()))
788 .step(bw::VarString<Borrowed>(v_.name()))
790 .step(bw::FixedInt<3>(v_.column_length()))
792 .step(bw::FixedInt<1>(v_.type()));
796 .step(bw::FixedInt<2>(v_.flags().to_ulong()))
797 .step(bw::FixedInt<1>(v_.decimals()));
800 .step(bw::FixedInt<1>(v_.flags().to_ulong()))
801 .step(bw::FixedInt<1>(v_.decimals()));
804 return accu.result();
806 return accu.step(bw::VarString<Borrowed>(v_.catalog()))
807 .step(bw::VarString<Borrowed>(v_.schema()))
808 .step(bw::VarString<Borrowed>(v_.table()))
809 .step(bw::VarString<Borrowed>(v_.orig_table()))
810 .step(bw::VarString<Borrowed>(v_.name()))
811 .step(bw::VarString<Borrowed>(v_.orig_name()))
813 .step(bw::FixedInt<2>(v_.collation()))
814 .step(bw::FixedInt<4>(v_.column_length()))
815 .step(bw::FixedInt<1>(v_.type()))
816 .step(bw::FixedInt<2>(v_.flags().to_ulong()))
817 .step(bw::FixedInt<1>(v_.decimals()))
818 .step(bw::FixedInt<2>(0))
824 using value_type = borrowable::message::server::ColumnMeta<Borrowed>;
833 return std::numeric_limits<size_t>::max();
840 namespace bw = borrowable::wire;
848 const auto table_res = accu.template step<bw::VarString<Borrowed>>();
849 const auto name_res = accu.template step<bw::VarString<Borrowed>>();
851 const auto column_length_len_res = accu.template step<bw::VarInt>();
854 if (column_length_len_res->value() != 3) {
859 const auto column_length_res = accu.template step<bw::FixedInt<3>>();
860 const auto type_len_res = accu.template step<bw::VarInt>();
863 if (type_len_res->value() != 1) {
868 const auto type_res = accu.template step<bw::FixedInt<1>>();
869 const auto flags_and_decimals_len_res = accu.template step<bw::VarInt>();
872 if (flags_and_decimals_len_res->value() != flags_size + 1) {
879 if (flags_size == 2) {
880 flags_and_decimals_res = accu.template step<bw::FixedInt<3>>();
882 const auto small_flags_and_decimals_res =
883 accu.template step<bw::FixedInt<2>>();
884 if (small_flags_and_decimals_res) {
885 flags_and_decimals_res =
886 bw::FixedInt<3>(small_flags_and_decimals_res->value());
892 const uint16_t
flags =
893 flags_and_decimals_res->
value() & ((1 << (flags_size * 8)) - 1);
894 const uint8_t decimals =
895 flags_and_decimals_res->
value() >> (flags_size * 8);
897 return std::make_pair(
899 value_type({}, {}, table_res->value(), {}, name_res->value(), {}, {},
900 column_length_res->value(), type_res->value(),
flags,
903 const auto catalog_res = accu.template step<bw::VarString<Borrowed>>();
904 const auto schema_res = accu.template step<bw::VarString<Borrowed>>();
905 const auto table_res = accu.template step<bw::VarString<Borrowed>>();
906 const auto orig_table_res = accu.template step<bw::VarString<Borrowed>>();
907 const auto name_res = accu.template step<bw::VarString<Borrowed>>();
908 const auto orig_name_res = accu.template step<bw::VarString<Borrowed>>();
912 const auto other_len_res = accu.template step<bw::VarInt>();
914 if (other_len_res->value() != 12) {
919 const auto collation_res = accu.template step<bw::FixedInt<2>>();
920 const auto column_length_res = accu.template step<bw::FixedInt<4>>();
921 const auto type_res = accu.template step<bw::FixedInt<1>>();
922 const auto flags_res = accu.template step<bw::FixedInt<2>>();
923 const auto decimals_res = accu.template step<bw::FixedInt<1>>();
925 accu.template step<void>(2);
929 return std::make_pair(
931 value_type(catalog_res->value(), schema_res->value(),
932 table_res->value(), orig_table_res->value(),
933 name_res->value(), orig_name_res->value(),
934 collation_res->value(), column_length_res->value(),
935 type_res->value(), flags_res->value(),
936 decimals_res->value()));
953template <
bool Borrowed>
956 Codec<borrowable::message::server::SendFileRequest<Borrowed>>> {
957 template <
class Accumulator>
959 namespace bw = borrowable::wire;
961 return accu.step(bw::FixedInt<1>(cmd_byte()))
962 .step(bw::String<Borrowed>(v_.filename()))
967 using value_type = borrowable::message::server::SendFileRequest<Borrowed>;
975 static constexpr uint8_t
cmd_byte() noexcept {
return 0xfb; }
981 namespace bw = borrowable::wire;
983 auto cmd_byte_res = accu.template step<bw::FixedInt<1>>();
986 if (cmd_byte_res->value() != cmd_byte()) {
990 auto filename_res = accu.template step<bw::String<Borrowed>>();
1022 Codec<borrowable::message::server::StmtPrepareOk>> {
1023 template <
class Accumulator>
1025 namespace bw = borrowable::wire;
1027 accu.step(bw::FixedInt<1>(cmd_byte()))
1028 .step(bw::FixedInt<4>(v_.statement_id()))
1029 .step(bw::FixedInt<2>(v_.column_count()))
1030 .step(bw::FixedInt<2>(v_.param_count()))
1031 .step(bw::FixedInt<1>(0))
1032 .step(bw::FixedInt<2>(v_.warning_count()));
1035 accu.step(bw::FixedInt<1>(v_.with_metadata()));
1038 return accu.result();
1050 constexpr static uint8_t
cmd_byte() noexcept {
return 0x00; }
1056 namespace bw = borrowable::wire;
1058 auto cmd_byte_res = accu.template step<bw::FixedInt<1>>();
1059 auto stmt_id_res = accu.template step<bw::FixedInt<4>>();
1060 auto column_count_res = accu.template step<bw::FixedInt<2>>();
1061 auto param_count_res = accu.template step<bw::FixedInt<2>>();
1062 auto filler_res = accu.template step<bw::FixedInt<1>>();
1063 auto warning_count_res = accu.template step<bw::FixedInt<2>>();
1066 int8_t with_metadata{1};
1068 auto with_metadata_res = accu.template step<bw::FixedInt<1>>();
1070 if (with_metadata_res) {
1071 with_metadata = with_metadata_res->value();
1077 return std::make_pair(
1079 value_type(stmt_id_res->value(), column_count_res->value(),
1080 param_count_res->value(), warning_count_res->value(),
1091template <
bool Borrowed>
1094 Codec<borrowable::message::server::Row<Borrowed>>> {
1095 template <
class Accumulator>
1097 namespace bw = borrowable::wire;
1099 for (
const auto &field : v_) {
1101 accu.step(bw::VarString<Borrowed>(*field));
1107 return accu.result();
1120 return std::numeric_limits<size_t>::max();
1127 namespace bw = borrowable::wire;
1129 std::vector<typename value_type::value_type> fields;
1135 auto null_res = accu.template try_step<bw::Null>();
1137 fields.emplace_back(std::nullopt);
1139 auto field_res = accu.template step<bw::VarString<Borrowed>>();
1142 fields.emplace_back(field_res->value());
1169template <
bool Borrowed>
1172 Codec<borrowable::message::server::StmtRow<Borrowed>>> {
1173 template <
class Accumulator>
1175 namespace bw = borrowable::wire;
1177 accu.step(bw::FixedInt<1>(0));
1179 std::string nullbits;
1185 for (
const auto &field : v_) {
1192 nullbits[byte_pos] |= 1 << bit_pos;
1196 accu.step(bw::String<Borrowed>(nullbits));
1199 for (
const auto &field : v_) {
1201 switch (v_.types()[
n++]) {
1221 accu.step(bw::FixedInt<1>(field->size()));
1234 accu.step(bw::String<Borrowed>(*field));
1238 return accu.result();
1242 using value_type = borrowable::message::server::StmtRow<Borrowed>;
1251 return std::numeric_limits<size_t>::max();
1256 std::vector<field_type::value_type> types) {
1257 namespace bw = borrowable::wire;
1261 const auto row_byte_res = accu.template step<bw::FixedInt<1>>();
1265 if (row_byte_res->value() != 0x00) {
1269 const auto nullbits_res =
1270 accu.template step<bw::String<Borrowed>>(
bytes_per_bits(types.size()));
1273 const auto nullbits = nullbits_res->value();
1275 std::vector<typename value_type::value_type> values;
1277 for (
size_t n{}, bit_pos{2}, byte_pos{};
n < types.size(); ++
n, ++bit_pos) {
1283 if (!(nullbits[byte_pos] & (1 << bit_pos))) {
1301 auto string_field_size_res = accu.template step<bw::VarInt>();
1305 field_size_res = string_field_size_res->
value();
1311 auto time_field_size_res = accu.template step<bw::FixedInt<1>>();
1315 field_size_res = time_field_size_res->
value();
1335 if (!field_size_res) {
1340 const auto value_res =
1341 accu.template step<bw::String<Borrowed>>(field_size_res.
value());
1344 values.push_back(value_res->value());
1346 values.emplace_back(std::nullopt);
1362template <
bool Borrowed>
1365 Codec<borrowable::message::server::Statistics<Borrowed>>> {
1366 template <
class Accumulator>
1368 namespace bw = borrowable::wire;
1370 return accu.step(bw::String<Borrowed>(v_.stats())).result();
1374 using value_type = borrowable::message::server::Statistics<Borrowed>;
1386 namespace bw = borrowable::wire;
1388 auto stats_res = accu.template step<bw::String<Borrowed>>();
1403template <
class Base,
class ValueType>
1406 template <
class Accumulator>
1408 namespace bw = borrowable::wire;
1410 return accu.step(bw::FixedInt<1>(Base::cmd_byte())).result();
1420 static constexpr size_t max_size() noexcept {
return 1; }
1426 namespace bw = borrowable::wire;
1428 auto cmd_byte_res = accu.template step<bw::FixedInt<1>>();
1431 if (cmd_byte_res->value() != Base::cmd_byte()) {
1435 return std::make_pair(accu.
result().
value(), ValueType());
1480 borrowable::message::client::Quit> {
1498 Codec<borrowable::message::client::ResetConnection>,
1499 borrowable::message::client::ResetConnection> {
1517 borrowable::message::client::Ping> {
1535 borrowable::message::client::Statistics> {
1550template <
bool Borrowed>
1553 Codec<borrowable::message::client::InitSchema<Borrowed>>> {
1554 template <
class Accumulator>
1556 namespace bw = borrowable::wire;
1558 return accu.step(bw::FixedInt<1>(cmd_byte()))
1559 .step(bw::String<Borrowed>(v_.schema()))
1580 namespace bw = borrowable::wire;
1582 auto cmd_byte_res = accu.template step<bw::FixedInt<1>>();
1585 if (cmd_byte_res->value() != cmd_byte()) {
1589 auto schema_res = accu.template step<bw::String<Borrowed>>();
1603template <
bool Borrowed>
1606 Codec<borrowable::message::client::Query<Borrowed>>> {
1607 template <
class Accumulator>
1609 namespace bw = borrowable::wire;
1611 return accu.step(bw::FixedInt<1>(cmd_byte()))
1612 .step(bw::String<Borrowed>(v_.statement()))
1633 namespace bw = borrowable::wire;
1635 auto cmd_byte_res = accu.template step<bw::FixedInt<1>>();
1638 if (cmd_byte_res->value() != cmd_byte()) {
1642 auto statement_res = accu.template step<bw::String<Borrowed>>();
1662template <
bool Borrowed>
1665 Codec<borrowable::message::client::SendFile<Borrowed>>> {
1666 template <
class Accumulator>
1668 namespace bw = borrowable::wire;
1670 return accu.step(bw::String<Borrowed>(v_.payload())).result();
1686 namespace bw = borrowable::wire;
1688 auto payload_res = accu.template step<bw::String<Borrowed>>();
1702template <
bool Borrowed>
1705 Codec<borrowable::message::client::ListFields<Borrowed>>> {
1706 template <
class Accumulator>
1708 namespace bw = borrowable::wire;
1710 return accu.step(bw::FixedInt<1>(cmd_byte()))
1711 .step(bw::NulTermString<Borrowed>(v_.table_name()))
1712 .step(bw::String<Borrowed>(v_.wildcard()))
1733 namespace bw = borrowable::wire;
1735 auto cmd_byte_res = accu.template step<bw::FixedInt<1>>();
1738 if (cmd_byte_res->value() != cmd_byte()) {
1742 auto table_name_res = accu.template step<bw::NulTermString<Borrowed>>();
1743 auto wildcard_res = accu.template step<bw::String<Borrowed>>();
1746 return std::make_pair(
1748 value_type(table_name_res->value(), wildcard_res->value()));
1761 template <
class Accumulator>
1763 namespace bw = borrowable::wire;
1765 return accu.step(bw::FixedInt<1>(cmd_byte()))
1766 .step(bw::FixedInt<1>(v_.cmds().to_ulong()))
1787 namespace bw = borrowable::wire;
1789 auto cmd_byte_res = accu.template step<bw::FixedInt<1>>();
1792 if (cmd_byte_res->value() != cmd_byte()) {
1796 auto cmds_res = accu.template step<bw::FixedInt<1>>();
1817 template <
class Accumulator>
1819 namespace bw = borrowable::wire;
1821 return accu.step(bw::FixedInt<1>(cmd_byte()))
1822 .step(bw::FixedInt<4>(v_.connection_id()))
1843 namespace bw = borrowable::wire;
1845 auto cmd_byte_res = accu.template step<bw::FixedInt<1>>();
1848 if (cmd_byte_res->value() != cmd_byte()) {
1852 auto connection_id_res = accu.template step<bw::FixedInt<4>>();
1866template <
bool Borrowed>
1869 Codec<borrowable::message::client::StmtPrepare<Borrowed>>> {
1870 template <
class Accumulator>
1872 namespace bw = borrowable::wire;
1874 return accu.step(bw::FixedInt<1>(cmd_byte()))
1875 .step(bw::String<Borrowed>(v_.statement()))
1896 namespace bw = borrowable::wire;
1898 auto cmd_byte_res = accu.template step<bw::FixedInt<1>>();
1901 if (cmd_byte_res->value() != cmd_byte()) {
1905 auto statement_res = accu.template step<bw::String<Borrowed>>();
1919template <
bool Borrowed>
1922 Codec<borrowable::message::client::StmtExecute<Borrowed>>> {
1923 template <
class Accumulator>
1925 namespace bw = borrowable::wire;
1927 accu.step(bw::FixedInt<1>(cmd_byte()))
1928 .step(bw::FixedInt<4>(v_.statement_id()))
1929 .step(bw::FixedInt<1>(v_.flags().to_ullong()))
1930 .step(bw::FixedInt<4>(v_.iteration_count()));
1933 if (v_.values().empty())
return accu.result();
1939 std::vector<uint8_t> nullbits(
bytes_per_bits(v_.values().size()));
1942 size_t byte_pos{}, bit_pos{};
1943 for (
auto const &v : v_.values()) {
1950 nullbits[byte_pos] |= 1 << bit_pos;
1959 reinterpret_cast<const char *
>(nullbits.data()), nullbits.size())))
1960 .step(bw::FixedInt<1>(v_.new_params_bound()));
1961 if (v_.new_params_bound()) {
1962 for (
const auto ¶m_def : v_.types()) {
1963 accu.step(bw::FixedInt<2>(param_def.type_and_flags));
1969 if (!v.has_value())
continue;
1971 switch (v_.types()[
n].type_and_flags & 0xff) {
1991 accu.step(bw::FixedInt<1>(v->size()));
2004 assert(
false ||
"Unknown Type");
2009 return accu.result();
2068 template <
class Func>
2071 Func &&metadata_lookup) {
2074 namespace bw = borrowable::wire;
2076 auto cmd_byte_res = accu.template step<bw::FixedInt<1>>();
2079 if (cmd_byte_res->value() != cmd_byte()) {
2083 auto statement_id_res = accu.template step<bw::FixedInt<4>>();
2084 auto flags_res = accu.template step<bw::FixedInt<1>>();
2085 auto iteration_count_res = accu.template step<bw::FixedInt<4>>();
2090 metadata_res = metadata_lookup(statement_id_res->value());
2091 if (!metadata_res) {
2096 const size_t param_count = metadata_res->size();
2098 if (param_count == 0) {
2101 return std::make_pair(
2103 value_type(statement_id_res->value(), flags_res->value(),
2104 iteration_count_res->value(),
false, {}, {}));
2108 accu.template step<bw::String<Borrowed>>(
bytes_per_bits(param_count));
2111 auto new_params_bound_res = accu.template step<bw::FixedInt<1>>();
2114 std::vector<typename value_type::ParamDef> types;
2115 std::vector<std::optional<typename value_type::string_type>> values;
2117 auto new_params_bound = new_params_bound_res->value();
2118 if (new_params_bound == 0) {
2119 types = *metadata_res;
2120 }
else if (new_params_bound == 1) {
2121 types.reserve(param_count);
2123 for (
size_t n{};
n < param_count; ++
n) {
2124 auto type_res = accu.template step<bw::FixedInt<2>>();
2127 types.push_back(type_res->value());
2133 const auto nullbits = nullbits_res->value();
2134 values.reserve(param_count);
2136 for (
size_t n{}, bit_pos{}, byte_pos{};
n < param_count; ++
n, ++bit_pos) {
2142 if (!(nullbits[byte_pos] & (1 << bit_pos))) {
2146 switch (types[
n].type_and_flags & 0xff) {
2160 auto string_field_size_res = accu.template step<bw::VarInt>();
2164 field_size_res = string_field_size_res->
value();
2170 auto time_field_size_res = accu.template step<bw::FixedInt<1>>();
2174 field_size_res = time_field_size_res->
value();
2194 if (!field_size_res) {
2200 accu.template step<bw::String<Borrowed>>(field_size_res.
value());
2205 values.push_back(value_res->value());
2207 values.emplace_back(std::nullopt);
2213 return std::make_pair(
2215 value_type(statement_id_res->value(), flags_res->value(),
2216 iteration_count_res->value(), new_params_bound_res->value(),
2227template <
bool Borrowed>
2230 Codec<borrowable::message::client::StmtParamAppendData<Borrowed>>> {
2231 template <
class Accumulator>
2233 namespace bw = borrowable::wire;
2235 return accu.step(bw::FixedInt<1>(cmd_byte()))
2236 .step(bw::FixedInt<4>(v_.statement_id()))
2237 .step(bw::FixedInt<2>(v_.param_id()))
2238 .step(bw::String<Borrowed>(v_.data()))
2259 namespace bw = borrowable::wire;
2261 auto cmd_byte_res = accu.template step<bw::FixedInt<1>>();
2264 if (cmd_byte_res->value() != cmd_byte()) {
2268 auto statement_id_res = accu.template step<bw::FixedInt<4>>();
2269 auto param_id_res = accu.template step<bw::FixedInt<2>>();
2270 auto data_res = accu.template step<bw::String<Borrowed>>();
2275 param_id_res->value(), data_res->value()));
2288 template <
class Accumulator>
2290 namespace bw = borrowable::wire;
2292 return accu.step(bw::FixedInt<1>(cmd_byte()))
2293 .step(bw::FixedInt<4>(v_.statement_id()))
2314 namespace bw = borrowable::wire;
2316 auto cmd_byte_res = accu.template step<bw::FixedInt<1>>();
2319 if (cmd_byte_res->value() != cmd_byte()) {
2323 auto statement_id_res = accu.template step<bw::FixedInt<4>>();
2340 template <
class Accumulator>
2342 namespace bw = borrowable::wire;
2344 return accu.step(bw::FixedInt<1>(cmd_byte()))
2345 .step(bw::FixedInt<4>(v_.statement_id()))
2366 namespace bw = borrowable::wire;
2368 auto cmd_byte_res = accu.template step<bw::FixedInt<1>>();
2371 if (cmd_byte_res->value() != cmd_byte()) {
2375 auto statement_id_res = accu.template step<bw::FixedInt<4>>();
2392 template <
class Accumulator>
2394 namespace bw = borrowable::wire;
2396 return accu.step(bw::FixedInt<1>(cmd_byte()))
2397 .step(bw::FixedInt<2>(v_.option()))
2418 namespace bw = borrowable::wire;
2420 auto cmd_byte_res = accu.template step<bw::FixedInt<1>>();
2423 if (cmd_byte_res->value() != cmd_byte()) {
2427 auto option_res = accu.template step<bw::FixedInt<2>>();
2444 template <
class Accumulator>
2446 namespace bw = borrowable::wire;
2448 return accu.step(bw::FixedInt<1>(cmd_byte()))
2449 .step(bw::FixedInt<4>(v_.statement_id()))
2450 .step(bw::FixedInt<4>(v_.row_count()))
2471 namespace bw = borrowable::wire;
2473 auto cmd_byte_res = accu.template step<bw::FixedInt<1>>();
2476 if (cmd_byte_res->value() != cmd_byte()) {
2480 auto statement_id_res = accu.template step<bw::FixedInt<4>>();
2481 auto row_count_res = accu.template step<bw::FixedInt<4>>();
2484 return std::make_pair(
2486 value_type(statement_id_res->value(), row_count_res->value()));
2532template <
bool Borrowed>
2535 Codec<borrowable::message::client::Greeting<Borrowed>>> {
2536 template <
class Accumulator>
2538 namespace bw = borrowable::wire;
2540 const auto shared_caps = v_.capabilities() & this->caps();
2543 accu.step(bw::FixedInt<4>(v_.capabilities().to_ulong()))
2544 .step(bw::FixedInt<4>(v_.max_packet_size()))
2545 .step(bw::FixedInt<1>(v_.collation()))
2546 .step(bw::String<Borrowed>(std::string(23,
'\0')));
2548 v_.username().empty())) {
2551 accu.step(bw::NulTermString<Borrowed>(v_.username()));
2555 accu.step(bw::VarString<Borrowed>(v_.auth_method_data()));
2558 accu.step(bw::FixedInt<1>(v_.auth_method_data().size()))
2559 .step(bw::String<Borrowed>(v_.auth_method_data()));
2561 accu.step(bw::NulTermString<Borrowed>(v_.auth_method_data()));
2566 accu.step(bw::NulTermString<Borrowed>(v_.schema()));
2578 !v_.auth_method_name().empty()) {
2579 accu.step(bw::NulTermString<Borrowed>(v_.auth_method_name()));
2583 accu.step(bw::NulTermString<Borrowed>(v_.auth_method_name()));
2586 accu.step(bw::VarString<Borrowed>(v_.attributes()));
2590 accu.step(bw::FixedInt<2>(v_.capabilities().to_ulong()))
2591 .step(bw::FixedInt<3>(v_.max_packet_size()))
2592 .step(bw::NulTermString<Borrowed>(v_.username()));
2595 accu.step(bw::NulTermString<Borrowed>(v_.auth_method_data()))
2596 .step(bw::String<Borrowed>(v_.schema()));
2598 accu.step(bw::String<Borrowed>(v_.auth_method_data()));
2602 return accu.result();
2618 namespace bw = borrowable::wire;
2620 auto capabilities_lo_res = accu.template step<bw::FixedInt<2>>();
2621 if (!capabilities_lo_res)
2625 capabilities_lo_res->value());
2629 auto shared_capabilities = caps & client_capabilities;
2634 auto capabilities_hi_res = accu.template step<bw::FixedInt<2>>();
2635 if (!capabilities_hi_res)
2639 capabilities_hi_res->value() << 16);
2641 shared_capabilities = caps & client_capabilities;
2643 auto max_packet_size_res = accu.template step<bw::FixedInt<4>>();
2644 auto collation_res = accu.template step<bw::FixedInt<1>>();
2646 accu.template step<bw::String<Borrowed>>(23);
2648 auto last_accu_res = accu.
result();
2650 auto username_res = accu.template step<bw::NulTermString<Borrowed>>();
2654 if (last_accu_res &&
2656 return std::make_pair(
2657 last_accu_res.value(),
2658 value_type(client_capabilities, max_packet_size_res->value(),
2659 collation_res->value(), {}, {}, {}, {}, {}));
2671 auth_method_data_res;
2674 auto res = accu.template step<bw::VarString<Borrowed>>();
2677 auth_method_data_res = bw::String<Borrowed>(res->value());
2678 }
else if (shared_capabilities
2680 auto auth_method_data_len_res = accu.template step<bw::FixedInt<1>>();
2681 if (!auth_method_data_len_res)
2683 auto auth_method_data_len = auth_method_data_len_res->value();
2686 accu.template step<bw::String<Borrowed>>(auth_method_data_len);
2689 auth_method_data_res = bw::String<Borrowed>(res->value());
2691 auto res = accu.template step<bw::NulTermString<Borrowed>>();
2694 auth_method_data_res = bw::String<Borrowed>(res->value());
2698 if (shared_capabilities
2700 schema_res = accu.template step<bw::NulTermString<Borrowed>>();
2706 if (shared_capabilities
2711 auth_method_res = bw::NulTermString<Borrowed>{};
2713 auth_method_res = accu.template step<bw::NulTermString<Borrowed>>();
2716 if (!auth_method_res)
2720 if (shared_capabilities
2722 attributes_res = accu.template step<bw::VarString<Borrowed>>();
2727 return std::make_pair(
2729 value_type(client_capabilities, max_packet_size_res->value(),
2730 collation_res->value(), username_res->value(),
2731 auth_method_data_res->
value(), schema_res->
value(),
2732 auth_method_res->
value(), attributes_res->
value()));
2735 auto max_packet_size_res = accu.template step<bw::FixedInt<3>>();
2737 auto username_res = accu.template step<bw::NulTermString<Borrowed>>();
2740 auth_method_data_res;
2743 if (shared_capabilities
2745 auto res = accu.template step<bw::NulTermString<Borrowed>>();
2749 auth_method_data_res = bw::String<Borrowed>(res->value());
2751 schema_res = accu.template step<bw::String<Borrowed>>();
2753 auth_method_data_res = accu.template step<bw::String<Borrowed>>();
2776 return std::make_pair(
2778 value_type(client_capabilities, max_packet_size_res->value(), 0x00,
2779 username_res->value(), auth_method_data_res->value(),
2780 schema_res->
value(), {}, {}));
2797template <
bool Borrowed>
2800 Codec<borrowable::message::client::AuthMethodData<Borrowed>>> {
2801 template <
class Accumulator>
2803 namespace bw = borrowable::wire;
2805 return accu.step(bw::String<Borrowed>(v_.auth_method_data())).result();
2821 namespace bw = borrowable::wire;
2823 auto auth_method_data_res = accu.template step<bw::String<Borrowed>>();
2844template <
bool Borrowed>
2847 Codec<borrowable::message::client::ChangeUser<Borrowed>>> {
2848 template <
class Accumulator>
2850 namespace bw = borrowable::wire;
2852 accu.step(bw::FixedInt<1>(cmd_byte()))
2853 .step(bw::NulTermString<Borrowed>(v_.username()));
2856 accu.step(bw::FixedInt<1>(v_.auth_method_data().size()))
2857 .step(bw::String<Borrowed>(v_.auth_method_data()));
2859 accu.step(bw::NulTermString<Borrowed>(v_.auth_method_data()));
2861 accu.step(bw::NulTermString<Borrowed>(v_.schema()));
2867 if (v_.collation() != 0x00 ||
2870 accu.step(bw::FixedInt<2>(v_.collation()));
2872 accu.step(bw::NulTermString<Borrowed>(v_.auth_method_name()));
2877 accu.step(bw::VarString<Borrowed>(v_.attributes()));
2881 return accu.result();
2901 namespace bw = borrowable::wire;
2903 auto cmd_byte_res = accu.template step<bw::FixedInt<1>>();
2906 if (cmd_byte_res->value() != cmd_byte()) {
2909 auto username_res = accu.template step<bw::NulTermString<Borrowed>>();
2917 auto auth_method_data_len_res = accu.template step<bw::FixedInt<1>>();
2918 if (!auth_method_data_len_res)
2920 auto auth_method_data_len = auth_method_data_len_res->value();
2922 auto res = accu.template step<bw::String<Borrowed>>(auth_method_data_len);
2925 auth_method_data_res = bw::String<Borrowed>(res->value());
2927 auto res = accu.template step<bw::NulTermString<Borrowed>>();
2930 auth_method_data_res = bw::String<Borrowed>(res->value());
2933 auto schema_res = accu.template step<bw::NulTermString<Borrowed>>();
2939 return std::make_pair(
2941 value_type(username_res->value(), auth_method_data_res->value(),
2942 schema_res->value(), 0x00, {}, {}));
2946 auto collation_res = accu.template step<bw::FixedInt<2>>();
2949 auth_method_name_res;
2951 auth_method_name_res = accu.template step<bw::NulTermString<Borrowed>>();
2956 attributes_res = accu.template step<bw::VarString<Borrowed>>();
2961 return std::make_pair(
2963 value_type(username_res->value(), auth_method_data_res->value(),
2964 schema_res->value(), collation_res->value(),
2965 auth_method_name_res->value(), attributes_res->
value()));
2980 borrowable::message::client::Clone> {
2995template <
bool Borrowed>
2998 Codec<borrowable::message::client::BinlogDump<Borrowed>>> {
3003 template <
class Accumulator>
3005 namespace bw = borrowable::wire;
3007 return accu.step(bw::FixedInt<1>(cmd_byte()))
3008 .step(bw::FixedInt<4>(v_.position()))
3009 .step(bw::FixedInt<2>(v_.flags().underlying_value()))
3010 .step(bw::FixedInt<4>(v_.server_id()))
3011 .step(bw::String<Borrowed>(v_.filename()))
3031 namespace bw = borrowable::wire;
3033 auto cmd_byte_res = accu.template step<bw::FixedInt<1>>();
3036 if (cmd_byte_res->value() != cmd_byte()) {
3039 auto position_res = accu.template step<bw::FixedInt<4>>();
3040 auto flags_res = accu.template step<bw::FixedInt<2>>();
3041 auto server_id_res = accu.template step<bw::FixedInt<4>>();
3043 auto filename_res = accu.template step<bw::String<Borrowed>>();
3048 flags.underlying_value(flags_res->value());
3050 return std::make_pair(
3053 position_res->value()));
3063template <
bool Borrowed>
3066 Codec<borrowable::message::client::RegisterReplica<Borrowed>>> {
3071 template <
class Accumulator>
3073 namespace bw = borrowable::wire;
3075 return accu.step(bw::FixedInt<1>(cmd_byte()))
3076 .step(bw::FixedInt<4>(v_.server_id()))
3077 .step(bw::FixedInt<1>(v_.hostname().size()))
3078 .step(bw::String<Borrowed>(v_.hostname()))
3079 .step(bw::FixedInt<1>(v_.username().size()))
3080 .step(bw::String<Borrowed>(v_.username()))
3081 .step(bw::FixedInt<1>(v_.password().size()))
3082 .step(bw::String<Borrowed>(v_.password()))
3083 .step(bw::FixedInt<2>(v_.port()))
3084 .step(bw::FixedInt<4>(v_.replication_rank()))
3085 .step(bw::FixedInt<4>(v_.master_id()))
3105 namespace bw = borrowable::wire;
3107 auto cmd_byte_res = accu.template step<bw::FixedInt<1>>();
3110 if (cmd_byte_res->value() != cmd_byte()) {
3113 auto server_id_res = accu.template step<bw::FixedInt<4>>();
3114 auto hostname_len_res = accu.template step<bw::FixedInt<1>>();
3118 accu.template step<bw::String<Borrowed>>(hostname_len_res->value());
3120 auto username_len_res = accu.template step<bw::FixedInt<1>>();
3124 accu.template step<bw::String<Borrowed>>(username_len_res->value());
3126 auto password_len_res = accu.template step<bw::FixedInt<1>>();
3130 accu.template step<bw::String<Borrowed>>(password_len_res->value());
3132 auto port_res = accu.template step<bw::FixedInt<2>>();
3133 auto replication_rank_res = accu.template step<bw::FixedInt<4>>();
3134 auto master_id_res = accu.template step<bw::FixedInt<4>>();
3138 return std::make_pair(
3140 value_type(server_id_res->value(), hostname_res->value(),
3141 username_res->value(), password_res->value(),
3142 port_res->value(), replication_rank_res->value(),
3143 master_id_res->value()));
3153template <
bool Borrowed>
3156 Codec<borrowable::message::client::BinlogDumpGtid<Borrowed>>> {
3161 template <
class Accumulator>
3163 namespace bw = borrowable::wire;
3165 accu.step(bw::FixedInt<1>(cmd_byte()))
3166 .step(bw::FixedInt<2>(v_.flags().underlying_value()))
3167 .step(bw::FixedInt<4>(v_.server_id()))
3168 .step(bw::FixedInt<4>(v_.filename().size()))
3169 .step(bw::String<Borrowed>(v_.filename()))
3170 .step(bw::FixedInt<8>(v_.position()));
3172 if (v_.flags() & value_type::Flags::through_gtid) {
3173 accu.step(bw::FixedInt<4>(v_.sids().size()))
3174 .step(bw::String<Borrowed>(v_.sids()));
3177 return accu.result();
3186 :
base_(caps), v_{
std::move(val)} {}
3196 namespace bw = borrowable::wire;
3198 auto cmd_byte_res = accu.template step<bw::FixedInt<1>>();
3201 if (cmd_byte_res->value() != cmd_byte()) {
3204 auto flags_res = accu.template step<bw::FixedInt<2>>();
3205 auto server_id_res = accu.template step<bw::FixedInt<4>>();
3206 auto filename_len_res = accu.template step<bw::FixedInt<4>>();
3210 accu.template step<bw::String<Borrowed>>(filename_len_res->value());
3211 auto position_res = accu.template step<bw::FixedInt<8>>();
3214 flags.underlying_value(flags_res->value());
3216 if (!(
flags & value_type::Flags::through_gtid)) {
3219 return std::make_pair(
3222 position_res->value(), {}));
3225 auto sids_len_res = accu.template step<bw::FixedInt<4>>();
3229 accu.template step<bw::String<Borrowed>>(sids_len_res->value());
3233 return std::make_pair(
3236 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:1405
constexpr CodecSimpleCommand(capabilities::value_type caps)
Definition: classic_protocol_codec_message.h:1418
friend __base
Definition: classic_protocol_codec_message.h:1416
static constexpr size_t max_size() noexcept
Definition: classic_protocol_codec_message.h:1420
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:1422
constexpr auto accumulate_fields(Accumulator &&accu) const
Definition: classic_protocol_codec_message.h:1407
const value_type v_
Definition: classic_protocol_codec_message.h:2832
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:2817
friend __base
Definition: classic_protocol_codec_message.h:2812
constexpr auto accumulate_fields(Accumulator &&accu) const
Definition: classic_protocol_codec_message.h:2802
constexpr Codec(value_type v, capabilities::value_type caps)
Definition: classic_protocol_codec_message.h:2814
constexpr static uint8_t cmd_byte() noexcept
Definition: classic_protocol_codec_message.h:3188
const value_type v_
Definition: classic_protocol_codec_message.h:3240
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:3192
constexpr Codec(value_type val, capabilities::value_type caps)
Definition: classic_protocol_codec_message.h:3185
friend base_
Definition: classic_protocol_codec_message.h:3183
constexpr auto accumulate_fields(Accumulator &&accu) const
Definition: classic_protocol_codec_message.h:3162
constexpr Codec(value_type v, capabilities::value_type caps)
Definition: classic_protocol_codec_message.h:3020
friend __base
Definition: classic_protocol_codec_message.h:3018
const value_type v_
Definition: classic_protocol_codec_message.h:3057
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:3027
constexpr auto accumulate_fields(Accumulator &&accu) const
Definition: classic_protocol_codec_message.h:3004
constexpr static uint8_t cmd_byte() noexcept
Definition: classic_protocol_codec_message.h:3023
const value_type v_
Definition: classic_protocol_codec_message.h:2969
constexpr static uint8_t cmd_byte() noexcept
Definition: classic_protocol_codec_message.h:2893
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:2897
constexpr Codec(value_type v, capabilities::value_type caps)
Definition: classic_protocol_codec_message.h:2890
constexpr auto accumulate_fields(Accumulator &&accu) const
Definition: classic_protocol_codec_message.h:2849
friend __base
Definition: classic_protocol_codec_message.h:2888
constexpr static uint8_t cmd_byte() noexcept
Definition: classic_protocol_codec_message.h:2987
constexpr Codec(value_type, capabilities::value_type caps)
Definition: classic_protocol_codec_message.h:2985
friend __base
Definition: classic_protocol_codec_message.h:2609
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:2614
constexpr Codec(value_type v, capabilities::value_type caps)
Definition: classic_protocol_codec_message.h:2611
constexpr auto accumulate_fields(Accumulator &&accu) const
Definition: classic_protocol_codec_message.h:2537
const value_type v_
Definition: classic_protocol_codec_message.h:2785
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:1576
constexpr auto accumulate_fields(Accumulator &&accu) const
Definition: classic_protocol_codec_message.h:1555
const value_type v_
Definition: classic_protocol_codec_message.h:1597
friend __base
Definition: classic_protocol_codec_message.h:1567
constexpr Codec(value_type v, capabilities::value_type caps)
Definition: classic_protocol_codec_message.h:1569
constexpr static uint8_t cmd_byte() noexcept
Definition: classic_protocol_codec_message.h:1572
constexpr auto accumulate_fields(Accumulator &&accu) const
Definition: classic_protocol_codec_message.h:1818
value_type v_
Definition: classic_protocol_codec_message.h:1860
friend __base
Definition: classic_protocol_codec_message.h:1830
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:1839
constexpr static uint8_t cmd_byte() noexcept
Definition: classic_protocol_codec_message.h:1835
constexpr Codec(value_type v, capabilities::value_type caps)
Definition: classic_protocol_codec_message.h:1832
const value_type v_
Definition: classic_protocol_codec_message.h:1752
constexpr Codec(value_type v, capabilities::value_type caps)
Definition: classic_protocol_codec_message.h:1722
constexpr static uint8_t cmd_byte() noexcept
Definition: classic_protocol_codec_message.h:1725
constexpr auto accumulate_fields(Accumulator &&accu) const
Definition: classic_protocol_codec_message.h:1707
friend __base
Definition: classic_protocol_codec_message.h:1720
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:1729
constexpr Codec(value_type, capabilities::value_type caps)
Definition: classic_protocol_codec_message.h:1522
constexpr static uint8_t cmd_byte() noexcept
Definition: classic_protocol_codec_message.h:1524
const value_type v_
Definition: classic_protocol_codec_message.h:1650
friend __base
Definition: classic_protocol_codec_message.h:1620
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:1629
constexpr auto accumulate_fields(Accumulator &&accu) const
Definition: classic_protocol_codec_message.h:1608
constexpr static uint8_t cmd_byte() noexcept
Definition: classic_protocol_codec_message.h:1625
constexpr Codec(value_type v, capabilities::value_type caps)
Definition: classic_protocol_codec_message.h:1622
constexpr static uint8_t cmd_byte() noexcept
Definition: classic_protocol_codec_message.h:1487
constexpr Codec(value_type, capabilities::value_type caps)
Definition: classic_protocol_codec_message.h:1485
constexpr auto accumulate_fields(Accumulator &&accu) const
Definition: classic_protocol_codec_message.h:3072
const value_type v_
Definition: classic_protocol_codec_message.h:3147
constexpr static uint8_t cmd_byte() noexcept
Definition: classic_protocol_codec_message.h:3097
constexpr Codec(value_type v, capabilities::value_type caps)
Definition: classic_protocol_codec_message.h:3094
friend __base
Definition: classic_protocol_codec_message.h:3092
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:3101
constexpr auto accumulate_fields(Accumulator &&accu) const
Definition: classic_protocol_codec_message.h:1762
constexpr static uint8_t cmd_byte() noexcept
Definition: classic_protocol_codec_message.h:1779
constexpr Codec(value_type v, capabilities::value_type caps)
Definition: classic_protocol_codec_message.h:1776
friend __base
Definition: classic_protocol_codec_message.h:1774
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:1783
const value_type v_
Definition: classic_protocol_codec_message.h:1803
constexpr Codec(value_type, capabilities::value_type caps)
Definition: classic_protocol_codec_message.h:1504
constexpr static uint8_t cmd_byte() noexcept
Definition: classic_protocol_codec_message.h:1506
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:1682
constexpr auto accumulate_fields(Accumulator &&accu) const
Definition: classic_protocol_codec_message.h:1667
friend __base
Definition: classic_protocol_codec_message.h:1677
constexpr Codec(value_type v, capabilities::value_type caps)
Definition: classic_protocol_codec_message.h:1679
const value_type v_
Definition: classic_protocol_codec_message.h:1696
const value_type v_
Definition: classic_protocol_codec_message.h:2435
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:2414
constexpr Codec(value_type v, capabilities::value_type caps)
Definition: classic_protocol_codec_message.h:2407
constexpr auto accumulate_fields(Accumulator &&accu) const
Definition: classic_protocol_codec_message.h:2393
constexpr static uint8_t cmd_byte() noexcept
Definition: classic_protocol_codec_message.h:2410
friend __base
Definition: classic_protocol_codec_message.h:2405
constexpr Codec(value_type, capabilities::value_type caps)
Definition: classic_protocol_codec_message.h:1540
constexpr static uint8_t cmd_byte() noexcept
Definition: classic_protocol_codec_message.h:1542
friend __base
Definition: classic_protocol_codec_message.h:2301
const value_type v_
Definition: classic_protocol_codec_message.h:2331
constexpr static uint8_t cmd_byte() noexcept
Definition: classic_protocol_codec_message.h:2306
constexpr auto accumulate_fields(Accumulator &&accu) const
Definition: classic_protocol_codec_message.h:2289
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:2310
constexpr Codec(value_type v, capabilities::value_type caps)
Definition: classic_protocol_codec_message.h:2303
friend __base
Definition: classic_protocol_codec_message.h:2016
const value_type v_
Definition: classic_protocol_codec_message.h:2221
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:2069
auto accumulate_fields(Accumulator &&accu) const
Definition: classic_protocol_codec_message.h:1924
constexpr static uint8_t cmd_byte() noexcept
Definition: classic_protocol_codec_message.h:2021
constexpr Codec(value_type val, capabilities::value_type caps)
Definition: classic_protocol_codec_message.h:2018
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:2467
constexpr static uint8_t cmd_byte() noexcept
Definition: classic_protocol_codec_message.h:2463
const value_type v_
Definition: classic_protocol_codec_message.h:2490
constexpr auto accumulate_fields(Accumulator &&accu) const
Definition: classic_protocol_codec_message.h:2445
constexpr Codec(value_type v, capabilities::value_type caps)
Definition: classic_protocol_codec_message.h:2460
friend __base
Definition: classic_protocol_codec_message.h:2458
constexpr Codec(value_type v, capabilities::value_type caps)
Definition: classic_protocol_codec_message.h:2248
constexpr static uint8_t cmd_byte() noexcept
Definition: classic_protocol_codec_message.h:2251
friend __base
Definition: classic_protocol_codec_message.h:2246
const value_type v_
Definition: classic_protocol_codec_message.h:2279
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:2255
constexpr auto accumulate_fields(Accumulator &&accu) const
Definition: classic_protocol_codec_message.h:2232
constexpr static uint8_t cmd_byte() noexcept
Definition: classic_protocol_codec_message.h:1888
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:1892
const value_type v_
Definition: classic_protocol_codec_message.h:1913
constexpr Codec(value_type v, capabilities::value_type caps)
Definition: classic_protocol_codec_message.h:1885
constexpr auto accumulate_fields(Accumulator &&accu) const
Definition: classic_protocol_codec_message.h:1871
friend __base
Definition: classic_protocol_codec_message.h:1883
constexpr static uint8_t cmd_byte() noexcept
Definition: classic_protocol_codec_message.h:2358
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:2362
constexpr auto accumulate_fields(Accumulator &&accu) const
Definition: classic_protocol_codec_message.h:2341
friend __base
Definition: classic_protocol_codec_message.h:2353
const value_type v_
Definition: classic_protocol_codec_message.h:2383
constexpr Codec(value_type v, capabilities::value_type caps)
Definition: classic_protocol_codec_message.h:2355
constexpr Codec(value_type v, capabilities::value_type caps)
Definition: classic_protocol_codec_message.h:323
const value_type v_
Definition: classic_protocol_codec_message.h:349
constexpr auto accumulate_fields(Accumulator &&accu) const
Definition: classic_protocol_codec_message.h:309
borrowable::message::server::AuthMethodData< Borrowed > value_type
Definition: classic_protocol_codec_message.h:318
static constexpr uint8_t cmd_byte() noexcept
Definition: classic_protocol_codec_message.h:326
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:328
friend __base
Definition: classic_protocol_codec_message.h:321
friend __base
Definition: classic_protocol_codec_message.h:262
borrowable::message::server::AuthMethodSwitch< Borrowed > value_type
Definition: classic_protocol_codec_message.h:259
constexpr Codec(value_type v, capabilities::value_type caps)
Definition: classic_protocol_codec_message.h:264
constexpr auto accumulate_fields(Accumulator &&accu) const
Definition: classic_protocol_codec_message.h:245
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:269
static constexpr uint8_t cmd_byte() noexcept
Definition: classic_protocol_codec_message.h:267
const value_type v_
Definition: classic_protocol_codec_message.h:298
borrowable::message::server::ColumnCount value_type
Definition: classic_protocol_codec_message.h:743
constexpr Codec(value_type v, capabilities::value_type caps)
Definition: classic_protocol_codec_message.h:748
friend __base
Definition: classic_protocol_codec_message.h:746
const value_type v_
Definition: classic_protocol_codec_message.h:769
constexpr auto accumulate_fields(Accumulator &&accu) const
Definition: classic_protocol_codec_message.h:736
static constexpr size_t max_size() noexcept
Definition: classic_protocol_codec_message.h:751
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:755
borrowable::message::server::Eof< Borrowed > value_type
Definition: classic_protocol_codec_message.h:537
const value_type v_
Definition: classic_protocol_codec_message.h:635
friend __base
Definition: classic_protocol_codec_message.h:540
constexpr Codec(value_type v, capabilities::value_type caps)
Definition: classic_protocol_codec_message.h:542
constexpr auto accumulate_fields(Accumulator &&accu) const
Definition: classic_protocol_codec_message.h:495
static constexpr uint8_t cmd_byte() noexcept
Definition: classic_protocol_codec_message.h:545
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:566
friend __base
Definition: classic_protocol_codec_message.h:684
static constexpr uint8_t cmd_byte()
Definition: classic_protocol_codec_message.h:689
constexpr Codec(value_type v, capabilities::value_type caps)
Definition: classic_protocol_codec_message.h:686
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:695
borrowable::message::server::Error< Borrowed > value_type
Definition: classic_protocol_codec_message.h:681
const value_type v_
Definition: classic_protocol_codec_message.h:726
static constexpr size_t max_size() noexcept
Definition: classic_protocol_codec_message.h:691
constexpr auto accumulate_fields(Accumulator &&accu) const
Definition: classic_protocol_codec_message.h:667
const value_type v_
Definition: classic_protocol_codec_message.h:234
friend __base
Definition: classic_protocol_codec_message.h:129
constexpr Codec(value_type v, capabilities::value_type caps)
Definition: classic_protocol_codec_message.h:131
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:134
constexpr auto accumulate_fields(Accumulator &&accu) const
Definition: classic_protocol_codec_message.h:83
borrowable::message::server::Greeting< Borrowed > value_type
Definition: classic_protocol_codec_message.h:126
const value_type v_
Definition: classic_protocol_codec_message.h:469
borrowable::message::server::Ok< Borrowed > value_type
Definition: classic_protocol_codec_message.h:388
constexpr auto accumulate_fields(Accumulator &&accu) const
Definition: classic_protocol_codec_message.h:360
constexpr Codec(value_type v, capabilities::value_type caps)
Definition: classic_protocol_codec_message.h:393
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:413
friend __base
Definition: classic_protocol_codec_message.h:391
static constexpr uint8_t cmd_byte() noexcept
Definition: classic_protocol_codec_message.h:396
static size_t max_size() noexcept
Definition: classic_protocol_codec_message.h:1119
Codec(value_type v, capabilities::value_type caps)
Definition: classic_protocol_codec_message.h:1116
const value_type v_
Definition: classic_protocol_codec_message.h:1152
auto accumulate_fields(Accumulator &&accu) const
Definition: classic_protocol_codec_message.h:1096
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:1123
borrowable::message::server::Row< Borrowed > value_type
Definition: classic_protocol_codec_message.h:1111
friend __base
Definition: classic_protocol_codec_message.h:1114
const value_type v_
Definition: classic_protocol_codec_message.h:998
constexpr Codec(value_type v, capabilities::value_type caps)
Definition: classic_protocol_codec_message.h:972
friend __base
Definition: classic_protocol_codec_message.h:970
borrowable::message::server::SendFileRequest< Borrowed > value_type
Definition: classic_protocol_codec_message.h:967
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:977
static constexpr uint8_t cmd_byte() noexcept
Definition: classic_protocol_codec_message.h:975
constexpr auto accumulate_fields(Accumulator &&accu) const
Definition: classic_protocol_codec_message.h:958
const value_type v_
Definition: classic_protocol_codec_message.h:1397
constexpr Codec(value_type v, capabilities::value_type caps)
Definition: classic_protocol_codec_message.h:1379
borrowable::message::server::Statistics< Borrowed > value_type
Definition: classic_protocol_codec_message.h:1374
friend __base
Definition: classic_protocol_codec_message.h:1377
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:1382
constexpr auto accumulate_fields(Accumulator &&accu) const
Definition: classic_protocol_codec_message.h:1367
constexpr static uint8_t cmd_byte() noexcept
Definition: classic_protocol_codec_message.h:1050
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:1052
friend __base
Definition: classic_protocol_codec_message.h:1045
constexpr Codec(value_type v, capabilities::value_type caps)
Definition: classic_protocol_codec_message.h:1047
borrowable::message::server::StmtPrepareOk value_type
Definition: classic_protocol_codec_message.h:1042
constexpr auto accumulate_fields(Accumulator &&accu) const
Definition: classic_protocol_codec_message.h:1024
const value_type v_
Definition: classic_protocol_codec_message.h:1085
const value_type v_
Definition: classic_protocol_codec_message.h:1356
Codec(value_type v, capabilities::value_type caps)
Definition: classic_protocol_codec_message.h:1247
borrowable::message::server::StmtRow< Borrowed > value_type
Definition: classic_protocol_codec_message.h:1242
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:1254
static size_t max_size() noexcept
Definition: classic_protocol_codec_message.h:1250
auto accumulate_fields(Accumulator &&accu) const
Definition: classic_protocol_codec_message.h:1174
friend __base
Definition: classic_protocol_codec_message.h:1245
Codec for a type.
Definition: classic_protocol_codec_base.h:71
Definition: classic_protocol_message.h:1219
Definition: classic_protocol_message.h:1281
Definition: classic_protocol_message.h:1253
Definition: classic_protocol_message.h:850
Definition: classic_protocol_message.h:1250
Definition: classic_protocol_message.h:662
Definition: classic_protocol_message.h:825
Definition: classic_protocol_message.h:938
Definition: classic_protocol_message.h:788
Definition: classic_protocol_message.h:1214
Definition: classic_protocol_message.h:764
Definition: classic_protocol_message.h:1209
Definition: classic_protocol_message.h:1313
Definition: classic_protocol_message.h:916
Definition: classic_protocol_message.h:903
Definition: classic_protocol_message.h:958
set options on the current connection.
Definition: classic_protocol_message.h:1189
Definition: classic_protocol_message.h:910
close a prepared statement.
Definition: classic_protocol_message.h:1119
execute a prepared statement.
Definition: classic_protocol_message.h:1052
fetch rows from an executed statement.
Definition: classic_protocol_message.h:1163
append data to a parameter of a prepared statement.
Definition: classic_protocol_message.h:1011
Definition: classic_protocol_message.h:983
reset a prepared statement.
Definition: classic_protocol_message.h:1141
Definition: classic_protocol_wire.h:37
Generator of decoded Types of a buffer.
Definition: classic_protocol_codec_base.h:152
result_type result() const
get result of the step().
Definition: classic_protocol_codec_base.h:218
CRTP base for the Codec's encode part.
Definition: classic_protocol_codec_base.h:374
constexpr capabilities::value_type caps() const noexcept
Definition: classic_protocol_codec_base.h:389
constexpr const value_type & value() const &
Definition: expected.h:687
constexpr unexpected_type get_unexpected() const
Definition: expected.h:753
constexpr const error_type & error() const &
Definition: expected.h:736
Definition: expected.h:943
a type-safe flags type.
Definition: flags.h:114
constexpr DWORD buf_size
Definition: create_def.cc:227
static int flags[50]
Definition: hp_test1.cc:39
uint16_t value_type
Definition: vt100.h:183
borrowable::wire::Null Null
Definition: classic_protocol_wire.h:144
borrowable::wire::VarInt VarInt
Definition: classic_protocol_wire.h:147
Definition: classic_protocol_constants.h:35
constexpr value_type text_result_with_session_tracking
Definition: classic_protocol_constants.h:61
constexpr value_type long_flag
Definition: classic_protocol_constants.h:39
constexpr value_type transactions
Definition: classic_protocol_constants.h:50
constexpr value_type plugin_auth
Definition: classic_protocol_constants.h:56
constexpr value_type session_track
Definition: classic_protocol_constants.h:60
constexpr value_type optional_resultset_metadata
Definition: classic_protocol_constants.h:62
constexpr value_type connect_attributes
Definition: classic_protocol_constants.h:57
constexpr value_type client_auth_method_data_varint
Definition: classic_protocol_constants.h:58
constexpr value_type ssl
Definition: classic_protocol_constants.h:48
constexpr value_type connect_with_schema
Definition: classic_protocol_constants.h:40
constexpr value_type secure_connection
Definition: classic_protocol_constants.h:52
constexpr value_type protocol_41
Definition: classic_protocol_constants.h:46
std::bitset< 32 > value_type
Definition: classic_protocol_constants.h:72
constexpr value_type Short
Definition: classic_protocol_constants.h:230
constexpr value_type DateTime
Definition: classic_protocol_constants.h:240
constexpr value_type LongLong
Definition: classic_protocol_constants.h:236
constexpr value_type Varchar
Definition: classic_protocol_constants.h:243
constexpr value_type NewDecimal
Definition: classic_protocol_constants.h:250
constexpr value_type Time
Definition: classic_protocol_constants.h:239
constexpr value_type Decimal
Definition: classic_protocol_constants.h:228
constexpr value_type VarString
Definition: classic_protocol_constants.h:257
constexpr value_type MediumBlob
Definition: classic_protocol_constants.h:254
constexpr value_type String
Definition: classic_protocol_constants.h:258
constexpr value_type Set
Definition: classic_protocol_constants.h:252
constexpr value_type Geometry
Definition: classic_protocol_constants.h:259
constexpr value_type Bit
Definition: classic_protocol_constants.h:244
constexpr value_type Tiny
Definition: classic_protocol_constants.h:229
constexpr value_type TinyBlob
Definition: classic_protocol_constants.h:253
constexpr value_type Int24
Definition: classic_protocol_constants.h:237
constexpr value_type Enum
Definition: classic_protocol_constants.h:251
constexpr value_type Long
Definition: classic_protocol_constants.h:231
constexpr value_type Double
Definition: classic_protocol_constants.h:233
constexpr value_type Year
Definition: classic_protocol_constants.h:241
constexpr value_type Timestamp
Definition: classic_protocol_constants.h:235
constexpr value_type LongBlob
Definition: classic_protocol_constants.h:255
constexpr value_type Blob
Definition: classic_protocol_constants.h:256
constexpr value_type Date
Definition: classic_protocol_constants.h:238
constexpr value_type Float
Definition: classic_protocol_constants.h:232
borrowable::message::client::StmtFetch StmtFetch
Definition: classic_protocol_message.h:1391
borrowable::message::client::StmtReset StmtReset
Definition: classic_protocol_message.h:1386
borrowable::message::client::Reload Reload
Definition: classic_protocol_message.h:1381
borrowable::message::client::SetOption SetOption
Definition: classic_protocol_message.h:1390
borrowable::message::client::Kill Kill
Definition: classic_protocol_message.h:1379
borrowable::message::client::StmtClose StmtClose
Definition: classic_protocol_message.h:1387
borrowable::message::server::AuthMethodSwitch< false > AuthMethodSwitch
Definition: classic_protocol_message.h:1362
borrowable::message::server::Error< false > Error
Definition: classic_protocol_message.h:1357
borrowable::message::server::StmtPrepareOk StmtPrepareOk
Definition: classic_protocol_message.h:1367
borrowable::message::server::Greeting< false > Greeting
Definition: classic_protocol_message.h:1359
borrowable::message::server::Row< false > Row
Definition: classic_protocol_message.h:1365
borrowable::message::server::Eof< false > Eof
Definition: classic_protocol_message.h:1358
borrowable::message::server::ColumnCount ColumnCount
Definition: classic_protocol_message.h:1360
borrowable::message::server::Ok< false > Ok
Definition: classic_protocol_message.h:1356
borrowable::message::server::AuthMethodData< false > AuthMethodData
Definition: classic_protocol_message.h:1363
borrowable::message::server::Statistics< false > Statistics
Definition: classic_protocol_message.h:1368
borrowable::message::server::StmtRow< false > StmtRow
Definition: classic_protocol_message.h:1366
borrowable::message::server::SendFileRequest< false > SendFileRequest
Definition: classic_protocol_message.h:1364
borrowable::message::server::ColumnMeta< false > ColumnMeta
Definition: classic_protocol_message.h:1361
constexpr value_type session_state_changed
Definition: classic_protocol_constants.h:163
constexpr value_type session_state_changed
Definition: classic_protocol_constants.h:205
Definition: classic_protocol_clone.h:31
std::error_code make_error_code(codec_errc e) noexcept
Definition: classic_protocol_codec_error.h:85
CommandByte
Definition: classic_protocol_codec_message.h:1439
constexpr size_t bytes_per_bits(size_t bits)
Definition: classic_protocol_codec_base.h:54
mutable_buffer buffer(void *p, size_t n) noexcept
Definition: buffer.h:419
size_t buffer_size(const ConstBufferSequence &buffers) noexcept
Definition: buffer.h:314
Definition: varlen_sort.h:183
constexpr auto enumerate(T &&iterable)
Definition: ranges.h:141
constexpr auto make_unexpected(E &&e) -> unexpected< std::decay_t< E > >
Definition: expected.h:124
int n
Definition: xcom_base.cc:508