Commit 8346a498 authored by Sergey Petrunya's avatar Sergey Petrunya

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.
parent 062b7bfa
......@@ -2553,16 +2553,16 @@ finish:
/*
Add a comment on the join algorithm employed by the join cache
Save data on the join algorithm employed by the join cache
SYNOPSIS
print_explain_comment()
save_explain_data()
str string to add the comment on the employed join algorithm to
DESCRIPTION
This function adds info on the type of the used join buffer (flat or
This function puts info about the type of the used join buffer (flat or
incremental) and on the type of the the employed join algorithm (BNL,
BNLH, BKA or BKAH) to the the end of the sring str.
BNLH, BKA or BKAH) to the data structure
RETURN VALUE
none
......
......@@ -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;
}
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment