summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVicențiu Ciorbaru <cvicentiu@gmail.com>2015-05-18 01:35:47 +0000
committerVicențiu Ciorbaru <cvicentiu@gmail.com>2015-05-18 15:30:37 +0000
commit9cc8bd0d84f88968e82f4492f5a7dc3f71dfd03e (patch)
tree86671a5403e1a456dd7f9513b20d856307864207
parent476dfb16034f1af4c99e683fd612eec16ab1661a (diff)
downloadmariadb-git-bb-10.1-mdev-8063.tar.gz
MDEV-8063: Unconditional ANALYZE DELETE does not delete rowsbb-10.1-mdev-8063
When detecting a statement that can make use of ha_delete_all_rows(), we refrained from running the statement when being presented with the analyze or explain prefix.
-rw-r--r--mysql-test/r/analyze_stmt.result19
-rw-r--r--mysql-test/t/analyze_stmt.test15
-rw-r--r--sql/sql_delete.cc6
3 files changed, 36 insertions, 4 deletions
diff --git a/mysql-test/r/analyze_stmt.result b/mysql-test/r/analyze_stmt.result
index 50063324faf..c3c98593210 100644
--- a/mysql-test/r/analyze_stmt.result
+++ b/mysql-test/r/analyze_stmt.result
@@ -315,3 +315,22 @@ id select_type table type possible_keys key key_len ref rows r_rows filtered r_f
1 SIMPLE t1 ALL NULL NULL NULL NULL 10 10.00 100.00 100.00 Using where
1 SIMPLE t2 ref a a 5 test.t1.a 2 0.20 100.00 100.00 Using index
drop table t1,t2;
+#
+# MDEV-8063: Unconditional ANALYZE DELETE does not delete rows
+#
+create table t1 (i int);
+insert into t1 values (1),(2);
+analyze delete from t1;
+id select_type table type possible_keys key key_len ref rows r_rows filtered r_filtered Extra
+1 SIMPLE NULL NULL NULL NULL NULL NULL 2 NULL NULL NULL Deleting all rows
+select * from t1;
+i
+insert into t1 values (1),(2);
+explain delete from t1;
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE NULL NULL NULL NULL NULL NULL 2 Deleting all rows
+select * from t1;
+i
+1
+2
+drop table t1;
diff --git a/mysql-test/t/analyze_stmt.test b/mysql-test/t/analyze_stmt.test
index 0355b4e4e0f..d02139fe0c8 100644
--- a/mysql-test/t/analyze_stmt.test
+++ b/mysql-test/t/analyze_stmt.test
@@ -258,3 +258,18 @@ insert into t2 values (0),(1);
analyze select * from t1 straight_join t2 force index(a) where t2.a=t1.a;
drop table t1,t2;
+
+--echo #
+--echo # MDEV-8063: Unconditional ANALYZE DELETE does not delete rows
+--echo #
+
+create table t1 (i int);
+insert into t1 values (1),(2);
+analyze delete from t1;
+select * from t1;
+
+insert into t1 values (1),(2);
+explain delete from t1;
+select * from t1;
+
+drop table t1;
diff --git a/sql/sql_delete.cc b/sql/sql_delete.cc
index 213013b889c..d7c5d94c2cb 100644
--- a/sql/sql_delete.cc
+++ b/sql/sql_delete.cc
@@ -347,7 +347,7 @@ bool mysql_delete(THD *thd, TABLE_LIST *table_list, COND *conds,
DBUG_PRINT("debug", ("Trying to use delete_all_rows()"));
query_plan.set_delete_all_rows(maybe_deleted);
- if (thd->lex->describe || thd->lex->analyze_stmt)
+ if (thd->lex->describe)
goto produce_explain_and_leave;
if (!(error=table->file->ha_delete_all_rows()))
@@ -359,6 +359,7 @@ bool mysql_delete(THD *thd, TABLE_LIST *table_list, COND *conds,
query_type= THD::STMT_QUERY_TYPE;
error= -1;
deleted= maybe_deleted;
+ query_plan.save_explain_delete_data(thd->mem_root, thd);
goto cleanup;
}
if (error != HA_ERR_WRONG_COMMAND)
@@ -699,10 +700,7 @@ cleanup:
(thd->lex->ignore && !thd->is_error() && !thd->is_fatal_error))
{
if (thd->lex->analyze_stmt)
- {
- error= 0;
goto send_nothing_and_leave;
- }
if (with_select)
result->send_eof();