diff options
Diffstat (limited to 'client/mysqltest.cc')
-rw-r--r-- | client/mysqltest.cc | 119 |
1 files changed, 118 insertions, 1 deletions
diff --git a/client/mysqltest.cc b/client/mysqltest.cc index 315e180368c..da7589b31e5 100644 --- a/client/mysqltest.cc +++ b/client/mysqltest.cc @@ -125,7 +125,8 @@ static my_bool view_protocol= 0, view_protocol_enabled= 0; static my_bool cursor_protocol= 0, cursor_protocol_enabled= 0; static my_bool parsing_disabled= 0; static my_bool display_result_vertically= FALSE, display_result_lower= FALSE, - display_metadata= FALSE, display_result_sorted= FALSE; + display_metadata= FALSE, display_result_sorted= FALSE, + display_session_track_info= FALSE; static my_bool disable_query_log= 0, disable_result_log= 0; static my_bool disable_connect_log= 0; static my_bool disable_warnings= 0, disable_column_names= 0; @@ -153,6 +154,7 @@ static struct property prop_list[] = { { &abort_on_error, 0, 1, 0, "$ENABLED_ABORT_ON_ERROR" }, { &disable_connect_log, 0, 1, 1, "$ENABLED_CONNECT_LOG" }, { &disable_info, 0, 1, 1, "$ENABLED_INFO" }, + { &display_session_track_info, 0, 1, 1, "$ENABLED_STATE_CHANGE_INFO" }, { &display_metadata, 0, 0, 0, "$ENABLED_METADATA" }, { &ps_protocol_enabled, 0, 0, 0, "$ENABLED_PS_PROTOCOL" }, { &disable_query_log, 0, 0, 1, "$ENABLED_QUERY_LOG" }, @@ -166,6 +168,7 @@ enum enum_prop { P_ABORT= 0, P_CONNECT, P_INFO, + P_SESSION_TRACK, P_META, P_PS, P_QUERY, @@ -362,6 +365,7 @@ enum enum_commands { Q_WAIT_FOR_SLAVE_TO_STOP, Q_ENABLE_WARNINGS, Q_DISABLE_WARNINGS, Q_ENABLE_INFO, Q_DISABLE_INFO, + Q_ENABLE_SESSION_TRACK_INFO, Q_DISABLE_SESSION_TRACK_INFO, Q_ENABLE_METADATA, Q_DISABLE_METADATA, Q_ENABLE_COLUMN_NAMES, Q_DISABLE_COLUMN_NAMES, Q_EXEC, Q_DELIMITER, @@ -384,6 +388,7 @@ enum enum_commands { Q_RESULT_FORMAT_VERSION, Q_MOVE_FILE, Q_REMOVE_FILES_WILDCARD, Q_SEND_EVAL, Q_ENABLE_PREPARE_WARNINGS, Q_DISABLE_PREPARE_WARNINGS, + Q_RESET_CONNECTION, Q_UNKNOWN, /* Unknown command. */ Q_COMMENT, /* Comments, ignored. */ Q_COMMENT_WITH_COMMAND, @@ -435,6 +440,8 @@ const char *command_names[]= "disable_warnings", "enable_info", "disable_info", + "enable_session_track_info", + "disable_session_track_info", "enable_metadata", "disable_metadata", "enable_column_names", @@ -491,6 +498,7 @@ const char *command_names[]= "send_eval", "enable_prepare_warnings", "disable_prepare_warnings", + "reset_connection", 0 }; @@ -6531,6 +6539,34 @@ void do_delimiter(struct st_command* command) } +/* + do_reset_connection + + DESCRIPTION + Reset the current session. +*/ + +static void do_reset_connection() +{ +#ifndef EMBEDDED_LIBRARY + MYSQL *mysql = cur_con->mysql; + + DBUG_ENTER("do_reset_connection"); + if (mysql_reset_connection(mysql)) + die("reset connection failed: %s", mysql_error(mysql)); + if (cur_con->stmt) + { + mysql_stmt_close(cur_con->stmt); + cur_con->stmt= NULL; + } + DBUG_VOID_RETURN; +#else + die("reset connection failed: unsupported by embedded server client library"); + return; +#endif +} + + my_bool match_delimiter(int c, const char *delim, size_t length) { uint i; @@ -7786,6 +7822,70 @@ void append_info(DYNAMIC_STRING *ds, ulonglong affected_rows, } +/** + @brief Append state change information (received through Ok packet) to the output. + + @param [in,out] ds Dynamic string to hold the content to be printed. + @param [in] mysql Connection handle. +*/ + +static void append_session_track_info(DYNAMIC_STRING *ds, MYSQL *mysql) +{ +#ifndef EMBEDDED_LIBRARY + for (unsigned int type= SESSION_TRACK_BEGIN; type <= SESSION_TRACK_END; type++) + { + const char *data; + size_t data_length; + + if (!mysql_session_track_get_first(mysql, + (enum_session_state_type) type, + &data, &data_length)) + { + dynstr_append(ds, "-- "); + switch (type) + { + case SESSION_TRACK_SYSTEM_VARIABLES: + dynstr_append(ds, "Tracker : SESSION_TRACK_SYSTEM_VARIABLES\n"); + break; + case SESSION_TRACK_SCHEMA: + dynstr_append(ds, "Tracker : SESSION_TRACK_SCHEMA\n"); + break; + case SESSION_TRACK_STATE_CHANGE: + dynstr_append(ds, "Tracker : SESSION_TRACK_STATE_CHANGE\n"); + break; + case SESSION_TRACK_GTIDS: + dynstr_append(ds, "Tracker : SESSION_TRACK_GTIDS\n"); + break; + case SESSION_TRACK_TRANSACTION_CHARACTERISTICS: + dynstr_append(ds, "Tracker : SESSION_TRACK_TRANSACTION_CHARACTERISTICS\n"); + break; + case SESSION_TRACK_TRANSACTION_TYPE: + dynstr_append(ds, "Tracker : SESSION_TRACK_TRANSACTION_TYPE\n"); + break; + default: + DBUG_ASSERT(0); + dynstr_append(ds, "\n"); + } + + + dynstr_append(ds, "-- "); + dynstr_append_mem(ds, data, data_length); + } + else + continue; + while (!mysql_session_track_get_next(mysql, + (enum_session_state_type) type, + &data, &data_length)) + { + dynstr_append(ds, "\n-- "); + dynstr_append_mem(ds, data, data_length); + } + dynstr_append(ds, "\n\n"); + } +#endif /* EMBEDDED_LIBRARY */ +} + + /* Display the table headings with the names tab separated */ @@ -7966,6 +8066,9 @@ void run_query_normal(struct st_connection *cn, struct st_command *command, if (!disable_info) append_info(ds, mysql_affected_rows(mysql), mysql_info(mysql)); + if (display_session_track_info) + append_session_track_info(ds, mysql); + /* Add all warnings to the result. We can't do this if we are in the middle of processing results from multi-statement, because @@ -8381,6 +8484,10 @@ void run_query_stmt(struct st_connection *cn, struct st_command *command, if (!disable_info) append_info(ds, mysql_stmt_affected_rows(stmt), mysql_info(mysql)); + if (display_session_track_info) + append_session_track_info(ds, mysql); + + if (!disable_warnings) { /* Get the warnings from execute */ @@ -8776,6 +8883,7 @@ void init_re(void) "[[:space:]]*SELECT[[:space:]]|" "[[:space:]]*CREATE[[:space:]]+TABLE[[:space:]]|" "[[:space:]]*DO[[:space:]]|" + "[[:space:]]*HANDLER[[:space:]]+.*[[:space:]]+READ[[:space:]]|" "[[:space:]]*SET[[:space:]]+OPTION[[:space:]]|" "[[:space:]]*DELETE[[:space:]]+MULTI[[:space:]]|" "[[:space:]]*UPDATE[[:space:]]+MULTI[[:space:]]|" @@ -9361,6 +9469,12 @@ int main(int argc, char **argv) case Q_DISABLE_INFO: set_property(command, P_INFO, 1); break; + case Q_ENABLE_SESSION_TRACK_INFO: + set_property(command, P_SESSION_TRACK, 1); + break; + case Q_DISABLE_SESSION_TRACK_INFO: + set_property(command, P_SESSION_TRACK, 0); + break; case Q_ENABLE_METADATA: set_property(command, P_META, 1); break; @@ -9571,6 +9685,9 @@ int main(int argc, char **argv) case Q_PING: handle_command_error(command, mysql_ping(cur_con->mysql), -1); break; + case Q_RESET_CONNECTION: + do_reset_connection(); + break; case Q_SEND_SHUTDOWN: handle_command_error(command, mysql_shutdown(cur_con->mysql, |