mirror of
https://github.com/MariaDB/server.git
synced 2025-07-29 05:21:33 +03:00
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.
This commit is contained in:
20
mysql-test/main/explain_innodb.test
Normal file
20
mysql-test/main/explain_innodb.test
Normal file
@ -0,0 +1,20 @@
|
||||
--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;
|
Reference in New Issue
Block a user