From fda46df62071f54ebc4d806c6d9caf031d801150 Mon Sep 17 00:00:00 2001 From: Sergey Petrunya Date: Tue, 8 Oct 2013 14:26:14 +0400 Subject: [PATCH] MDEV-3798: EXPLAIN UPDATE/DELETE - if EXPLAIN DELETE prints "Deleting all rows", it should show the expected number of rows in the rows column. --- sql/sql_delete.cc | 1 + sql/sql_explain.cc | 8 +++++--- sql/sql_select.cc | 23 +++++++++++++++++++++-- sql/sql_select.h | 1 + 4 files changed, 28 insertions(+), 5 deletions(-) diff --git a/sql/sql_delete.cc b/sql/sql_delete.cc index c023a1eebf4..50a5ec79166 100644 --- a/sql/sql_delete.cc +++ b/sql/sql_delete.cc @@ -59,6 +59,7 @@ void Delete_plan::save_explain_data(Explain_query *query) { explain->deleting_all_rows= true; explain->select_type= "SIMPLE"; + explain->rows= table_rows; } else { diff --git a/sql/sql_explain.cc b/sql/sql_explain.cc index 2bd6a6bef25..a8afc0ac6d3 100644 --- a/sql/sql_explain.cc +++ b/sql/sql_explain.cc @@ -778,7 +778,7 @@ int Explain_delete::print_explain(Explain_query *query, const char *msg= "Deleting all rows"; int res= print_explain_message_line(output, explain_flags, 1 /*select number*/, - select_type, msg); + select_type, &rows, msg); return res; } @@ -797,11 +797,13 @@ int Explain_update::print_explain(Explain_query *query, if (impossible_where || no_partitions) { const char *msg= impossible_where ? - "Impossible where" : + "Impossible WHERE" : "No matching rows after partition pruning"; int res= print_explain_message_line(output, explain_flags, 1 /*select number*/, - select_type, msg); + select_type, + NULL, /* rows */ + msg); return res; } diff --git a/sql/sql_select.cc b/sql/sql_select.cc index 72dc10a8917..b99b41915f6 100644 --- a/sql/sql_select.cc +++ b/sql/sql_select.cc @@ -22222,6 +22222,7 @@ int print_explain_message_line(select_result_sink *result, uint8 options, uint select_number, const char *select_type, + ha_rows *rows, const char *message) { const CHARSET_INFO *cs= system_charset_info; @@ -22231,13 +22232,31 @@ int print_explain_message_line(select_result_sink *result, item_list.push_back(new Item_int((int32) select_number)); item_list.push_back(new Item_string(select_type, strlen(select_type), cs)); - for (uint i=0 ; i < 7; i++) - item_list.push_back(item_null); + /* `table` */ + item_list.push_back(item_null); + + /* `partitions` */ if (options & DESCRIBE_PARTITIONS) item_list.push_back(item_null); + + /* type, possible_keys, key, key_len, ref */ + for (uint i=0 ; i < 5; i++) + item_list.push_back(item_null); + + /* `rows` */ + if (rows) + { + item_list.push_back(new Item_int(*rows, + MY_INT64_NUM_DECIMAL_DIGITS)); + } + else + item_list.push_back(item_null); + + /* `filtered` */ if (options & DESCRIBE_EXTENDED) item_list.push_back(item_null); + /* `Extra` */ if (message) item_list.push_back(new Item_string(message,strlen(message),cs)); else diff --git a/sql/sql_select.h b/sql/sql_select.h index c615e855606..71760ea76f5 100644 --- a/sql/sql_select.h +++ b/sql/sql_select.h @@ -1852,6 +1852,7 @@ int print_explain_message_line(select_result_sink *result, uint8 options, uint select_number, const char *select_type, + ha_rows *rows, const char *message); void explain_append_mrr_info(QUICK_RANGE_SELECT *quick, String *res); int print_explain_row(select_result_sink *result,