From afcf7bc71c0d0d2777789d2314d06858e7cf570a Mon Sep 17 00:00:00 2001 From: Davi Arnaut Date: Tue, 16 Nov 2010 19:57:18 -0200 Subject: [PATCH] Bug#57058: SERVER_QUERY_WAS_SLOW not wired up. Finalize the server flags after any kind of command is executed. To avoid updating the flag multiple times, reorganize code so that its invoked only once for each command. --- sql/log_event.cc | 2 ++ sql/sql_parse.cc | 10 ++++++---- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/sql/log_event.cc b/sql/log_event.cc index 2feb69493a8..5041e6225de 100644 --- a/sql/log_event.cc +++ b/sql/log_event.cc @@ -3353,6 +3353,8 @@ int Query_log_event::do_apply_event(Relay_log_info const *rli, if (!parser_state.init(thd, thd->query(), thd->query_length())) { mysql_parse(thd, thd->query(), thd->query_length(), &parser_state); + /* Finalize server status flags after executing a statement. */ + thd->update_server_status(); log_slow_statement(thd); } diff --git a/sql/sql_parse.cc b/sql/sql_parse.cc index 4f4e26d1df0..8428f143ddb 100644 --- a/sql/sql_parse.cc +++ b/sql/sql_parse.cc @@ -1034,11 +1034,13 @@ bool dispatch_command(enum enum_server_command command, THD *thd, while (!thd->killed && (parser_state.m_lip.found_semicolon != NULL) && ! thd->is_error()) { - char *beginning_of_next_stmt= (char*) - parser_state.m_lip.found_semicolon; /* Multiple queries exits, execute them individually */ + char *beginning_of_next_stmt= (char*) parser_state.m_lip.found_semicolon; + + /* Finalize server status flags after executing a statement. */ + thd->update_server_status(); thd->protocol->end_statement(); query_cache_end_of_result(thd); ulong length= (ulong)(packet_end - beginning_of_next_stmt); @@ -1384,6 +1386,8 @@ bool dispatch_command(enum enum_server_command command, THD *thd, (thd->open_tables == NULL || (thd->locked_tables_mode == LTM_LOCK_TABLES))); + /* Finalize server status flags after executing a command. */ + thd->update_server_status(); thd->protocol->end_statement(); query_cache_end_of_result(thd); @@ -5504,8 +5508,6 @@ void mysql_parse(THD *thd, char *rawbuf, uint length, thd->end_statement(); thd->cleanup_after_query(); DBUG_ASSERT(thd->change_list.is_empty()); - /* Finalize server status flags after executing a statement. */ - thd->update_server_status(); } DBUG_VOID_RETURN;