summaryrefslogtreecommitdiff
path: root/sql/sql_update.cc
diff options
context:
space:
mode:
authorSergei Petrunia <psergey@askmonty.org>2014-06-26 18:32:18 +0400
committerSergei Petrunia <psergey@askmonty.org>2014-06-26 18:32:18 +0400
commita787edd7e660a00f015ca0a25ded0952085f7451 (patch)
tree6715da05c41c835f5c451b6e65989197880e9356 /sql/sql_update.cc
parent12d6f89b073351169e070355e8db363d0d649749 (diff)
downloadmariadb-git-a787edd7e660a00f015ca0a25ded0952085f7451.tar.gz
MDEV-6395: Make ANALYZE UPDATE/DELETE handle the degenerate query plans.
Diffstat (limited to 'sql/sql_update.cc')
-rw-r--r--sql/sql_update.cc20
1 files changed, 12 insertions, 8 deletions
diff --git a/sql/sql_update.cc b/sql/sql_update.cc
index b9277adb15a..44d3784becf 100644
--- a/sql/sql_update.cc
+++ b/sql/sql_update.cc
@@ -382,8 +382,8 @@ int mysql_update(THD *thd,
{
limit= 0; // Impossible WHERE
query_plan.set_impossible_where();
- if (thd->lex->describe)
- goto exit_without_my_ok;
+ if (thd->lex->describe || thd->lex->analyze_stmt)
+ goto produce_explain_and_leave;
}
}
@@ -404,8 +404,8 @@ int mysql_update(THD *thd,
free_underlaid_joins(thd, select_lex);
query_plan.set_no_partitions();
- if (thd->lex->describe)
- goto exit_without_my_ok;
+ if (thd->lex->describe || thd->lex->analyze_stmt)
+ goto produce_explain_and_leave;
my_ok(thd); // No matching records
DBUG_RETURN(0);
@@ -420,8 +420,8 @@ int mysql_update(THD *thd,
(select && select->check_quick(thd, safe_update, limit)))
{
query_plan.set_impossible_where();
- if (thd->lex->describe)
- goto exit_without_my_ok;
+ if (thd->lex->describe || thd->lex->analyze_stmt)
+ goto produce_explain_and_leave;
delete select;
free_underlaid_joins(thd, select_lex);
@@ -516,7 +516,7 @@ int mysql_update(THD *thd,
- otherwise, execute the query plan
*/
if (thd->lex->describe)
- goto exit_without_my_ok;
+ goto produce_explain_and_leave;
query_plan.save_explain_data(thd->lex->explain);
DBUG_EXECUTE_IF("show_explain_probe_update_exec_start",
@@ -1029,7 +1029,11 @@ err:
thd->abort_on_warning= 0;
DBUG_RETURN(1);
-exit_without_my_ok:
+produce_explain_and_leave:
+ /*
+ We come here for various "degenerate" query plans: impossible WHERE,
+ no-partitions-used, impossible-range, etc.
+ */
query_plan.save_explain_data(thd->lex->explain);
int err2= thd->lex->explain->send_explain(thd);