...one of the most highly
regarded and expertly designed C++ library projects in the
world.
— Herb Sutter and Andrei
Alexandrescu, C++
Coding Standards
Executes a text query or prepared statement.
template< classExecutionRequest
, classResultsType
, class CompletionToken> auto async_execute( ExecutionRequest&& req, ResultsType& result,diagnostics
& diag, CompletionToken&& token);
Sends req
to the server
for execution and reads the response into result
.
result
may be either
a results
or static_results
object. req
should may be either a type convertible
to string_view
containing valid
SQL or a bound prepared statement, obtained by calling statement::bind
. If a string, it must be
encoded using the connection's character set. Any string parameters provided
to statement::bind
should also be encoded
using the connection's character set.
After this operation completes successfully, result.has_value() == true
.
Metadata in result
will
be populated according to this->meta_mode()
.
If CompletionToken
is
a deferred completion token (e.g. use_awaitable
),
the caller is responsible for managing req
's
validity following these rules:
req
is string_view
, the string pointed
to by req
must be
kept alive by the caller until the operation is initiated.
req
is a bound_statement_tuple
, and
any of the parameters is a reference type (like string_view
),
the caller must keep the values pointed by these references alive
until the operation is initiated.
req
is a bound_statement_iterator_range
,
the caller must keep objects in the iterator range passed to statement::bind
alive until the operation is initiated.
The handler signature for this operation is void(boost::mysql::error_code)
.
Intermediate completion handlers, as well as the final handler, are executed
using token
's associated
executor, or this->get_executor()
if the token doesn't have an associated executor.
If the final handler has an associated immediate executor, and the operation
completes immediately, the final handler is dispatched to it. Otherwise,
the final handler is called as if it was submitted using asio::post
, and is never be called inline
from within this function.