mirror of
https://github.com/MariaDB/server.git
synced 2025-08-09 22:24:09 +03:00
MDEV-10729: Server crashes in st_select_lex::set_explain_type
Make the new (CTE-related) code in set_explain_type to take into account that some JOIN_TABs are non-merged semi-joins, and do not have a TABLE object.
This commit is contained in:
@@ -880,3 +880,18 @@ id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY t2 ALL NULL NULL NULL NULL 3
|
||||
1 PRIMARY t3 ALL NULL NULL NULL NULL 3 Using where; Using join buffer (flat, BNL join)
|
||||
DROP TABLE t1,t2,t3;
|
||||
#
|
||||
# MDEV-10729: Server crashes in st_select_lex::set_explain_type
|
||||
#
|
||||
CREATE TABLE t1 (i1 INT, KEY(i1)) ENGINE=MyISAM;
|
||||
INSERT INTO t1 VALUES (4),(8);
|
||||
CREATE TABLE t2 (a2 INT, b2 INT, KEY(b2)) ENGINE=MyISAM;
|
||||
INSERT INTO t2 VALUES (8,7);
|
||||
CREATE TABLE t3 (i3 INT) ENGINE=MyISAM;
|
||||
INSERT INTO t3 VALUES (2),(6);
|
||||
SELECT * FROM t1, t2 WHERE a2 = i1 and b2 >= i1 AND i1 IN ( SELECT i3 FROM t3 )
|
||||
UNION
|
||||
SELECT * FROM t1, t2 WHERE a2 = i1 and b2 >= i1 AND i1 IN ( SELECT i3 FROM t3 )
|
||||
;
|
||||
i1 a2 b2
|
||||
DROP TABLE t1,t2,t3;
|
||||
|
@@ -558,3 +558,21 @@ INSERT INTO t3 VALUES (1),(2),(3);
|
||||
EXPLAIN SELECT * FROM (WITH a AS (SELECT * FROM t1) (t2 NATURAL JOIN t3));
|
||||
explain SELECT * FROM (WITH a AS (SELECT * FROM t1) SELECT * FROM t2 NATURAL JOIN t3) AS d1;
|
||||
DROP TABLE t1,t2,t3;
|
||||
|
||||
--echo #
|
||||
--echo # MDEV-10729: Server crashes in st_select_lex::set_explain_type
|
||||
--echo #
|
||||
CREATE TABLE t1 (i1 INT, KEY(i1)) ENGINE=MyISAM;
|
||||
INSERT INTO t1 VALUES (4),(8);
|
||||
|
||||
CREATE TABLE t2 (a2 INT, b2 INT, KEY(b2)) ENGINE=MyISAM;
|
||||
INSERT INTO t2 VALUES (8,7);
|
||||
|
||||
CREATE TABLE t3 (i3 INT) ENGINE=MyISAM;
|
||||
INSERT INTO t3 VALUES (2),(6);
|
||||
|
||||
SELECT * FROM t1, t2 WHERE a2 = i1 and b2 >= i1 AND i1 IN ( SELECT i3 FROM t3 )
|
||||
UNION
|
||||
SELECT * FROM t1, t2 WHERE a2 = i1 and b2 >= i1 AND i1 IN ( SELECT i3 FROM t3 )
|
||||
;
|
||||
DROP TABLE t1,t2,t3;
|
||||
|
@@ -4370,7 +4370,7 @@ void st_select_lex::set_explain_type(bool on_the_fly)
|
||||
for (JOIN_TAB *tab= first_explain_order_tab(join); tab;
|
||||
tab= next_explain_order_tab(join, tab))
|
||||
{
|
||||
if (tab->table->pos_in_table_list->with)
|
||||
if (tab->table && tab->table->pos_in_table_list->with)
|
||||
{
|
||||
uses_cte= true;
|
||||
break;
|
||||
|
Reference in New Issue
Block a user