From: Roy Lyseng Date: January 12 2011 3:39pm Subject: bzr commit into mysql-trunk branch (roy.lyseng:3322) Bug#58561 List-Archive: http://lists.mysql.com/commits/128531 X-Bug: 58561 Message-Id: <20110112153912.2C95B1F2@tyr67.norway.sun.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="===============4015085212118270867==" --===============4015085212118270867== MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Content-Disposition: inline #At file:///home/rl136806/mysql/repo/mysql-review/ based on revid:olav.sandstaa@stripped 3322 Roy Lyseng 2011-01-12 Bug#58561: Server Crash with correlated subquery and MyISAM tables when semijoin=on The problem here is that the variable 'sargables' contains invalid data after call to update_ref_and_keys(), causing a segmentation fault. Further inspection showed that the number of conditions was calculated erroneously, and it was also noticed that it was because thd->lex->current_select was not equal to select_lex passed as argument. The culprit was found to be subselect_single_select_engine::exec() that did not restore the value of 'current_select' after an engine was changed. Problem is fixed by restoring current_select properly. We also clean up the code slightly by replacing thd->lex->current_select in update_ref_and_keys() with the passed select_lex argument. mysql-test/include/subquery.inc Added test case for bug#58561. mysql-test/r/subquery_all.result mysql-test/r/subquery_all_jcl6.result mysql-test/r/subquery_nomat_nosj.result mysql-test/r/subquery_nomat_nosj_jcl6.result mysql-test/r/subquery_none.result mysql-test/r/subquery_none_jcl6.result Added test results for bug#58561. sql/item_subselect.cc In subselect_single_select_engine::exec(), restored saved 'current_select' when an engine is changed. sql/sql_select.cc In update_ref_and_keys(), replaced reference to thd->lex->current_select with the select_lex passed as argument. This is a code cleanup fix. modified: mysql-test/include/subquery.inc mysql-test/r/subquery_all.result mysql-test/r/subquery_all_jcl6.result mysql-test/r/subquery_nomat_nosj.result mysql-test/r/subquery_nomat_nosj_jcl6.result mysql-test/r/subquery_none.result mysql-test/r/subquery_none_jcl6.result sql/item_subselect.cc sql/sql_select.cc === modified file 'mysql-test/include/subquery.inc' --- a/mysql-test/include/subquery.inc 2010-11-23 15:18:44 +0000 +++ b/mysql-test/include/subquery.inc 2011-01-12 15:38:39 +0000 @@ -5067,6 +5067,65 @@ EXPLAIN SELECT * FROM t1 WHERE EXISTS (S --echo DROP TABLE t1; +--echo # +--echo # BUG#58561: Server Crash with correlated subquery and MyISAM tables +--echo # + +CREATE TABLE cc ( + pk INT, + col_int_key INT, + col_varchar_key VARCHAR(1), + PRIMARY KEY (pk), + KEY col_int_key (col_int_key), + KEY col_varchar_key (col_varchar_key,col_int_key) +) ENGINE=MyISAM; +INSERT INTO cc VALUES (10,7,'v'); +INSERT INTO cc VALUES (11,1,'r'); + +CREATE TABLE bb ( + pk INT, + col_date_key DATE, + PRIMARY KEY (pk), + KEY col_date_key (col_date_key) +) ENGINE=MyISAM; +INSERT INTO bb VALUES (10,'2002-02-21'); + +CREATE TABLE c ( + pk INT, + col_int_key INT, + col_varchar_key VARCHAR(1), + PRIMARY KEY (pk), + KEY col_int_key (col_int_key), + KEY col_varchar_key (col_varchar_key,col_int_key) +) ENGINE=MyISAM; +INSERT INTO c VALUES (1,NULL,'w'); +INSERT INTO c VALUES (19,NULL,'f'); + +CREATE TABLE b ( + pk INT, + col_int_key INT, + col_varchar_key VARCHAR(1), + PRIMARY KEY (pk), + KEY col_int_key (col_int_key), + KEY col_varchar_key (col_varchar_key,col_int_key) +) ENGINE=MyISAM; +INSERT INTO b VALUES (1,7,'f'); + +SELECT col_int_key +FROM b granparent1 +WHERE (col_int_key, col_int_key) IN ( + SELECT parent1.pk, parent1.pk + FROM bb parent1 JOIN cc parent2 + ON parent2.col_varchar_key = parent2.col_varchar_key + WHERE granparent1.col_varchar_key IN ( + SELECT col_varchar_key + FROM c) + AND parent1.pk = granparent1.col_int_key + ORDER BY parent1.col_date_key +); + +DROP TABLE bb, b, cc, c; + --echo End of 5.6 tests --echo # === modified file 'mysql-test/r/subquery_all.result' --- a/mysql-test/r/subquery_all.result 2010-12-16 17:38:26 +0000 +++ b/mysql-test/r/subquery_all.result 2011-01-12 15:38:39 +0000 @@ -6214,6 +6214,59 @@ id select_type table type possible_keys 2 SUBQUERY t1 ref a a 5 const 1 Using index DROP TABLE t1; +# +# BUG#58561: Server Crash with correlated subquery and MyISAM tables +# +CREATE TABLE cc ( +pk INT, +col_int_key INT, +col_varchar_key VARCHAR(1), +PRIMARY KEY (pk), +KEY col_int_key (col_int_key), +KEY col_varchar_key (col_varchar_key,col_int_key) +) ENGINE=MyISAM; +INSERT INTO cc VALUES (10,7,'v'); +INSERT INTO cc VALUES (11,1,'r'); +CREATE TABLE bb ( +pk INT, +col_date_key DATE, +PRIMARY KEY (pk), +KEY col_date_key (col_date_key) +) ENGINE=MyISAM; +INSERT INTO bb VALUES (10,'2002-02-21'); +CREATE TABLE c ( +pk INT, +col_int_key INT, +col_varchar_key VARCHAR(1), +PRIMARY KEY (pk), +KEY col_int_key (col_int_key), +KEY col_varchar_key (col_varchar_key,col_int_key) +) ENGINE=MyISAM; +INSERT INTO c VALUES (1,NULL,'w'); +INSERT INTO c VALUES (19,NULL,'f'); +CREATE TABLE b ( +pk INT, +col_int_key INT, +col_varchar_key VARCHAR(1), +PRIMARY KEY (pk), +KEY col_int_key (col_int_key), +KEY col_varchar_key (col_varchar_key,col_int_key) +) ENGINE=MyISAM; +INSERT INTO b VALUES (1,7,'f'); +SELECT col_int_key +FROM b granparent1 +WHERE (col_int_key, col_int_key) IN ( +SELECT parent1.pk, parent1.pk +FROM bb parent1 JOIN cc parent2 +ON parent2.col_varchar_key = parent2.col_varchar_key +WHERE granparent1.col_varchar_key IN ( +SELECT col_varchar_key +FROM c) +AND parent1.pk = granparent1.col_int_key +ORDER BY parent1.col_date_key +); +col_int_key +DROP TABLE bb, b, cc, c; End of 5.6 tests # # BUG#46743 "Azalea processing correlated, aggregate SELECT === modified file 'mysql-test/r/subquery_all_jcl6.result' --- a/mysql-test/r/subquery_all_jcl6.result 2010-11-30 13:55:22 +0000 +++ b/mysql-test/r/subquery_all_jcl6.result 2011-01-12 15:38:39 +0000 @@ -6218,6 +6218,59 @@ id select_type table type possible_keys 2 SUBQUERY t1 ref a a 5 const 1 Using index DROP TABLE t1; +# +# BUG#58561: Server Crash with correlated subquery and MyISAM tables +# +CREATE TABLE cc ( +pk INT, +col_int_key INT, +col_varchar_key VARCHAR(1), +PRIMARY KEY (pk), +KEY col_int_key (col_int_key), +KEY col_varchar_key (col_varchar_key,col_int_key) +) ENGINE=MyISAM; +INSERT INTO cc VALUES (10,7,'v'); +INSERT INTO cc VALUES (11,1,'r'); +CREATE TABLE bb ( +pk INT, +col_date_key DATE, +PRIMARY KEY (pk), +KEY col_date_key (col_date_key) +) ENGINE=MyISAM; +INSERT INTO bb VALUES (10,'2002-02-21'); +CREATE TABLE c ( +pk INT, +col_int_key INT, +col_varchar_key VARCHAR(1), +PRIMARY KEY (pk), +KEY col_int_key (col_int_key), +KEY col_varchar_key (col_varchar_key,col_int_key) +) ENGINE=MyISAM; +INSERT INTO c VALUES (1,NULL,'w'); +INSERT INTO c VALUES (19,NULL,'f'); +CREATE TABLE b ( +pk INT, +col_int_key INT, +col_varchar_key VARCHAR(1), +PRIMARY KEY (pk), +KEY col_int_key (col_int_key), +KEY col_varchar_key (col_varchar_key,col_int_key) +) ENGINE=MyISAM; +INSERT INTO b VALUES (1,7,'f'); +SELECT col_int_key +FROM b granparent1 +WHERE (col_int_key, col_int_key) IN ( +SELECT parent1.pk, parent1.pk +FROM bb parent1 JOIN cc parent2 +ON parent2.col_varchar_key = parent2.col_varchar_key +WHERE granparent1.col_varchar_key IN ( +SELECT col_varchar_key +FROM c) +AND parent1.pk = granparent1.col_int_key +ORDER BY parent1.col_date_key +); +col_int_key +DROP TABLE bb, b, cc, c; End of 5.6 tests # # BUG#46743 "Azalea processing correlated, aggregate SELECT === modified file 'mysql-test/r/subquery_nomat_nosj.result' --- a/mysql-test/r/subquery_nomat_nosj.result 2010-11-30 13:55:22 +0000 +++ b/mysql-test/r/subquery_nomat_nosj.result 2011-01-12 15:38:39 +0000 @@ -6214,6 +6214,59 @@ id select_type table type possible_keys 2 SUBQUERY t1 ref a a 5 const 1 Using index DROP TABLE t1; +# +# BUG#58561: Server Crash with correlated subquery and MyISAM tables +# +CREATE TABLE cc ( +pk INT, +col_int_key INT, +col_varchar_key VARCHAR(1), +PRIMARY KEY (pk), +KEY col_int_key (col_int_key), +KEY col_varchar_key (col_varchar_key,col_int_key) +) ENGINE=MyISAM; +INSERT INTO cc VALUES (10,7,'v'); +INSERT INTO cc VALUES (11,1,'r'); +CREATE TABLE bb ( +pk INT, +col_date_key DATE, +PRIMARY KEY (pk), +KEY col_date_key (col_date_key) +) ENGINE=MyISAM; +INSERT INTO bb VALUES (10,'2002-02-21'); +CREATE TABLE c ( +pk INT, +col_int_key INT, +col_varchar_key VARCHAR(1), +PRIMARY KEY (pk), +KEY col_int_key (col_int_key), +KEY col_varchar_key (col_varchar_key,col_int_key) +) ENGINE=MyISAM; +INSERT INTO c VALUES (1,NULL,'w'); +INSERT INTO c VALUES (19,NULL,'f'); +CREATE TABLE b ( +pk INT, +col_int_key INT, +col_varchar_key VARCHAR(1), +PRIMARY KEY (pk), +KEY col_int_key (col_int_key), +KEY col_varchar_key (col_varchar_key,col_int_key) +) ENGINE=MyISAM; +INSERT INTO b VALUES (1,7,'f'); +SELECT col_int_key +FROM b granparent1 +WHERE (col_int_key, col_int_key) IN ( +SELECT parent1.pk, parent1.pk +FROM bb parent1 JOIN cc parent2 +ON parent2.col_varchar_key = parent2.col_varchar_key +WHERE granparent1.col_varchar_key IN ( +SELECT col_varchar_key +FROM c) +AND parent1.pk = granparent1.col_int_key +ORDER BY parent1.col_date_key +); +col_int_key +DROP TABLE bb, b, cc, c; End of 5.6 tests # # BUG#46743 "Azalea processing correlated, aggregate SELECT === modified file 'mysql-test/r/subquery_nomat_nosj_jcl6.result' --- a/mysql-test/r/subquery_nomat_nosj_jcl6.result 2010-11-30 13:55:22 +0000 +++ b/mysql-test/r/subquery_nomat_nosj_jcl6.result 2011-01-12 15:38:39 +0000 @@ -6218,6 +6218,59 @@ id select_type table type possible_keys 2 SUBQUERY t1 ref a a 5 const 1 Using index DROP TABLE t1; +# +# BUG#58561: Server Crash with correlated subquery and MyISAM tables +# +CREATE TABLE cc ( +pk INT, +col_int_key INT, +col_varchar_key VARCHAR(1), +PRIMARY KEY (pk), +KEY col_int_key (col_int_key), +KEY col_varchar_key (col_varchar_key,col_int_key) +) ENGINE=MyISAM; +INSERT INTO cc VALUES (10,7,'v'); +INSERT INTO cc VALUES (11,1,'r'); +CREATE TABLE bb ( +pk INT, +col_date_key DATE, +PRIMARY KEY (pk), +KEY col_date_key (col_date_key) +) ENGINE=MyISAM; +INSERT INTO bb VALUES (10,'2002-02-21'); +CREATE TABLE c ( +pk INT, +col_int_key INT, +col_varchar_key VARCHAR(1), +PRIMARY KEY (pk), +KEY col_int_key (col_int_key), +KEY col_varchar_key (col_varchar_key,col_int_key) +) ENGINE=MyISAM; +INSERT INTO c VALUES (1,NULL,'w'); +INSERT INTO c VALUES (19,NULL,'f'); +CREATE TABLE b ( +pk INT, +col_int_key INT, +col_varchar_key VARCHAR(1), +PRIMARY KEY (pk), +KEY col_int_key (col_int_key), +KEY col_varchar_key (col_varchar_key,col_int_key) +) ENGINE=MyISAM; +INSERT INTO b VALUES (1,7,'f'); +SELECT col_int_key +FROM b granparent1 +WHERE (col_int_key, col_int_key) IN ( +SELECT parent1.pk, parent1.pk +FROM bb parent1 JOIN cc parent2 +ON parent2.col_varchar_key = parent2.col_varchar_key +WHERE granparent1.col_varchar_key IN ( +SELECT col_varchar_key +FROM c) +AND parent1.pk = granparent1.col_int_key +ORDER BY parent1.col_date_key +); +col_int_key +DROP TABLE bb, b, cc, c; End of 5.6 tests # # BUG#46743 "Azalea processing correlated, aggregate SELECT === modified file 'mysql-test/r/subquery_none.result' --- a/mysql-test/r/subquery_none.result 2010-11-29 13:30:18 +0000 +++ b/mysql-test/r/subquery_none.result 2011-01-12 15:38:39 +0000 @@ -6213,6 +6213,59 @@ id select_type table type possible_keys 2 SUBQUERY t1 ref a a 5 const 1 Using index DROP TABLE t1; +# +# BUG#58561: Server Crash with correlated subquery and MyISAM tables +# +CREATE TABLE cc ( +pk INT, +col_int_key INT, +col_varchar_key VARCHAR(1), +PRIMARY KEY (pk), +KEY col_int_key (col_int_key), +KEY col_varchar_key (col_varchar_key,col_int_key) +) ENGINE=MyISAM; +INSERT INTO cc VALUES (10,7,'v'); +INSERT INTO cc VALUES (11,1,'r'); +CREATE TABLE bb ( +pk INT, +col_date_key DATE, +PRIMARY KEY (pk), +KEY col_date_key (col_date_key) +) ENGINE=MyISAM; +INSERT INTO bb VALUES (10,'2002-02-21'); +CREATE TABLE c ( +pk INT, +col_int_key INT, +col_varchar_key VARCHAR(1), +PRIMARY KEY (pk), +KEY col_int_key (col_int_key), +KEY col_varchar_key (col_varchar_key,col_int_key) +) ENGINE=MyISAM; +INSERT INTO c VALUES (1,NULL,'w'); +INSERT INTO c VALUES (19,NULL,'f'); +CREATE TABLE b ( +pk INT, +col_int_key INT, +col_varchar_key VARCHAR(1), +PRIMARY KEY (pk), +KEY col_int_key (col_int_key), +KEY col_varchar_key (col_varchar_key,col_int_key) +) ENGINE=MyISAM; +INSERT INTO b VALUES (1,7,'f'); +SELECT col_int_key +FROM b granparent1 +WHERE (col_int_key, col_int_key) IN ( +SELECT parent1.pk, parent1.pk +FROM bb parent1 JOIN cc parent2 +ON parent2.col_varchar_key = parent2.col_varchar_key +WHERE granparent1.col_varchar_key IN ( +SELECT col_varchar_key +FROM c) +AND parent1.pk = granparent1.col_int_key +ORDER BY parent1.col_date_key +); +col_int_key +DROP TABLE bb, b, cc, c; End of 5.6 tests # # BUG#46743 "Azalea processing correlated, aggregate SELECT === modified file 'mysql-test/r/subquery_none_jcl6.result' --- a/mysql-test/r/subquery_none_jcl6.result 2010-11-29 13:04:34 +0000 +++ b/mysql-test/r/subquery_none_jcl6.result 2011-01-12 15:38:39 +0000 @@ -6217,6 +6217,59 @@ id select_type table type possible_keys 2 SUBQUERY t1 ref a a 5 const 1 Using index DROP TABLE t1; +# +# BUG#58561: Server Crash with correlated subquery and MyISAM tables +# +CREATE TABLE cc ( +pk INT, +col_int_key INT, +col_varchar_key VARCHAR(1), +PRIMARY KEY (pk), +KEY col_int_key (col_int_key), +KEY col_varchar_key (col_varchar_key,col_int_key) +) ENGINE=MyISAM; +INSERT INTO cc VALUES (10,7,'v'); +INSERT INTO cc VALUES (11,1,'r'); +CREATE TABLE bb ( +pk INT, +col_date_key DATE, +PRIMARY KEY (pk), +KEY col_date_key (col_date_key) +) ENGINE=MyISAM; +INSERT INTO bb VALUES (10,'2002-02-21'); +CREATE TABLE c ( +pk INT, +col_int_key INT, +col_varchar_key VARCHAR(1), +PRIMARY KEY (pk), +KEY col_int_key (col_int_key), +KEY col_varchar_key (col_varchar_key,col_int_key) +) ENGINE=MyISAM; +INSERT INTO c VALUES (1,NULL,'w'); +INSERT INTO c VALUES (19,NULL,'f'); +CREATE TABLE b ( +pk INT, +col_int_key INT, +col_varchar_key VARCHAR(1), +PRIMARY KEY (pk), +KEY col_int_key (col_int_key), +KEY col_varchar_key (col_varchar_key,col_int_key) +) ENGINE=MyISAM; +INSERT INTO b VALUES (1,7,'f'); +SELECT col_int_key +FROM b granparent1 +WHERE (col_int_key, col_int_key) IN ( +SELECT parent1.pk, parent1.pk +FROM bb parent1 JOIN cc parent2 +ON parent2.col_varchar_key = parent2.col_varchar_key +WHERE granparent1.col_varchar_key IN ( +SELECT col_varchar_key +FROM c) +AND parent1.pk = granparent1.col_int_key +ORDER BY parent1.col_date_key +); +col_int_key +DROP TABLE bb, b, cc, c; End of 5.6 tests # # BUG#46743 "Azalea processing correlated, aggregate SELECT === modified file 'sql/item_subselect.cc' --- a/sql/item_subselect.cc 2010-12-29 00:38:59 +0000 +++ b/sql/item_subselect.cc 2011-01-12 15:38:39 +0000 @@ -2322,6 +2322,7 @@ int subselect_single_select_engine::exec DBUG_RETURN(1); /* purecov: inspected */ if (item->engine_changed) { + thd->lex->current_select= save_select; DBUG_RETURN(1); } } === modified file 'sql/sql_select.cc' --- a/sql/sql_select.cc 2010-12-29 00:38:59 +0000 +++ b/sql/sql_select.cc 2011-01-12 15:38:39 +0000 @@ -6166,8 +6166,8 @@ update_ref_and_keys(THD *thd, DYNAMIC_AR substitutions. */ sz= max(sizeof(KEY_FIELD),sizeof(SARGABLE_PARAM))* - (((thd->lex->current_select->cond_count+1)*2 + - thd->lex->current_select->between_count)*m+1); + (((select_lex->cond_count+1)*2 + + select_lex->between_count)*m+1); if (!(key_fields=(KEY_FIELD*) thd->alloc(sz))) return TRUE; /* purecov: inspected */ and_level= 0; --===============4015085212118270867== MIME-Version: 1.0 Content-Type: text/bzr-bundle; charset="us-ascii"; name="bzr/roy.lyseng@stripped" Content-Transfer-Encoding: 7bit Content-Disposition: inline # Bazaar merge directive format 2 (Bazaar 0.90) # revision_id: roy.lyseng@stripped # target_branch: file:///home/rl136806/mysql/repo/mysql-review/ # testament_sha1: e502fab2e6f72be22d6d0f404e568b98b81ece2e # timestamp: 2011-01-12 16:39:11 +0100 # base_revision_id: olav.sandstaa@stripped\ # mvpa9nlv4eu063m6 # # Begin bundle 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 HA+y/iLqaH/4u5IpwoSCQMdkWA== --===============4015085212118270867==--