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

Added async_execute_statement

This commit is contained in:
ruben
2020-02-07 23:14:57 +00:00
parent 7fa3865733
commit 2189db26ef
2 changed files with 53 additions and 11 deletions

View File

@@ -21,6 +21,16 @@ void execute_statement(
error_info& info
);
template <typename StreamType, typename ForwardIterator, typename CompletionToken>
BOOST_ASIO_INITFN_RESULT_TYPE(CompletionToken, void(error_code, error_info, resultset<StreamType>))
async_execute_statement(
channel<StreamType>& chan,
std::uint32_t statement_id,
ForwardIterator params_begin,
ForwardIterator params_end,
CompletionToken&& token
);
}
}

View File

@@ -4,6 +4,31 @@
#include "mysql/impl/network_algorithms/execute_generic.hpp"
#include "mysql/impl/binary_deserialization.hpp"
namespace mysql
{
namespace detail
{
template <typename ForwardIterator>
com_stmt_execute_packet<ForwardIterator> make_stmt_execute_packet(
std::uint32_t statement_id,
ForwardIterator params_begin,
ForwardIterator params_end
)
{
return com_stmt_execute_packet<ForwardIterator> {
int4(statement_id),
int1(0), // flags
int4(1), // iteration count
int1(1), // new params flag: set
params_begin,
params_end
};
}
}
}
template <typename StreamType, typename ForwardIterator>
void mysql::detail::execute_statement(
channel<StreamType>& chan,
@@ -15,20 +40,27 @@ void mysql::detail::execute_statement(
error_info& info
)
{
// Compose statement execute message
com_stmt_execute_packet<ForwardIterator> request {
int4(statement_id),
int1(0), // flags
int4(1), // iteration count
int1(1), // new params flag: set
params_begin,
params_end
};
auto request = make_stmt_execute_packet(statement_id, params_begin, params_end);
execute_generic(&deserialize_binary_row, chan, request, output, err, info);
}
template <typename StreamType, typename ForwardIterator, typename CompletionToken>
BOOST_ASIO_INITFN_RESULT_TYPE(
CompletionToken,
void(mysql::error_code, mysql::error_info, mysql::resultset<StreamType>)
)
mysql::detail::async_execute_statement(
channel<StreamType>& chan,
std::uint32_t statement_id,
ForwardIterator params_begin,
ForwardIterator params_end,
CompletionToken&& token
)
{
auto request = make_stmt_execute_packet(statement_id, params_begin, params_end);
return async_execute_generic(&deserialize_binary_row, chan, request, std::forward<CompletionToken>(token));
}
#endif /* INCLUDE_MYSQL_IMPL_NETWORK_ALGORITHMS_EXECUTE_STATEMENT_IPP_ */