diff --git a/include/mysql/impl/network_algorithms/execute_statement.hpp b/include/mysql/impl/network_algorithms/execute_statement.hpp index 40d40983..54d306fb 100644 --- a/include/mysql/impl/network_algorithms/execute_statement.hpp +++ b/include/mysql/impl/network_algorithms/execute_statement.hpp @@ -21,6 +21,16 @@ void execute_statement( error_info& info ); +template +BOOST_ASIO_INITFN_RESULT_TYPE(CompletionToken, void(error_code, error_info, resultset)) +async_execute_statement( + channel& chan, + std::uint32_t statement_id, + ForwardIterator params_begin, + ForwardIterator params_end, + CompletionToken&& token +); + } } diff --git a/include/mysql/impl/network_algorithms/execute_statement.ipp b/include/mysql/impl/network_algorithms/execute_statement.ipp index ecd1c2b9..89dc3ba7 100644 --- a/include/mysql/impl/network_algorithms/execute_statement.ipp +++ b/include/mysql/impl/network_algorithms/execute_statement.ipp @@ -4,6 +4,31 @@ #include "mysql/impl/network_algorithms/execute_generic.hpp" #include "mysql/impl/binary_deserialization.hpp" +namespace mysql +{ +namespace detail +{ + +template +com_stmt_execute_packet make_stmt_execute_packet( + std::uint32_t statement_id, + ForwardIterator params_begin, + ForwardIterator params_end +) +{ + return com_stmt_execute_packet { + int4(statement_id), + int1(0), // flags + int4(1), // iteration count + int1(1), // new params flag: set + params_begin, + params_end + }; +} + +} +} + template void mysql::detail::execute_statement( channel& chan, @@ -15,20 +40,27 @@ void mysql::detail::execute_statement( error_info& info ) { - // Compose statement execute message - com_stmt_execute_packet 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 +BOOST_ASIO_INITFN_RESULT_TYPE( + CompletionToken, + void(mysql::error_code, mysql::error_info, mysql::resultset) +) +mysql::detail::async_execute_statement( + channel& 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(token)); +} + - - #endif /* INCLUDE_MYSQL_IMPL_NETWORK_ALGORITHMS_EXECUTE_STATEMENT_IPP_ */