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

Added async API for prepared statements

This commit is contained in:
ruben
2020-02-07 23:45:43 +00:00
parent 2189db26ef
commit f7430308f5
4 changed files with 42 additions and 0 deletions

View File

@@ -124,6 +124,9 @@ public:
prepared_statement<Stream> prepare_statement(std::string_view statement, error_code&, error_info&);
prepared_statement<Stream> prepare_statement(std::string_view statement);
template <typename CompletionToken>
auto async_prepare_statement(std::string_view statement, CompletionToken&& token);
};
/// A connection to MySQL over TCP.

View File

@@ -145,5 +145,15 @@ mysql::prepared_statement<Stream> mysql::connection<Stream>::prepare_statement(
return res;
}
template <typename Stream>
template <typename CompletionToken>
auto mysql::connection<Stream>::async_prepare_statement(
std::string_view statement,
CompletionToken&& token
)
{
return detail::async_prepare_statement(channel_, statement, std::forward<CompletionToken>(token));
}
#endif

View File

@@ -56,4 +56,24 @@ mysql::resultset<Stream> mysql::prepared_statement<Stream>::execute(
return res;
}
template <typename StreamType>
template <typename ForwardIterator, typename CompletionToken>
auto mysql::prepared_statement<StreamType>::async_execute(
ForwardIterator params_first,
ForwardIterator params_last,
CompletionToken&& token
) const
{
// TODO: actually return an error message here instead of crashing
assert(std::distance(params_first, params_last) == num_params());
return detail::async_execute_statement(
*channel_,
stmt_msg_.statement_id.value,
params_first,
params_last,
std::forward<CompletionToken>(token)
);
}
#endif /* INCLUDE_MYSQL_IMPL_PREPARED_STATEMENT_IPP_ */

View File

@@ -37,6 +37,12 @@ public:
return execute(std::begin(params), std::end(params));
}
template <typename Collection, typename CompletionToken>
auto async_execute(const Collection& params, CompletionToken&& token) const
{
return async_execute(std::begin(params), std::end(params), std::forward<CompletionToken>(token));
}
template <typename ForwardIterator>
resultset<Stream> execute(ForwardIterator params_first, ForwardIterator params_last, error_code&, error_info&) const;
@@ -44,6 +50,9 @@ public:
template <typename ForwardIterator>
resultset<Stream> execute(ForwardIterator params_first, ForwardIterator params_last) const;
template <typename ForwardIterator, typename CompletionToken>
auto async_execute(ForwardIterator params_first, ForwardIterator params_last, CompletionToken&& token) const;
};
using tcp_prepared_statement = prepared_statement<boost::asio::ip::tcp::socket>;