2
0
mirror of https://github.com/boostorg/mysql.git synced 2026-02-14 12:52:17 +00:00

Renamed (de)serialization contexts

This commit is contained in:
ruben
2020-03-19 17:45:09 +00:00
parent 0f86d72489
commit c04ec3f528
19 changed files with 123 additions and 124 deletions

View File

@@ -1,7 +1,6 @@
Name change
Refactor file structucture for serialization and tests
Deserialize common should be in namespace mysql::test, not in detail
Rename (De)SerializationContext
Multiresultset
Text protocol
Binary protocol (stored procedures)

View File

@@ -13,7 +13,7 @@ namespace mysql {
namespace detail {
using deserialize_row_fn = error_code (*)(
DeserializationContext&,
deserialization_context&,
const std::vector<field_metadata>&,
std::vector<value>&
);

View File

@@ -45,7 +45,7 @@ public:
// Response may be: ok_packet, err_packet, local infile request (not implemented)
// If it is none of this, then the message type itself is the beginning of
// a length-encoded int containing the field count
DeserializationContext ctx (boost::asio::buffer(buffer_), channel_.current_capabilities());
deserialization_context ctx (boost::asio::buffer(buffer_), channel_.current_capabilities());
std::uint8_t msg_type;
std::tie(err, msg_type) = deserialize_message_type(ctx);
if (err) return {};
@@ -83,7 +83,7 @@ public:
error_code process_field_definition()
{
column_definition_packet field_definition;
DeserializationContext ctx (boost::asio::buffer(buffer_), channel_.current_capabilities());
deserialization_context ctx (boost::asio::buffer(buffer_), channel_.current_capabilities());
auto err = deserialize_message(field_definition, ctx);
if (err) return err;

View File

@@ -22,7 +22,7 @@ inline error_code deserialize_handshake(
error_info& info
)
{
DeserializationContext ctx (boost::asio::buffer(buffer), capabilities());
deserialization_context ctx (boost::asio::buffer(buffer), capabilities());
auto [err, msg_type] = deserialize_message_type(ctx);
if (err) return err;
if (msg_type == handshake_protocol_version_9)
@@ -161,7 +161,7 @@ public:
error_info& info
)
{
DeserializationContext ctx (boost::asio::buffer(buffer), negotiated_caps_);
deserialization_context ctx (boost::asio::buffer(buffer), negotiated_caps_);
auto [err, msg_type] = deserialize_message_type(ctx);
if (err) return err;
if (msg_type == ok_packet_header)
@@ -203,7 +203,7 @@ public:
error_info& info
)
{
DeserializationContext ctx (boost::asio::buffer(buffer), negotiated_caps_);
deserialization_context ctx (boost::asio::buffer(buffer), negotiated_caps_);
auto [err, msg_type] = deserialize_message_type(ctx);
if (err) return err;
if (msg_type == error_packet_header)

View File

@@ -22,7 +22,7 @@ public:
}
void process_response(error_code& err, error_info& info)
{
DeserializationContext ctx (
deserialization_context ctx (
boost::asio::buffer(channel_.shared_buffer()),
channel_.current_capabilities()
);

View File

@@ -23,7 +23,7 @@ inline read_row_result process_read_message(
// Message type: row, error or eof?
std::uint8_t msg_type;
DeserializationContext ctx (boost::asio::buffer(buffer), current_capabilities);
deserialization_context ctx (boost::asio::buffer(buffer), current_capabilities);
std::tie(err, msg_type) = deserialize_message_type(ctx);
if (err) return read_row_result::error;
if (msg_type == eof_packet_header)

View File

@@ -12,13 +12,13 @@ namespace mysql {
namespace detail {
inline errc deserialize_binary_value(
DeserializationContext& ctx,
deserialization_context& ctx,
const field_metadata& meta,
value& output
);
inline error_code deserialize_binary_row(
DeserializationContext& ctx,
deserialization_context& ctx,
const std::vector<field_metadata>& meta,
std::vector<value>& output
);

View File

@@ -10,20 +10,20 @@ namespace boost {
namespace mysql {
namespace detail {
inline std::size_t get_size(const date& input, const SerializationContext& ctx) noexcept;
inline void serialize(const date& input, SerializationContext& ctx) noexcept;
inline errc deserialize(date& output, DeserializationContext& ctx) noexcept;
inline std::size_t get_size(const date& input, const serialization_context& ctx) noexcept;
inline void serialize(const date& input, serialization_context& ctx) noexcept;
inline errc deserialize(date& output, deserialization_context& ctx) noexcept;
inline std::size_t get_size(const datetime& input, const SerializationContext& ctx) noexcept;
inline void serialize(const datetime& input, SerializationContext& ctx) noexcept;
inline errc deserialize(datetime& output, DeserializationContext& ctx) noexcept;
inline std::size_t get_size(const datetime& input, const serialization_context& ctx) noexcept;
inline void serialize(const datetime& input, serialization_context& ctx) noexcept;
inline errc deserialize(datetime& output, deserialization_context& ctx) noexcept;
inline std::size_t get_size(const time& input, const SerializationContext& ctx) noexcept;
inline void serialize(const time& input, SerializationContext& ctx) noexcept;
inline errc deserialize(time& output, DeserializationContext& ctx) noexcept;
inline std::size_t get_size(const time& input, const serialization_context& ctx) noexcept;
inline void serialize(const time& input, serialization_context& ctx) noexcept;
inline errc deserialize(time& output, deserialization_context& ctx) noexcept;
inline std::size_t get_size(const value& input, const SerializationContext& ctx) noexcept;
inline void serialize(const value& input, SerializationContext& ctx) noexcept;
inline std::size_t get_size(const value& input, const serialization_context& ctx) noexcept;
inline void serialize(const value& input, serialization_context& ctx) noexcept;
} // detail
} // mysql

View File

@@ -87,7 +87,7 @@ inline binary_protocol_value get_deserializable_type(
} // boost
inline boost::mysql::errc boost::mysql::detail::deserialize_binary_value(
DeserializationContext& ctx,
deserialization_context& ctx,
const field_metadata& meta,
value& output
)
@@ -117,7 +117,7 @@ inline boost::mysql::errc boost::mysql::detail::deserialize_binary_value(
}
inline boost::mysql::error_code boost::mysql::detail::deserialize_binary_row(
DeserializationContext& ctx,
deserialization_context& ctx,
const std::vector<field_metadata>& meta,
std::vector<value>& output
)

View File

@@ -30,7 +30,7 @@ inline get_serializable_type_t<T> to_serializable_type(T input) noexcept
}
inline errc deserialize_binary_date(date& output, std::uint8_t length, DeserializationContext& ctx) noexcept
inline errc deserialize_binary_date(date& output, std::uint8_t length, deserialization_context& ctx) noexcept
{
int2 year;
int1 month;
@@ -51,7 +51,7 @@ inline errc deserialize_binary_date(date& output, std::uint8_t length, Deseriali
// Does not add the length prefix byte
inline void serialize_binary_ymd(
const ::date::year_month_day& ymd,
SerializationContext& ctx
serialization_context& ctx
) noexcept
{
serialize_fields(
@@ -134,7 +134,7 @@ struct broken_time
// date
inline std::size_t boost::mysql::detail::get_size(
const date&,
const SerializationContext&
const serialization_context&
) noexcept
{
// TODO: consider zero dates?
@@ -143,7 +143,7 @@ inline std::size_t boost::mysql::detail::get_size(
inline void boost::mysql::detail::serialize(
const date& input,
SerializationContext& ctx
serialization_context& ctx
) noexcept
{
// TODO: consider zero dates?
@@ -153,7 +153,7 @@ inline void boost::mysql::detail::serialize(
inline boost::mysql::errc boost::mysql::detail::deserialize(
date& output,
DeserializationContext& ctx
deserialization_context& ctx
) noexcept
{
int1 length;
@@ -165,7 +165,7 @@ inline boost::mysql::errc boost::mysql::detail::deserialize(
// datetime
inline std::size_t boost::mysql::detail::get_size(
const datetime& input,
const SerializationContext&
const serialization_context&
) noexcept
{
broken_datetime dt (input);
@@ -174,7 +174,7 @@ inline std::size_t boost::mysql::detail::get_size(
inline void boost::mysql::detail::serialize(
const datetime& input,
SerializationContext& ctx
serialization_context& ctx
) noexcept
{
broken_datetime brokendt (input);
@@ -202,7 +202,7 @@ inline void boost::mysql::detail::serialize(
inline boost::mysql::errc boost::mysql::detail::deserialize(
datetime& output,
DeserializationContext& ctx
deserialization_context& ctx
) noexcept
{
int1 length;
@@ -240,7 +240,7 @@ inline boost::mysql::errc boost::mysql::detail::deserialize(
// time
inline std::size_t boost::mysql::detail::get_size(
const time& input,
const SerializationContext&
const serialization_context&
) noexcept
{
return broken_time(input).binary_serialized_length() + 1; // length byte
@@ -248,7 +248,7 @@ inline std::size_t boost::mysql::detail::get_size(
inline void boost::mysql::detail::serialize(
const time& input,
SerializationContext& ctx
serialization_context& ctx
) noexcept
{
broken_time broken (input);
@@ -275,7 +275,7 @@ inline void boost::mysql::detail::serialize(
inline boost::mysql::errc boost::mysql::detail::deserialize(
time& output,
DeserializationContext& ctx
deserialization_context& ctx
) noexcept
{
// Length
@@ -321,7 +321,7 @@ inline boost::mysql::errc boost::mysql::detail::deserialize(
// mysql::value
inline std::size_t boost::mysql::detail::get_size(
const value& input,
const SerializationContext& ctx
const serialization_context& ctx
) noexcept
{
return std::visit([&ctx](const auto& v) {
@@ -331,7 +331,7 @@ inline std::size_t boost::mysql::detail::get_size(
inline void boost::mysql::detail::serialize(
const value& input,
SerializationContext& ctx
serialization_context& ctx
) noexcept
{
std::visit([&ctx](const auto& v) {

View File

@@ -50,7 +50,7 @@ boost::mysql::error_code boost::mysql::detail::channel<AsyncStream>::process_hea
)
{
packet_header header;
DeserializationContext ctx (boost::asio::buffer(header_buffer_), capabilities(0)); // unaffected by capabilities
deserialization_context ctx (boost::asio::buffer(header_buffer_), capabilities(0)); // unaffected by capabilities
[[maybe_unused]] errc err = deserialize(header, ctx);
assert(err == errc::ok); // this should always succeed
if (!process_sequence_number(header.sequence_number.value))
@@ -69,7 +69,7 @@ void boost::mysql::detail::channel<AsyncStream>::process_header_write(
packet_header header;
header.packet_size.value = size_to_write;
header.sequence_number.value = next_sequence_number();
SerializationContext ctx (capabilities(0), header_buffer_.data()); // capabilities not relevant here
serialization_context ctx (capabilities(0), header_buffer_.data()); // capabilities not relevant here
serialize(header, ctx);
}

View File

@@ -53,7 +53,7 @@ inline bool is_unsigned(
inline boost::mysql::errc boost::mysql::detail::deserialize(
ok_packet& output,
DeserializationContext& ctx
deserialization_context& ctx
) noexcept
{
auto err = deserialize_fields(
@@ -72,7 +72,7 @@ inline boost::mysql::errc boost::mysql::detail::deserialize(
inline boost::mysql::errc boost::mysql::detail::deserialize(
handshake_packet& output,
DeserializationContext& ctx
deserialization_context& ctx
) noexcept
{
constexpr std::uint8_t auth1_length = 8;
@@ -136,7 +136,7 @@ inline boost::mysql::errc boost::mysql::detail::deserialize(
std::size_t boost::mysql::detail::get_size(
const handshake_response_packet& value,
const SerializationContext& ctx
const serialization_context& ctx
) noexcept
{
std::size_t res =
@@ -156,7 +156,7 @@ std::size_t boost::mysql::detail::get_size(
inline void boost::mysql::detail::serialize(
const handshake_response_packet& value,
SerializationContext& ctx
serialization_context& ctx
) noexcept
{
serialize(value.client_flag, ctx);
@@ -175,7 +175,7 @@ inline void boost::mysql::detail::serialize(
inline boost::mysql::errc boost::mysql::detail::deserialize(
auth_switch_request_packet& output,
DeserializationContext& ctx
deserialization_context& ctx
) noexcept
{
auto err = deserialize_fields(ctx, output.plugin_name, output.auth_plugin_data);
@@ -191,7 +191,7 @@ inline boost::mysql::errc boost::mysql::detail::deserialize(
inline boost::mysql::errc boost::mysql::detail::deserialize(
column_definition_packet& output,
DeserializationContext& ctx
deserialization_context& ctx
) noexcept
{
int_lenenc length_of_fixed_fields;
@@ -216,7 +216,7 @@ inline boost::mysql::errc boost::mysql::detail::deserialize(
inline boost::mysql::errc boost::mysql::detail::deserialize(
com_stmt_prepare_ok_packet& output,
DeserializationContext& ctx
deserialization_context& ctx
) noexcept
{
int1 reserved;
@@ -233,7 +233,7 @@ inline boost::mysql::errc boost::mysql::detail::deserialize(
template <typename ForwardIterator>
inline std::size_t boost::mysql::detail::get_size(
const com_stmt_execute_packet<ForwardIterator>& value,
const SerializationContext& ctx
const serialization_context& ctx
) noexcept
{
std::size_t res = 1 + // command ID
@@ -255,7 +255,7 @@ inline std::size_t boost::mysql::detail::get_size(
template <typename ForwardIterator>
inline void boost::mysql::detail::serialize(
const com_stmt_execute_packet<ForwardIterator>& input,
SerializationContext& ctx
serialization_context& ctx
) noexcept
{
serialize(int1(com_stmt_execute_packet<ForwardIterator>::command_id), ctx);
@@ -306,7 +306,7 @@ void boost::mysql::detail::serialize_message(
basic_bytestring<Allocator>& buffer
)
{
SerializationContext ctx (caps);
serialization_context ctx (caps);
std::size_t size = get_size(input, ctx);
buffer.resize(size);
ctx.set_first(buffer.data());
@@ -317,7 +317,7 @@ void boost::mysql::detail::serialize_message(
template <typename Deserializable>
boost::mysql::error_code boost::mysql::detail::deserialize_message(
Deserializable& output,
DeserializationContext& ctx
deserialization_context& ctx
)
{
auto err = deserialize(output, ctx);
@@ -329,7 +329,7 @@ boost::mysql::error_code boost::mysql::detail::deserialize_message(
inline std::pair<boost::mysql::error_code, std::uint8_t>
boost::mysql::detail::deserialize_message_type(
DeserializationContext& ctx
deserialization_context& ctx
)
{
int1 msg_type;
@@ -347,7 +347,7 @@ boost::mysql::detail::deserialize_message_type(
}
inline boost::mysql::error_code boost::mysql::detail::process_error_packet(
DeserializationContext& ctx,
deserialization_context& ctx,
error_info& info
)
{

View File

@@ -125,7 +125,7 @@ errc deserialize_text_value_to_variant(std::string_view from, value& to, Args&&.
}
inline bool is_next_field_null(
DeserializationContext& ctx
deserialization_context& ctx
)
{
int1 type_byte;
@@ -198,7 +198,7 @@ inline boost::mysql::errc boost::mysql::detail::deserialize_text_value(
boost::mysql::error_code boost::mysql::detail::deserialize_text_row(
DeserializationContext& ctx,
deserialization_context& ctx,
const std::vector<field_metadata>& fields,
std::vector<value>& output
)

View File

@@ -300,19 +300,19 @@ struct get_struct_fields<com_stmt_close_packet>
// serialization functions
inline errc deserialize(ok_packet& output, DeserializationContext& ctx) noexcept;
inline errc deserialize(handshake_packet& output, DeserializationContext& ctx) noexcept;
inline std::size_t get_size(const handshake_response_packet& value, const SerializationContext& ctx) noexcept;
inline void serialize(const handshake_response_packet& value, SerializationContext& ctx) noexcept;
inline errc deserialize(auth_switch_request_packet& output, DeserializationContext& ctx) noexcept;
inline errc deserialize(column_definition_packet& output, DeserializationContext& ctx) noexcept;
inline errc deserialize(com_stmt_prepare_ok_packet& output, DeserializationContext& ctx) noexcept;
inline errc deserialize(ok_packet& output, deserialization_context& ctx) noexcept;
inline errc deserialize(handshake_packet& output, deserialization_context& ctx) noexcept;
inline std::size_t get_size(const handshake_response_packet& value, const serialization_context& ctx) noexcept;
inline void serialize(const handshake_response_packet& value, serialization_context& ctx) noexcept;
inline errc deserialize(auth_switch_request_packet& output, deserialization_context& ctx) noexcept;
inline errc deserialize(column_definition_packet& output, deserialization_context& ctx) noexcept;
inline errc deserialize(com_stmt_prepare_ok_packet& output, deserialization_context& ctx) noexcept;
template <typename FowardIterator>
inline std::size_t get_size(const com_stmt_execute_packet<FowardIterator>& value, const SerializationContext& ctx) noexcept;
inline std::size_t get_size(const com_stmt_execute_packet<FowardIterator>& value, const serialization_context& ctx) noexcept;
template <typename FowardIterator>
inline void serialize(const com_stmt_execute_packet<FowardIterator>& input, SerializationContext& ctx) noexcept;
inline void serialize(const com_stmt_execute_packet<FowardIterator>& input, serialization_context& ctx) noexcept;
@@ -327,14 +327,14 @@ void serialize_message(
template <typename Deserializable>
error_code deserialize_message(
Deserializable& output,
DeserializationContext& ctx
deserialization_context& ctx
);
inline std::pair<error_code, std::uint8_t> deserialize_message_type(
DeserializationContext& ctx
deserialization_context& ctx
);
inline error_code process_error_packet(DeserializationContext& ctx, error_info& info);
inline error_code process_error_packet(deserialization_context& ctx, error_info& info);
} // detail
} // mysql

View File

@@ -17,16 +17,16 @@ namespace boost {
namespace mysql {
namespace detail {
class DeserializationContext
class deserialization_context
{
ReadIterator first_;
ReadIterator last_;
capabilities capabilities_;
public:
DeserializationContext(ReadIterator first, ReadIterator last, capabilities caps) noexcept:
deserialization_context(ReadIterator first, ReadIterator last, capabilities caps) noexcept:
first_(first), last_(last), capabilities_(caps) { assert(last_ >= first_); };
DeserializationContext(boost::asio::const_buffer buff, capabilities caps) noexcept:
DeserializationContext(
deserialization_context(boost::asio::const_buffer buff, capabilities caps) noexcept:
deserialization_context(
static_cast<const std::uint8_t*>(buff.data()),
static_cast<const std::uint8_t*>(buff.data()) + buff.size(),
caps
@@ -49,12 +49,12 @@ public:
}
};
class SerializationContext
class serialization_context
{
WriteIterator first_;
capabilities capabilities_;
public:
SerializationContext(capabilities caps, WriteIterator first = nullptr) noexcept:
serialization_context(capabilities caps, WriteIterator first = nullptr) noexcept:
first_(first), capabilities_(caps) {};
WriteIterator first() const noexcept { return first_; }
void set_first(WriteIterator new_first) noexcept { first_ = new_first; }
@@ -67,7 +67,7 @@ public:
/**
* Base forms:
* errc deserialize(T& output, DeserializationContext&) noexcept
* errc deserialize(T& output, deserialization_context&) noexcept
* void serialize(const T& input, SerializationContext&) noexcept
* std::size_t get_size(const T& input, const SerializationContext&) noexcept
*/
@@ -132,7 +132,7 @@ template <std::size_t size> void native_to_little_inplace(string_fixed<size>&) n
template <typename T>
std::enable_if_t<is_fixed_size_v<T>, errc>
deserialize(T& output, DeserializationContext& ctx) noexcept
deserialize(T& output, deserialization_context& ctx) noexcept
{
static_assert(std::is_standard_layout_v<decltype(T::value)>);
@@ -152,7 +152,7 @@ deserialize(T& output, DeserializationContext& ctx) noexcept
template <typename T>
std::enable_if_t<is_fixed_size_v<T>>
serialize(T input, SerializationContext& ctx) noexcept
serialize(T input, serialization_context& ctx) noexcept
{
native_to_little_inplace(input);
ctx.write(&input.value, get_fixed_size<T>::value);
@@ -160,13 +160,13 @@ serialize(T input, SerializationContext& ctx) noexcept
template <typename T>
constexpr std::enable_if_t<is_fixed_size_v<T>, std::size_t>
get_size(T, const SerializationContext&) noexcept
get_size(T, const serialization_context&) noexcept
{
return get_fixed_size<T>::value;
}
// int_lenenc
inline errc deserialize(int_lenenc& output, DeserializationContext& ctx) noexcept
inline errc deserialize(int_lenenc& output, deserialization_context& ctx) noexcept
{
int1 first_byte;
errc err = deserialize(first_byte, ctx);
@@ -200,7 +200,7 @@ inline errc deserialize(int_lenenc& output, DeserializationContext& ctx) noexcep
}
return err;
}
inline void serialize(int_lenenc input, SerializationContext& ctx) noexcept
inline void serialize(int_lenenc input, serialization_context& ctx) noexcept
{
if (input.value < 251)
{
@@ -222,7 +222,7 @@ inline void serialize(int_lenenc input, SerializationContext& ctx) noexcept
serialize(int8(static_cast<std::uint64_t>(input.value)), ctx);
}
}
inline std::size_t get_size(int_lenenc input, const SerializationContext&) noexcept
inline std::size_t get_size(int_lenenc input, const serialization_context&) noexcept
{
if (input.value < 251) return 1;
else if (input.value < 0x10000) return 3;
@@ -237,7 +237,7 @@ inline std::string_view get_string(ReadIterator from, std::size_t size)
}
// string_null
inline errc deserialize(string_null& output, DeserializationContext& ctx) noexcept
inline errc deserialize(string_null& output, deserialization_context& ctx) noexcept
{
ReadIterator string_end = std::find(ctx.first(), ctx.last(), 0);
if (string_end == ctx.last())
@@ -248,34 +248,34 @@ inline errc deserialize(string_null& output, DeserializationContext& ctx) noexce
ctx.set_first(string_end + 1); // skip the null terminator
return errc::ok;
}
inline void serialize(string_null input, SerializationContext& ctx) noexcept
inline void serialize(string_null input, serialization_context& ctx) noexcept
{
ctx.write(input.value.data(), input.value.size());
ctx.write(0); // null terminator
}
inline std::size_t get_size(string_null input, const SerializationContext&) noexcept
inline std::size_t get_size(string_null input, const serialization_context&) noexcept
{
return input.value.size() + 1;
}
// string_eof
inline errc deserialize(string_eof& output, DeserializationContext& ctx) noexcept
inline errc deserialize(string_eof& output, deserialization_context& ctx) noexcept
{
output.value = get_string(ctx.first(), ctx.last()-ctx.first());
ctx.set_first(ctx.last());
return errc::ok;
}
inline void serialize(string_eof input, SerializationContext& ctx) noexcept
inline void serialize(string_eof input, serialization_context& ctx) noexcept
{
ctx.write(input.value.data(), input.value.size());
}
inline std::size_t get_size(string_eof input, const SerializationContext&) noexcept
inline std::size_t get_size(string_eof input, const serialization_context&) noexcept
{
return input.value.size();
}
// string_lenenc
inline errc deserialize(string_lenenc& output, DeserializationContext& ctx) noexcept
inline errc deserialize(string_lenenc& output, deserialization_context& ctx) noexcept
{
int_lenenc length;
errc err = deserialize(length, ctx);
@@ -292,14 +292,14 @@ inline errc deserialize(string_lenenc& output, DeserializationContext& ctx) noex
ctx.advance(length.value);
return errc::ok;
}
inline void serialize(string_lenenc input, SerializationContext& ctx) noexcept
inline void serialize(string_lenenc input, serialization_context& ctx) noexcept
{
int_lenenc length;
length.value = input.value.size();
serialize(length, ctx);
ctx.write(input.value.data(), input.value.size());
}
inline std::size_t get_size(string_lenenc input, const SerializationContext& ctx) noexcept
inline std::size_t get_size(string_lenenc input, const serialization_context& ctx) noexcept
{
int_lenenc length;
length.value = input.value.size();
@@ -308,7 +308,7 @@ inline std::size_t get_size(string_lenenc input, const SerializationContext& ctx
// Enums
template <typename T, typename=std::enable_if_t<std::is_enum_v<T>>>
errc deserialize(T& output, DeserializationContext& ctx) noexcept
errc deserialize(T& output, deserialization_context& ctx) noexcept
{
value_holder<std::underlying_type_t<T>> value;
errc err = deserialize(value, ctx);
@@ -321,21 +321,21 @@ errc deserialize(T& output, DeserializationContext& ctx) noexcept
}
template <typename T, typename=std::enable_if_t<std::is_enum_v<T>>>
void serialize(T input, SerializationContext& ctx) noexcept
void serialize(T input, serialization_context& ctx) noexcept
{
value_holder<std::underlying_type_t<T>> value {static_cast<std::underlying_type_t<T>>(input)};
serialize(value, ctx);
}
template <typename T, typename=std::enable_if_t<std::is_enum_v<T>>>
std::size_t get_size(T, const SerializationContext&) noexcept
std::size_t get_size(T, const serialization_context&) noexcept
{
return get_fixed_size<value_holder<std::underlying_type_t<T>>>::value;
}
// Floating points
template <typename T, typename=std::enable_if_t<std::is_floating_point_v<T>>>
errc deserialize(value_holder<T>& output, DeserializationContext& ctx) noexcept
errc deserialize(value_holder<T>& output, deserialization_context& ctx) noexcept
{
// Size check
if (!ctx.enough_size(sizeof(T))) return errc::incomplete_message;
@@ -355,7 +355,7 @@ errc deserialize(value_holder<T>& output, DeserializationContext& ctx) noexcept
}
template <typename T, typename=std::enable_if_t<std::is_floating_point_v<T>>>
void serialize(const value_holder<T>& input, SerializationContext& ctx) noexcept
void serialize(const value_holder<T>& input, serialization_context& ctx) noexcept
{
// Endianness conversion
#if BOOST_ENDIAN_BIG_BYTE
@@ -369,7 +369,7 @@ void serialize(const value_holder<T>& input, SerializationContext& ctx) noexcept
}
template <typename T, typename=std::enable_if_t<std::is_floating_point_v<T>>>
std::size_t get_size(const value_holder<T>&, const SerializationContext&) noexcept
std::size_t get_size(const value_holder<T>&, const serialization_context&) noexcept
{
return sizeof(T);
}
@@ -412,7 +412,7 @@ struct is_command : decltype(is_command_helper::get<T>(nullptr))
template <std::size_t index, typename T>
errc deserialize_struct(
[[maybe_unused]] T& output,
[[maybe_unused]] DeserializationContext& ctx
[[maybe_unused]] deserialization_context& ctx
) noexcept
{
constexpr auto fields = get_struct_fields<T>::value;
@@ -437,7 +437,7 @@ errc deserialize_struct(
template <typename T>
std::enable_if_t<is_struct_with_fields<T>::value, errc>
deserialize(T& output, DeserializationContext& ctx) noexcept
deserialize(T& output, deserialization_context& ctx) noexcept
{
return deserialize_struct<0>(output, ctx);
}
@@ -445,7 +445,7 @@ deserialize(T& output, DeserializationContext& ctx) noexcept
template <std::size_t index, typename T>
void serialize_struct(
[[maybe_unused]] const T& value,
[[maybe_unused]] SerializationContext& ctx
[[maybe_unused]] serialization_context& ctx
) noexcept
{
constexpr auto fields = get_struct_fields<T>::value;
@@ -461,7 +461,7 @@ template <typename T>
std::enable_if_t<is_struct_with_fields<T>::value>
serialize(
[[maybe_unused]] const T& input,
[[maybe_unused]] SerializationContext& ctx
[[maybe_unused]] serialization_context& ctx
) noexcept
{
// For commands, add the command ID. Commands are only sent by the client,
@@ -476,7 +476,7 @@ serialize(
template <std::size_t index, typename T>
std::size_t get_size_struct(
[[maybe_unused]] const T& input,
[[maybe_unused]] const SerializationContext& ctx
[[maybe_unused]] const serialization_context& ctx
) noexcept
{
constexpr auto fields = get_struct_fields<T>::value;
@@ -494,7 +494,7 @@ std::size_t get_size_struct(
template <typename T>
std::enable_if_t<is_struct_with_fields<T>::value, std::size_t>
get_size(const T& input, const SerializationContext& ctx) noexcept
get_size(const T& input, const serialization_context& ctx) noexcept
{
std::size_t res = is_command<T>::value ? 1 : 0;
res += get_size_struct<0>(input, ctx);
@@ -503,10 +503,10 @@ get_size(const T& input, const SerializationContext& ctx) noexcept
// Helper to write custom struct (de)serialize()
template <typename FirstType>
errc deserialize_fields(DeserializationContext& ctx, FirstType& field) noexcept { return deserialize(field, ctx); }
errc deserialize_fields(deserialization_context& ctx, FirstType& field) noexcept { return deserialize(field, ctx); }
template <typename FirstType, typename... Types>
errc deserialize_fields(DeserializationContext& ctx, FirstType& field, Types&... fields_tail) noexcept
errc deserialize_fields(deserialization_context& ctx, FirstType& field, Types&... fields_tail) noexcept
{
errc err = deserialize(field, ctx);
if (err == errc::ok)
@@ -517,10 +517,10 @@ errc deserialize_fields(DeserializationContext& ctx, FirstType& field, Types&...
}
template <typename FirstType>
void serialize_fields(SerializationContext& ctx, const FirstType& field) noexcept { serialize(field, ctx); }
void serialize_fields(serialization_context& ctx, const FirstType& field) noexcept { serialize(field, ctx); }
template <typename FirstType, typename... Types>
void serialize_fields(SerializationContext& ctx, const FirstType& field, const Types&... fields_tail)
void serialize_fields(serialization_context& ctx, const FirstType& field, const Types&... fields_tail)
{
serialize(field, ctx);
serialize_fields(ctx, fields_tail...);
@@ -531,9 +531,9 @@ struct dummy_serializable
{
dummy_serializable(...) {} // Make it constructible from anything
};
inline std::size_t get_size(dummy_serializable, const SerializationContext&) noexcept { return 0; }
inline void serialize(dummy_serializable, SerializationContext&) noexcept {}
inline errc deserialize(dummy_serializable, DeserializationContext&) noexcept { return errc::ok; }
inline std::size_t get_size(dummy_serializable, const serialization_context&) noexcept { return 0; }
inline void serialize(dummy_serializable, serialization_context&) noexcept {}
inline errc deserialize(dummy_serializable, deserialization_context&) noexcept { return errc::ok; }
} // detail
} // mysql

View File

@@ -18,7 +18,7 @@ inline errc deserialize_text_value(
);
inline error_code deserialize_text_row(
DeserializationContext& ctx,
deserialization_context& ctx,
const std::vector<field_metadata>& meta,
std::vector<value>& output
);

View File

@@ -94,9 +94,9 @@ class TypeErasedValue
{
public:
virtual ~TypeErasedValue() {}
virtual void serialize(SerializationContext& ctx) const = 0;
virtual std::size_t get_size(const SerializationContext& ctx) const = 0;
virtual errc deserialize(DeserializationContext& ctx) = 0;
virtual void serialize(serialization_context& ctx) const = 0;
virtual std::size_t get_size(const serialization_context& ctx) const = 0;
virtual errc deserialize(deserialization_context& ctx) = 0;
virtual std::shared_ptr<TypeErasedValue> default_construct() const = 0;
virtual bool equals(const TypeErasedValue& rhs) const = 0;
virtual void print(std::ostream& os) const = 0;
@@ -115,9 +115,9 @@ class TypeErasedValueImpl : public TypeErasedValue
T value_;
public:
TypeErasedValueImpl(const T& v): value_(v) {};
void serialize(SerializationContext& ctx) const override { ::boost::mysql::detail::serialize(value_, ctx); }
std::size_t get_size(const SerializationContext& ctx) const override { return ::boost::mysql::detail::get_size(value_, ctx); }
errc deserialize(DeserializationContext& ctx) override { return ::boost::mysql::detail::deserialize(value_, ctx); }
void serialize(serialization_context& ctx) const override { ::boost::mysql::detail::serialize(value_, ctx); }
std::size_t get_size(const serialization_context& ctx) const override { return ::boost::mysql::detail::get_size(value_, ctx); }
errc deserialize(deserialization_context& ctx) override { return ::boost::mysql::detail::deserialize(value_, ctx); }
std::shared_ptr<TypeErasedValue> default_construct() const override
{
return std::make_shared<TypeErasedValueImpl<T>>(T{});
@@ -168,7 +168,7 @@ struct SerializationFixture : public testing::TestWithParam<SerializeParams>
// get_size
void get_size_test()
{
SerializationContext ctx (GetParam().caps, nullptr);
serialization_context ctx (GetParam().caps, nullptr);
auto size = GetParam().value->get_size(ctx);
EXPECT_EQ(size, GetParam().expected_buffer.size());
}
@@ -178,7 +178,7 @@ struct SerializationFixture : public testing::TestWithParam<SerializeParams>
{
auto expected_size = GetParam().expected_buffer.size();
std::vector<uint8_t> buffer (expected_size + 8, 0x7a); // buffer overrun detector
SerializationContext ctx (GetParam().caps, buffer.data());
serialization_context ctx (GetParam().caps, buffer.data());
GetParam().value->serialize(ctx);
// Iterator
@@ -200,7 +200,7 @@ struct SerializationFixture : public testing::TestWithParam<SerializeParams>
{
auto first = GetParam().expected_buffer.data();
auto size = GetParam().expected_buffer.size();
DeserializationContext ctx (first, first + size, GetParam().caps);
deserialization_context ctx (first, first + size, GetParam().caps);
auto actual_value = GetParam().value->default_construct();
auto err = actual_value->deserialize(ctx);
@@ -219,7 +219,7 @@ struct SerializationFixture : public testing::TestWithParam<SerializeParams>
std::vector<uint8_t> buffer (GetParam().expected_buffer);
buffer.push_back(0xff);
auto first = buffer.data();
DeserializationContext ctx (first, first + buffer.size(), GetParam().caps);
deserialization_context ctx (first, first + buffer.size(), GetParam().caps);
auto actual_value = GetParam().value->default_construct();
auto err = actual_value->deserialize(ctx);
@@ -237,7 +237,7 @@ struct SerializationFixture : public testing::TestWithParam<SerializeParams>
{
std::vector<uint8_t> buffer (GetParam().expected_buffer);
buffer.back() = 0x7a; // try to detect any overruns
DeserializationContext ctx (buffer.data(), buffer.data() + buffer.size() - 1, GetParam().caps);
deserialization_context ctx (buffer.data(), buffer.data() + buffer.size() - 1, GetParam().caps);
auto actual_value = GetParam().value->default_construct();
auto err = actual_value->deserialize(ctx);
EXPECT_EQ(err, errc::incomplete_message);
@@ -302,7 +302,7 @@ TEST_P(DeserializeErrorTest, Deserialize_ErrorCondition_ReturnsErrorCode)
{
auto first = GetParam().buffer.data();
auto last = GetParam().buffer.data() + GetParam().buffer.size();
DeserializationContext ctx (first, last, capabilities(0));
deserialization_context ctx (first, last, capabilities(0));
auto value = GetParam().value->default_construct();
auto err = value->deserialize(ctx);
EXPECT_EQ(err, GetParam().expected_error);

View File

@@ -73,7 +73,7 @@ TEST_P(DeserializeBinaryValueTest, CorrectFormat_SetsOutputValueReturnsTrue)
boost::mysql::field_metadata meta (coldef);
value actual_value;
const auto& buffer = GetParam().from;
DeserializationContext ctx (buffer.data(), buffer.data() + buffer.size(), capabilities());
deserialization_context ctx (buffer.data(), buffer.data() + buffer.size(), capabilities());
auto err = deserialize_binary_value(ctx, meta, actual_value);
EXPECT_EQ(err, errc::ok);
EXPECT_EQ(actual_value, GetParam().expected);
@@ -166,7 +166,7 @@ TEST_P(DeserializeBinaryRowTest, CorrectFormat_SetsOutputValueReturnsTrue)
{
auto meta = make_meta(GetParam().types);
const auto& buffer = GetParam().from;
DeserializationContext ctx (buffer.data(), buffer.data() + buffer.size(), capabilities());
deserialization_context ctx (buffer.data(), buffer.data() + buffer.size(), capabilities());
std::vector<value> actual;
auto err = deserialize_binary_row(ctx, meta, actual);
@@ -242,7 +242,7 @@ TEST_P(DeserializeBinaryRowErrorTest, ErrorCondition_ReturnsErrorCode)
{
auto meta = make_meta(GetParam().types);
const auto& buffer = GetParam().from;
DeserializationContext ctx (buffer.data(), buffer.data() + buffer.size(), capabilities());
deserialization_context ctx (buffer.data(), buffer.data() + buffer.size(), capabilities());
std::vector<value> actual;
auto err = deserialize_binary_row(ctx, meta, actual);

View File

@@ -340,7 +340,7 @@ struct DeserializeTextRowTest : public Test
error_code deserialize(const std::vector<std::uint8_t>& buffer)
{
DeserializationContext ctx (buffer.data(), buffer.data() + buffer.size(), capabilities());
deserialization_context ctx (buffer.data(), buffer.data() + buffer.size(), capabilities());
return deserialize_text_row(ctx, meta, values);
}
};