mariadb/mysql-test/main/explain_innodb.test
Sergei Petrunia 7922fbf7b7 MDEV-26249: Crash in Explain_node::print_explain_for_children with slow query log
The problem affected queries in form:

  SELECT FROM (SELECT where Split Materialized is applicable) WHERE 1=0

The problem was caused by this:
- The select in derived table uses two-phase optimization (due to a
  possible Split Materialized).
- The primary select has "Impossible where" and so it short-cuts its
  optimization.
- The optimization for the SELECT in the derived table is never finished,
  and EXPLAIN data structure has a dangling pointer to select #2.

Fixed with this: make JOIN::optimize_stage2() invoke optimization of
derived tables when it is handing a degenerate JOIN with zero tables.
We will not execute the derived tables but we need their query plans
for [SHOW]EXPLAIN.
2022-01-19 23:58:59 +03:00

20 lines
546 B
Text

--echo #
--echo # MDEV-26249: Crash in in Explain_node::print_explain_for_children while writing to the slow query log
--echo #
--source include/have_innodb.inc
set @sql_tmp=@@slow_query_log;
SET GLOBAL slow_query_log = 1;
SET long_query_time = 0.000000;
SET log_slow_verbosity = 'explain';
CREATE TABLE t1 ( id varchar(50), KEY (id)) engine=innodb;
SELECT * FROM (SELECT id FROM t1 GROUP BY id) dt WHERE 1=0;
select 1;
explain
SELECT * FROM (SELECT id FROM t1 GROUP BY id) dt WHERE 1=0;
SET GLOBAL slow_query_log = @sql_tmp;
drop table t1;