From 8346a498eaa1b1c3d8d709f78ca6a913b6c9bc5e Mon Sep 17 00:00:00 2001 From: Sergey Petrunya Date: Mon, 7 Oct 2013 13:20:22 +0400 Subject: MDEV-3798: EXPLAIN UPDATE/DELETE - Run probes like MYSQL_INSERT_SELECT_START or MYSQL_MULTI_DELETE_START for EXPLAIN, too. We should run them, because 1. EXPLAIN SELECT does it, and 2. MySQL also does it. --- sql/sql_parse.cc | 39 +++++++++------------------------------ 1 file changed, 9 insertions(+), 30 deletions(-) (limited to 'sql/sql_parse.cc') diff --git a/sql/sql_parse.cc b/sql/sql_parse.cc index 76c26da5839..808c2cdb421 100644 --- a/sql/sql_parse.cc +++ b/sql/sql_parse.cc @@ -3206,10 +3206,7 @@ end_with_restore_list: if (!(res= open_and_lock_tables(thd, all_tables, TRUE, 0))) { - if (!explain) - { - MYSQL_INSERT_SELECT_START(thd->query()); - } + MYSQL_INSERT_SELECT_START(thd->query()); /* Only the INSERT table should be merged. Other will be handled by select. @@ -3258,10 +3255,7 @@ end_with_restore_list: } /* revert changes for SP */ - if (!explain) - { - MYSQL_INSERT_SELECT_DONE(res, (ulong) thd->get_row_count_func()); - } + MYSQL_INSERT_SELECT_DONE(res, (ulong) thd->get_row_count_func()); select_lex->table_list.first= first_table; } /* @@ -3316,17 +3310,10 @@ end_with_restore_list: if ((res= open_and_lock_tables(thd, all_tables, TRUE, 0))) break; - if (!explain) - { - MYSQL_MULTI_DELETE_START(thd->query()); - } - + MYSQL_MULTI_DELETE_START(thd->query()); if ((res= mysql_multi_delete_prepare(thd))) { - if (!explain) - { - MYSQL_MULTI_DELETE_DONE(1, 0); - } + MYSQL_MULTI_DELETE_DONE(1, 0); goto error; } @@ -3348,15 +3335,12 @@ end_with_restore_list: result, unit, select_lex); res|= thd->is_error(); - if (!explain) - { - MYSQL_MULTI_DELETE_DONE(res, del_result->num_deleted()); - if (res) - result->abort_result_set(); /* for both DELETE and EXPLAIN DELETE */ - } + MYSQL_MULTI_DELETE_DONE(res, del_result->num_deleted()); + if (res) + result->abort_result_set(); /* for both DELETE and EXPLAIN DELETE */ else { - if (!res) + if (explain) { select_result *result= new select_send(); LEX *lex= thd->lex; @@ -3365,8 +3349,6 @@ end_with_restore_list: result->send_eof()) res= 1; } - else - result->abort_result_set(); /* for both DELETE and EXPLAIN DELETE */ } delete result; } @@ -3374,10 +3356,7 @@ end_with_restore_list: else { res= TRUE; // Error - if (!explain) - { - MYSQL_MULTI_DELETE_DONE(1, 0); - } + MYSQL_MULTI_DELETE_DONE(1, 0); } break; } -- cgit v1.2.1