forked from MariaDB/server
-
Notifications
You must be signed in to change notification settings - Fork 5
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
MDEV-26249: Crash in Explain_node::print_explain_for_children with sl…
…ow 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.
- Loading branch information
Showing
3 changed files
with
48 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,20 @@ | ||
# | ||
# MDEV-26249: Crash in in Explain_node::print_explain_for_children while writing to the slow query log | ||
# | ||
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; | ||
id | ||
select 1; | ||
1 | ||
1 | ||
explain | ||
SELECT * FROM (SELECT id FROM t1 GROUP BY id) dt WHERE 1=0; | ||
id select_type table type possible_keys key key_len ref rows Extra | ||
1 PRIMARY NULL NULL NULL NULL NULL NULL NULL Impossible WHERE | ||
2 DERIVED t1 index NULL id 53 NULL 1 Using index | ||
SET GLOBAL slow_query_log = @sql_tmp; | ||
drop table t1; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters