diff options
author | Sergey Petrunya <psergey@askmonty.org> | 2012-03-18 23:58:20 +0400 |
---|---|---|
committer | Sergey Petrunya <psergey@askmonty.org> | 2012-03-18 23:58:20 +0400 |
commit | 5805908bf98b1de5c1fefed4778dcc22bb70c6fd (patch) | |
tree | e6577a31554ddf030ccfee7a4195cd2ab941236c /mysql-test/r/subselect_sj_jcl6.result | |
parent | 223483aedf0c53bc66cb6833210228b46448003a (diff) | |
download | mariadb-git-5805908bf98b1de5c1fefed4778dcc22bb70c6fd.tar.gz |
BUG#952372: Server crashes on 2nd execution of PS in find_field_in_tables with semijoin+materialization
- The problem was that convert_subq_to_jtbm() attached the semi-join
TABLE_LIST object into the wrong list: they used to attach it to the
end of parent_lex->leaf_tables.head()->next_local->...->next_local.
This was apparently inccorect, as one can construct an example where
JTBM nest is attached to a table that is inside some mergeable VIEW, which
breaks (causes crash) for name resolution on the subsequent statement
re-execution.
- Solution: Attach to the "right" list. The "wording" was copied from
st_select_lex::handle_derived.
Diffstat (limited to 'mysql-test/r/subselect_sj_jcl6.result')
-rw-r--r-- | mysql-test/r/subselect_sj_jcl6.result | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/mysql-test/r/subselect_sj_jcl6.result b/mysql-test/r/subselect_sj_jcl6.result index baa2aec8aea..e9ae4508dd8 100644 --- a/mysql-test/r/subselect_sj_jcl6.result +++ b/mysql-test/r/subselect_sj_jcl6.result @@ -2642,6 +2642,28 @@ id select_type table type possible_keys key key_len ref rows Extra 1 PRIMARY t3 ALL NULL NULL NULL NULL 100 Using where; Using join buffer (flat, BNL join) drop table t0,t1,t3; set optimizer_switch= @tmp_923246; +# +# 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; # # BUG#49129: Wrong result with IN-subquery with join_cache_level=6 and firstmatch=off |