Details
-
Bug
-
Status: Closed (View Workflow)
-
Major
-
Resolution: Fixed
-
10.1(EOL)
Description
MariaDB [test]> create table t1 (i int);
|
Query OK, 0 rows affected (1.53 sec)
|
|
MariaDB [test]> insert into t1 values (1),(2);
|
Query OK, 2 rows affected (0.10 sec)
|
Records: 2 Duplicates: 0 Warnings: 0
|
|
MariaDB [test]> 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 |
|
+------+-------------+-------+------+---------------+------+---------+------+------+--------+----------+------------+-------------------+
|
1 row in set (0.00 sec)
|
|
MariaDB [test]> select * from t1;
|
+------+
|
| i |
|
+------+
|
| 1 |
|
| 2 |
|
+------+
|
2 rows in set (0.00 sec)
|
Test case |
create table t1 (i int); |
insert into t1 values (1),(2); |
analyze delete from t1; |
select * from t1; |
|
drop table t1; |
After investigating this issue, I am in a bit of a predicament.
First, according to our documentation, analyze delete and update should perform the updates or deletes. It is my understanding that this is a technical limitation as we sometimes need to actually perform the operation, in order for us to report all the statistics produced by analyze statement.
However, after examining the code, we have all sorts of interesting inconsistencies, where we actually prefer to not execute anything. I am for not executing the query plan, but it is not consistent with the documentation.
/*
Ok, we have generated a query plan for the DELETE.
- if we're running EXPLAIN DELETE, goto produce explain output
- otherwise, execute the query plan
*/
if (thd->lex->describe)
goto produce_explain_and_leave;
This part lacks any handling for the analyze_stmt flag. I think this is an oversight, yet here we specifically prefer to not execute the query plan.
Nonetheless, I have produced a patch that fixes the behavior so that we do perform the delete.