Commit 1153d656 authored by Sergey Petrunya's avatar Sergey Petrunya

Merge BUG#952372

parents 357331af 5805908b
...@@ -2639,4 +2639,26 @@ INSERT INTO t1 ...@@ -2639,4 +2639,26 @@ INSERT INTO t1
SELECT * FROM ( SELECT * FROM t1 ) AS alias SELECT * FROM ( SELECT * FROM t1 ) AS alias
WHERE a IN ( SELECT b FROM t2 ); WHERE a IN ( SELECT b FROM t2 );
DROP TABLE t1, t2; DROP TABLE t1, t2;
#
# BUG#952372: Server crashes on 2nd execution of PS in find_field_in_tables with semijoin+materialization
#
CREATE TABLE t1 ( a INT );
INSERT INTO t1 VALUES (2),(3);
CREATE VIEW v1 AS SELECT * FROM t1;
CREATE TABLE t2 ( b VARCHAR(1) );
INSERT INTO t2 VALUES ('v'),('v');
PREPARE pstmt FROM
'SELECT DISTINCT a FROM v1, t2
WHERE b IN ( SELECT MIN(b) FROM t2 )';
EXECUTE pstmt;
a
2
3
EXECUTE pstmt;
a
2
3
DEALLOCATE PREPARE pstmt;
DROP VIEW v1;
DROP TABLE t1, t2;
set optimizer_switch=@subselect_sj_tmp; set optimizer_switch=@subselect_sj_tmp;
...@@ -2653,6 +2653,28 @@ INSERT INTO t1 ...@@ -2653,6 +2653,28 @@ INSERT INTO t1
SELECT * FROM ( SELECT * FROM t1 ) AS alias SELECT * FROM ( SELECT * FROM t1 ) AS alias
WHERE a IN ( SELECT b FROM t2 ); WHERE a IN ( SELECT b FROM t2 );
DROP TABLE t1, t2; DROP TABLE t1, t2;
#
# BUG#952372: Server crashes on 2nd execution of PS in find_field_in_tables with semijoin+materialization
#
CREATE TABLE t1 ( a INT );
INSERT INTO t1 VALUES (2),(3);
CREATE VIEW v1 AS SELECT * FROM t1;
CREATE TABLE t2 ( b VARCHAR(1) );
INSERT INTO t2 VALUES ('v'),('v');
PREPARE pstmt FROM
'SELECT DISTINCT a FROM v1, t2
WHERE b IN ( SELECT MIN(b) FROM t2 )';
EXECUTE pstmt;
a
2
3
EXECUTE pstmt;
a
2
3
DEALLOCATE PREPARE pstmt;
DROP VIEW v1;
DROP TABLE t1, t2;
set optimizer_switch=@subselect_sj_tmp; set optimizer_switch=@subselect_sj_tmp;
# #
# BUG#49129: Wrong result with IN-subquery with join_cache_level=6 and firstmatch=off # BUG#49129: Wrong result with IN-subquery with join_cache_level=6 and firstmatch=off
......
...@@ -2345,5 +2345,26 @@ WHERE a IN ( SELECT b FROM t2 ); ...@@ -2345,5 +2345,26 @@ WHERE a IN ( SELECT b FROM t2 );
DROP TABLE t1, t2; DROP TABLE t1, t2;
--echo #
--echo # BUG#952372: Server crashes on 2nd execution of PS in find_field_in_tables with semijoin+materialization
--echo #
CREATE TABLE t1 ( a INT );
INSERT INTO t1 VALUES (2),(3);
CREATE VIEW v1 AS SELECT * FROM t1;
CREATE TABLE t2 ( b VARCHAR(1) );
INSERT INTO t2 VALUES ('v'),('v');
PREPARE pstmt FROM
'SELECT DISTINCT a FROM v1, t2
WHERE b IN ( SELECT MIN(b) FROM t2 )';
EXECUTE pstmt;
EXECUTE pstmt;
DEALLOCATE PREPARE pstmt;
DROP VIEW v1;
DROP TABLE t1, t2;
# The following command must be the last one the file # The following command must be the last one the file
set optimizer_switch=@subselect_sj_tmp; set optimizer_switch=@subselect_sj_tmp;
...@@ -1250,7 +1250,10 @@ static bool convert_subq_to_sj(JOIN *parent_join, Item_in_subselect *subq_pred) ...@@ -1250,7 +1250,10 @@ static bool convert_subq_to_sj(JOIN *parent_join, Item_in_subselect *subq_pred)
(a theory: a next_local chain always starts with ::leaf_tables (a theory: a next_local chain always starts with ::leaf_tables
because view's tables are inserted after the view) because view's tables are inserted after the view)
*/ */
for (tl= parent_lex->leaf_tables.head(); tl->next_local; tl= tl->next_local) ;
for (tl= (TABLE_LIST*)(parent_lex->table_list.first); tl->next_local; tl= tl->next_local)
{}
tl->next_local= subq_lex->leaf_tables.head(); tl->next_local= subq_lex->leaf_tables.head();
/* A theory: no need to re-connect the next_global chain */ /* A theory: no need to re-connect the next_global chain */
...@@ -1463,7 +1466,7 @@ static bool convert_subq_to_jtbm(JOIN *parent_join, ...@@ -1463,7 +1466,7 @@ static bool convert_subq_to_jtbm(JOIN *parent_join,
(a theory: a next_local chain always starts with ::leaf_tables (a theory: a next_local chain always starts with ::leaf_tables
because view's tables are inserted after the view) because view's tables are inserted after the view)
*/ */
for (tl= parent_lex->leaf_tables.head(); tl->next_local; tl= tl->next_local) for (tl= (TABLE_LIST*)(parent_lex->table_list.first); tl->next_local; tl= tl->next_local)
{} {}
tl->next_local= jtbm; tl->next_local= jtbm;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment