1
0
mirror of https://github.com/MariaDB/server.git synced 2025-12-24 11:21:21 +03:00

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.
This commit is contained in:
Sergey Petrunya
2013-10-07 13:20:22 +04:00
parent 062b7bfa39
commit 8346a498ea
2 changed files with 13 additions and 34 deletions

View File

@@ -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;
}