| Home | Libraries | People | FAQ | More

###### any_connection::async_reset_connection (2 of 2 overloads)

Resets server-side session state, like variables and prepared statements.

###### Synopsis

    template<
        class CompletionToken = with_diagnostics_t<asio::deferred_t>>
    auto
    async_reset_connection(
        diagnostics& diag,
        CompletionToken&& token = {});

###### Description

Resets all server-side state for the current session:

- Rolls back any active transactions and resets autocommit mode.
- Releases all table locks.
- Drops all temporary tables.
- Resets all session system variables to their default values (including the ones set by `SET NAMES`) and clears all user-defined variables.
- Closes all prepared statements.

A full reference on the affected session state can be found here.

This function will not reset the current physical connection and won't cause re-authentication. It is faster than closing and re-opening a connection.

The connection must be connected and authenticated before calling this function. This function involves communication with the server, and thus may fail.

###### Warning on character sets

This function will restore the connection's character set and collation to the server's default, and not to the one specified during connection establishment. Some servers have `latin1` as their default character set, which is not usually what you want. Since there is no way to know this character set, `current_character_set` will return `nullptr` after the operation succeeds. We recommend always using `set_character_set` or `async_set_character_set` after calling this function.

You can find the character set that your server will use after the reset by running:

    "SELECT @@global.character_set_client, @@global.character_set_results;"

###### Handler signature

The handler signature for this operation is `void(boost::mysql::error_code)`.

###### Executor

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.