From: Roy Lyseng Date: June 21 2011 9:40am Subject: bzr push into mysql-trunk branch (roy.lyseng:3385 to 3386) Bug#12603200 List-Archive: http://lists.mysql.com/commits/139551 X-Bug: 12603200 Message-Id: <20110621094034.DF2861F5@tyr67.norway.sun.com> MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit 3386 Roy Lyseng 2011-06-21 Bug#12603200: Assert in QUICK_INDEX_MERGE_SELECT::need_sorted_output The problematic query is semi-join transformed and a LooseScan strategy is selected. setup_semijoin_dups_elimination() inspects the provided quick select object and attempts to set it to require ordering of output rows. However, the quick select object was not selected in the first place (see Loose_scan_opt::check_ref_access_part1()), hence there is a missing check that the index covered by the quick select matches the index selected for the loose scan access. Will also delete the quick select object when it is clear it will not be used later. Fixed by adding this check, and also deleting the quick select object if it was not chosen for accessing this table. mysql-test/include/subquery_sj.inc Added test case for bug#12603200. mysql-test/r/subquery_sj_all.result mysql-test/r/subquery_sj_all_jcl6.result mysql-test/r/subquery_sj_all_jcl7.result mysql-test/r/subquery_sj_dupsweed.result mysql-test/r/subquery_sj_dupsweed_jcl6.result mysql-test/r/subquery_sj_dupsweed_jcl7.result mysql-test/r/subquery_sj_firstmatch.result mysql-test/r/subquery_sj_firstmatch_jcl6.result mysql-test/r/subquery_sj_firstmatch_jcl7.result mysql-test/r/subquery_sj_loosescan.result mysql-test/r/subquery_sj_loosescan_jcl6.result mysql-test/r/subquery_sj_loosescan_jcl7.result mysql-test/r/subquery_sj_mat.result mysql-test/r/subquery_sj_mat_jcl6.result mysql-test/r/subquery_sj_mat_jcl7.result mysql-test/r/subquery_sj_mat_nosj.result mysql-test/r/subquery_sj_none.result mysql-test/r/subquery_sj_none_jcl6.result mysql-test/r/subquery_sj_none_jcl7.result Added test case result for bug#12603200. sql/sql_select.cc Fixed setup_semijoin_dups_elimination() as described above. modified: mysql-test/include/subquery_sj.inc mysql-test/r/subquery_sj_all.result mysql-test/r/subquery_sj_all_jcl6.result mysql-test/r/subquery_sj_all_jcl7.result mysql-test/r/subquery_sj_dupsweed.result mysql-test/r/subquery_sj_dupsweed_jcl6.result mysql-test/r/subquery_sj_dupsweed_jcl7.result mysql-test/r/subquery_sj_firstmatch.result mysql-test/r/subquery_sj_firstmatch_jcl6.result mysql-test/r/subquery_sj_firstmatch_jcl7.result mysql-test/r/subquery_sj_loosescan.result mysql-test/r/subquery_sj_loosescan_jcl6.result mysql-test/r/subquery_sj_loosescan_jcl7.result mysql-test/r/subquery_sj_mat.result mysql-test/r/subquery_sj_mat_jcl6.result mysql-test/r/subquery_sj_mat_jcl7.result mysql-test/r/subquery_sj_mat_nosj.result mysql-test/r/subquery_sj_none.result mysql-test/r/subquery_sj_none_jcl6.result mysql-test/r/subquery_sj_none_jcl7.result sql/sql_select.cc 3385 Roy Lyseng 2011-06-20 Bug#12640083: Same query executed as WHERE subquery gives different results on IN() compare The query that returns with an empty result is using the MaterializeScan semi-join strategy, and it has an outer join operation inside the materialized subquery. As has happened before, there are remnants of outer join execution in the join_tab that is reused for reading the materialized tables, in this case it was the first_unmatched field that needed clearing. mysql-test/include/subquery_sj.inc Added test case for bug#12640083. mysql-test/r/subquery_sj_all.result mysql-test/r/subquery_sj_all_jcl6.result mysql-test/r/subquery_sj_all_jcl7.result mysql-test/r/subquery_sj_dupsweed.result mysql-test/r/subquery_sj_dupsweed_jcl6.result mysql-test/r/subquery_sj_dupsweed_jcl7.result mysql-test/r/subquery_sj_firstmatch.result mysql-test/r/subquery_sj_firstmatch_jcl6.result mysql-test/r/subquery_sj_firstmatch_jcl7.result mysql-test/r/subquery_sj_loosescan.result mysql-test/r/subquery_sj_loosescan_jcl6.result mysql-test/r/subquery_sj_loosescan_jcl7.result mysql-test/r/subquery_sj_mat.result mysql-test/r/subquery_sj_mat_jcl6.result mysql-test/r/subquery_sj_mat_jcl7.result mysql-test/r/subquery_sj_mat_nosj.result mysql-test/r/subquery_sj_none.result mysql-test/r/subquery_sj_none_jcl6.result mysql-test/r/subquery_sj_none_jcl7.result Added test case result for bug#12640083. sql/sql_select.cc In sub_select_sjm(), cleared the flag last_tab->first_unmatched. modified: mysql-test/include/subquery_sj.inc mysql-test/r/subquery_sj_all.result mysql-test/r/subquery_sj_all_jcl6.result mysql-test/r/subquery_sj_all_jcl7.result mysql-test/r/subquery_sj_dupsweed.result mysql-test/r/subquery_sj_dupsweed_jcl6.result mysql-test/r/subquery_sj_dupsweed_jcl7.result mysql-test/r/subquery_sj_firstmatch.result mysql-test/r/subquery_sj_firstmatch_jcl6.result mysql-test/r/subquery_sj_firstmatch_jcl7.result mysql-test/r/subquery_sj_loosescan.result mysql-test/r/subquery_sj_loosescan_jcl6.result mysql-test/r/subquery_sj_loosescan_jcl7.result mysql-test/r/subquery_sj_mat.result mysql-test/r/subquery_sj_mat_jcl6.result mysql-test/r/subquery_sj_mat_jcl7.result mysql-test/r/subquery_sj_mat_nosj.result mysql-test/r/subquery_sj_none.result mysql-test/r/subquery_sj_none_jcl6.result mysql-test/r/subquery_sj_none_jcl7.result sql/sql_select.cc === modified file 'mysql-test/include/subquery_sj.inc' --- a/mysql-test/include/subquery_sj.inc 2011-06-20 15:47:50 +0000 +++ b/mysql-test/include/subquery_sj.inc 2011-06-21 09:29:01 +0000 @@ -3670,3 +3670,81 @@ eval $query; DROP TABLE t1, t2, t3; --echo # End of the test for bug#12640083. + +--echo # +--echo # Bug#12603200 - Assert in QUICK_INDEX_MERGE_SELECT::need_sorted_output +--echo # + +CREATE TABLE t1 ( + pk int NOT NULL, + col_int_key int NOT NULL, + col_varchar_nokey varchar(1) NOT NULL, + col_varchar_key varchar(1) NOT NULL, + PRIMARY KEY(pk), + KEY col_int_key(col_int_key), + KEY col_varchar_key(col_varchar_key, col_int_key) +) engine=innodb; + +INSERT INTO t1 VALUES +(1,7,'a','a'), +(2,0,'v','v'), +(3,9,'c','c'), +(4,3,'m','m'), +(5,2,'a','a'), +(6,1,'d','d'), +(7,8,'y','y'), +(8,6,'t','t'), +(11,7,'a','x'), +(12,0,'v','v'), +(13,9,'c','c'), +(14,3,'m','m'), +(15,2,'a','x'), +(16,1,'d','d'), +(17,8,'y','y'), +(18,6,'t','u'); + +CREATE TABLE t2 ( + pk int NOT NULL, + col_int_key int NOT NULL, + col_varchar_key varchar(1) NOT NULL, + PRIMARY KEY(pk), + KEY col_varchar_key(col_varchar_key, col_int_key) +) engine=innodb; + +INSERT INTO t2(pk,col_int_key,col_varchar_key) VALUES +(8,7,'c'), +(11,4,'l'), +(12,7,'b'), +(13,0,'c'), +(14,2,'i'), +(15,9,'h'), +(16,4,'q'), +(17,1,'m'), +(18,9,'b'), +(19,2,'e'), +(20,1,'c'), +(21,7,'z'), +(22,4,'l'), +(23,7,'z'), +(24,0,'c'), +(25,2,'i'), +(26,9,'h'), +(27,4,'q'), +(28,0,'a'), +(29,1,'d'); + +let $query= +SELECT outr.col_varchar_key AS x, outr.pk AS y +FROM t1 AS outr +WHERE outr.col_varchar_key IN (SELECT innr.col_varchar_key + FROM t2 AS innr + WHERE innr.col_varchar_key = 'a' OR innr.pk = 8) + AND outr.col_varchar_nokey < 't' +ORDER BY outr.col_varchar_key, outr.pk; + +eval EXPLAIN $query; +eval $query; + +DROP TABLE t1, t2; + +--echo # End of bug#12603200 === modified file 'mysql-test/r/subquery_sj_all.result' --- a/mysql-test/r/subquery_sj_all.result 2011-06-20 15:47:50 +0000 +++ b/mysql-test/r/subquery_sj_all.result 2011-06-21 09:29:01 +0000 @@ -5563,4 +5563,85 @@ a ab DROP TABLE t1, t2, t3; # End of the test for bug#12640083. +# +# Bug#12603200 - Assert in QUICK_INDEX_MERGE_SELECT::need_sorted_output +# +CREATE TABLE t1 ( +pk int NOT NULL, +col_int_key int NOT NULL, +col_varchar_nokey varchar(1) NOT NULL, +col_varchar_key varchar(1) NOT NULL, +PRIMARY KEY(pk), +KEY col_int_key(col_int_key), +KEY col_varchar_key(col_varchar_key, col_int_key) +) engine=innodb; +INSERT INTO t1 VALUES +(1,7,'a','a'), +(2,0,'v','v'), +(3,9,'c','c'), +(4,3,'m','m'), +(5,2,'a','a'), +(6,1,'d','d'), +(7,8,'y','y'), +(8,6,'t','t'), +(11,7,'a','x'), +(12,0,'v','v'), +(13,9,'c','c'), +(14,3,'m','m'), +(15,2,'a','x'), +(16,1,'d','d'), +(17,8,'y','y'), +(18,6,'t','u'); +CREATE TABLE t2 ( +pk int NOT NULL, +col_int_key int NOT NULL, +col_varchar_key varchar(1) NOT NULL, +PRIMARY KEY(pk), +KEY col_varchar_key(col_varchar_key, col_int_key) +) engine=innodb; +INSERT INTO t2(pk,col_int_key,col_varchar_key) VALUES +(8,7,'c'), +(11,4,'l'), +(12,7,'b'), +(13,0,'c'), +(14,2,'i'), +(15,9,'h'), +(16,4,'q'), +(17,1,'m'), +(18,9,'b'), +(19,2,'e'), +(20,1,'c'), +(21,7,'z'), +(22,4,'l'), +(23,7,'z'), +(24,0,'c'), +(25,2,'i'), +(26,9,'h'), +(27,4,'q'), +(28,0,'a'), +(29,1,'d'); +EXPLAIN SELECT outr.col_varchar_key AS x, outr.pk AS y +FROM t1 AS outr +WHERE outr.col_varchar_key IN (SELECT innr.col_varchar_key +FROM t2 AS innr +WHERE innr.col_varchar_key = 'a' OR innr.pk = 8) +AND outr.col_varchar_nokey < 't' +ORDER BY outr.col_varchar_key, outr.pk; +id select_type table type possible_keys key key_len ref rows Extra +1 PRIMARY innr index PRIMARY,col_varchar_key col_varchar_key 7 NULL 20 Using where; Using index; Using temporary; Using filesort; LooseScan +1 PRIMARY outr ref col_varchar_key col_varchar_key 3 test.innr.col_varchar_key 1 Using where +SELECT outr.col_varchar_key AS x, outr.pk AS y +FROM t1 AS outr +WHERE outr.col_varchar_key IN (SELECT innr.col_varchar_key +FROM t2 AS innr +WHERE innr.col_varchar_key = 'a' OR innr.pk = 8) +AND outr.col_varchar_nokey < 't' +ORDER BY outr.col_varchar_key, outr.pk; +x y +a 1 +a 5 +c 3 +c 13 +DROP TABLE t1, t2; +# End of bug#12603200 set optimizer_switch=default; === modified file 'mysql-test/r/subquery_sj_all_jcl6.result' --- a/mysql-test/r/subquery_sj_all_jcl6.result 2011-06-20 15:47:50 +0000 +++ b/mysql-test/r/subquery_sj_all_jcl6.result 2011-06-21 09:29:01 +0000 @@ -5567,5 +5567,86 @@ a ab DROP TABLE t1, t2, t3; # End of the test for bug#12640083. +# +# Bug#12603200 - Assert in QUICK_INDEX_MERGE_SELECT::need_sorted_output +# +CREATE TABLE t1 ( +pk int NOT NULL, +col_int_key int NOT NULL, +col_varchar_nokey varchar(1) NOT NULL, +col_varchar_key varchar(1) NOT NULL, +PRIMARY KEY(pk), +KEY col_int_key(col_int_key), +KEY col_varchar_key(col_varchar_key, col_int_key) +) engine=innodb; +INSERT INTO t1 VALUES +(1,7,'a','a'), +(2,0,'v','v'), +(3,9,'c','c'), +(4,3,'m','m'), +(5,2,'a','a'), +(6,1,'d','d'), +(7,8,'y','y'), +(8,6,'t','t'), +(11,7,'a','x'), +(12,0,'v','v'), +(13,9,'c','c'), +(14,3,'m','m'), +(15,2,'a','x'), +(16,1,'d','d'), +(17,8,'y','y'), +(18,6,'t','u'); +CREATE TABLE t2 ( +pk int NOT NULL, +col_int_key int NOT NULL, +col_varchar_key varchar(1) NOT NULL, +PRIMARY KEY(pk), +KEY col_varchar_key(col_varchar_key, col_int_key) +) engine=innodb; +INSERT INTO t2(pk,col_int_key,col_varchar_key) VALUES +(8,7,'c'), +(11,4,'l'), +(12,7,'b'), +(13,0,'c'), +(14,2,'i'), +(15,9,'h'), +(16,4,'q'), +(17,1,'m'), +(18,9,'b'), +(19,2,'e'), +(20,1,'c'), +(21,7,'z'), +(22,4,'l'), +(23,7,'z'), +(24,0,'c'), +(25,2,'i'), +(26,9,'h'), +(27,4,'q'), +(28,0,'a'), +(29,1,'d'); +EXPLAIN SELECT outr.col_varchar_key AS x, outr.pk AS y +FROM t1 AS outr +WHERE outr.col_varchar_key IN (SELECT innr.col_varchar_key +FROM t2 AS innr +WHERE innr.col_varchar_key = 'a' OR innr.pk = 8) +AND outr.col_varchar_nokey < 't' +ORDER BY outr.col_varchar_key, outr.pk; +id select_type table type possible_keys key key_len ref rows Extra +1 PRIMARY innr index PRIMARY,col_varchar_key col_varchar_key 7 NULL 20 Using where; Using index; Using temporary; Using filesort; LooseScan +1 PRIMARY outr ref col_varchar_key col_varchar_key 3 test.innr.col_varchar_key 1 Using where; Using join buffer (BKA, incremental buffers) +SELECT outr.col_varchar_key AS x, outr.pk AS y +FROM t1 AS outr +WHERE outr.col_varchar_key IN (SELECT innr.col_varchar_key +FROM t2 AS innr +WHERE innr.col_varchar_key = 'a' OR innr.pk = 8) +AND outr.col_varchar_nokey < 't' +ORDER BY outr.col_varchar_key, outr.pk; +x y +a 1 +a 5 +c 3 +c 13 +DROP TABLE t1, t2; +# End of bug#12603200 set optimizer_switch=default; set optimizer_join_cache_level=default; === modified file 'mysql-test/r/subquery_sj_all_jcl7.result' --- a/mysql-test/r/subquery_sj_all_jcl7.result 2011-06-20 15:47:50 +0000 +++ b/mysql-test/r/subquery_sj_all_jcl7.result 2011-06-21 09:29:01 +0000 @@ -5567,5 +5567,86 @@ a ab DROP TABLE t1, t2, t3; # End of the test for bug#12640083. +# +# Bug#12603200 - Assert in QUICK_INDEX_MERGE_SELECT::need_sorted_output +# +CREATE TABLE t1 ( +pk int NOT NULL, +col_int_key int NOT NULL, +col_varchar_nokey varchar(1) NOT NULL, +col_varchar_key varchar(1) NOT NULL, +PRIMARY KEY(pk), +KEY col_int_key(col_int_key), +KEY col_varchar_key(col_varchar_key, col_int_key) +) engine=innodb; +INSERT INTO t1 VALUES +(1,7,'a','a'), +(2,0,'v','v'), +(3,9,'c','c'), +(4,3,'m','m'), +(5,2,'a','a'), +(6,1,'d','d'), +(7,8,'y','y'), +(8,6,'t','t'), +(11,7,'a','x'), +(12,0,'v','v'), +(13,9,'c','c'), +(14,3,'m','m'), +(15,2,'a','x'), +(16,1,'d','d'), +(17,8,'y','y'), +(18,6,'t','u'); +CREATE TABLE t2 ( +pk int NOT NULL, +col_int_key int NOT NULL, +col_varchar_key varchar(1) NOT NULL, +PRIMARY KEY(pk), +KEY col_varchar_key(col_varchar_key, col_int_key) +) engine=innodb; +INSERT INTO t2(pk,col_int_key,col_varchar_key) VALUES +(8,7,'c'), +(11,4,'l'), +(12,7,'b'), +(13,0,'c'), +(14,2,'i'), +(15,9,'h'), +(16,4,'q'), +(17,1,'m'), +(18,9,'b'), +(19,2,'e'), +(20,1,'c'), +(21,7,'z'), +(22,4,'l'), +(23,7,'z'), +(24,0,'c'), +(25,2,'i'), +(26,9,'h'), +(27,4,'q'), +(28,0,'a'), +(29,1,'d'); +EXPLAIN SELECT outr.col_varchar_key AS x, outr.pk AS y +FROM t1 AS outr +WHERE outr.col_varchar_key IN (SELECT innr.col_varchar_key +FROM t2 AS innr +WHERE innr.col_varchar_key = 'a' OR innr.pk = 8) +AND outr.col_varchar_nokey < 't' +ORDER BY outr.col_varchar_key, outr.pk; +id select_type table type possible_keys key key_len ref rows Extra +1 PRIMARY innr index PRIMARY,col_varchar_key col_varchar_key 7 NULL 20 Using where; Using index; Using temporary; Using filesort; LooseScan +1 PRIMARY outr ref col_varchar_key col_varchar_key 3 test.innr.col_varchar_key 1 Using where; Using join buffer (BKA_UNIQUE, regular buffers) +SELECT outr.col_varchar_key AS x, outr.pk AS y +FROM t1 AS outr +WHERE outr.col_varchar_key IN (SELECT innr.col_varchar_key +FROM t2 AS innr +WHERE innr.col_varchar_key = 'a' OR innr.pk = 8) +AND outr.col_varchar_nokey < 't' +ORDER BY outr.col_varchar_key, outr.pk; +x y +a 1 +a 5 +c 3 +c 13 +DROP TABLE t1, t2; +# End of bug#12603200 set optimizer_switch=default; set optimizer_join_cache_level=default; === modified file 'mysql-test/r/subquery_sj_dupsweed.result' --- a/mysql-test/r/subquery_sj_dupsweed.result 2011-06-20 15:47:50 +0000 +++ b/mysql-test/r/subquery_sj_dupsweed.result 2011-06-21 09:29:01 +0000 @@ -5562,4 +5562,85 @@ a ab DROP TABLE t1, t2, t3; # End of the test for bug#12640083. +# +# Bug#12603200 - Assert in QUICK_INDEX_MERGE_SELECT::need_sorted_output +# +CREATE TABLE t1 ( +pk int NOT NULL, +col_int_key int NOT NULL, +col_varchar_nokey varchar(1) NOT NULL, +col_varchar_key varchar(1) NOT NULL, +PRIMARY KEY(pk), +KEY col_int_key(col_int_key), +KEY col_varchar_key(col_varchar_key, col_int_key) +) engine=innodb; +INSERT INTO t1 VALUES +(1,7,'a','a'), +(2,0,'v','v'), +(3,9,'c','c'), +(4,3,'m','m'), +(5,2,'a','a'), +(6,1,'d','d'), +(7,8,'y','y'), +(8,6,'t','t'), +(11,7,'a','x'), +(12,0,'v','v'), +(13,9,'c','c'), +(14,3,'m','m'), +(15,2,'a','x'), +(16,1,'d','d'), +(17,8,'y','y'), +(18,6,'t','u'); +CREATE TABLE t2 ( +pk int NOT NULL, +col_int_key int NOT NULL, +col_varchar_key varchar(1) NOT NULL, +PRIMARY KEY(pk), +KEY col_varchar_key(col_varchar_key, col_int_key) +) engine=innodb; +INSERT INTO t2(pk,col_int_key,col_varchar_key) VALUES +(8,7,'c'), +(11,4,'l'), +(12,7,'b'), +(13,0,'c'), +(14,2,'i'), +(15,9,'h'), +(16,4,'q'), +(17,1,'m'), +(18,9,'b'), +(19,2,'e'), +(20,1,'c'), +(21,7,'z'), +(22,4,'l'), +(23,7,'z'), +(24,0,'c'), +(25,2,'i'), +(26,9,'h'), +(27,4,'q'), +(28,0,'a'), +(29,1,'d'); +EXPLAIN SELECT outr.col_varchar_key AS x, outr.pk AS y +FROM t1 AS outr +WHERE outr.col_varchar_key IN (SELECT innr.col_varchar_key +FROM t2 AS innr +WHERE innr.col_varchar_key = 'a' OR innr.pk = 8) +AND outr.col_varchar_nokey < 't' +ORDER BY outr.col_varchar_key, outr.pk; +id select_type table type possible_keys key key_len ref rows Extra +1 PRIMARY innr index_merge PRIMARY,col_varchar_key col_varchar_key,PRIMARY 3,4 NULL 2 Using sort_union(col_varchar_key,PRIMARY); Using where; Using temporary; Using filesort; Start temporary +1 PRIMARY outr ref col_varchar_key col_varchar_key 3 test.innr.col_varchar_key 1 Using where; End temporary +SELECT outr.col_varchar_key AS x, outr.pk AS y +FROM t1 AS outr +WHERE outr.col_varchar_key IN (SELECT innr.col_varchar_key +FROM t2 AS innr +WHERE innr.col_varchar_key = 'a' OR innr.pk = 8) +AND outr.col_varchar_nokey < 't' +ORDER BY outr.col_varchar_key, outr.pk; +x y +a 1 +a 5 +c 3 +c 13 +DROP TABLE t1, t2; +# End of bug#12603200 set optimizer_switch=default; === modified file 'mysql-test/r/subquery_sj_dupsweed_jcl6.result' --- a/mysql-test/r/subquery_sj_dupsweed_jcl6.result 2011-06-20 15:47:50 +0000 +++ b/mysql-test/r/subquery_sj_dupsweed_jcl6.result 2011-06-21 09:29:01 +0000 @@ -5566,5 +5566,86 @@ a ab DROP TABLE t1, t2, t3; # End of the test for bug#12640083. +# +# Bug#12603200 - Assert in QUICK_INDEX_MERGE_SELECT::need_sorted_output +# +CREATE TABLE t1 ( +pk int NOT NULL, +col_int_key int NOT NULL, +col_varchar_nokey varchar(1) NOT NULL, +col_varchar_key varchar(1) NOT NULL, +PRIMARY KEY(pk), +KEY col_int_key(col_int_key), +KEY col_varchar_key(col_varchar_key, col_int_key) +) engine=innodb; +INSERT INTO t1 VALUES +(1,7,'a','a'), +(2,0,'v','v'), +(3,9,'c','c'), +(4,3,'m','m'), +(5,2,'a','a'), +(6,1,'d','d'), +(7,8,'y','y'), +(8,6,'t','t'), +(11,7,'a','x'), +(12,0,'v','v'), +(13,9,'c','c'), +(14,3,'m','m'), +(15,2,'a','x'), +(16,1,'d','d'), +(17,8,'y','y'), +(18,6,'t','u'); +CREATE TABLE t2 ( +pk int NOT NULL, +col_int_key int NOT NULL, +col_varchar_key varchar(1) NOT NULL, +PRIMARY KEY(pk), +KEY col_varchar_key(col_varchar_key, col_int_key) +) engine=innodb; +INSERT INTO t2(pk,col_int_key,col_varchar_key) VALUES +(8,7,'c'), +(11,4,'l'), +(12,7,'b'), +(13,0,'c'), +(14,2,'i'), +(15,9,'h'), +(16,4,'q'), +(17,1,'m'), +(18,9,'b'), +(19,2,'e'), +(20,1,'c'), +(21,7,'z'), +(22,4,'l'), +(23,7,'z'), +(24,0,'c'), +(25,2,'i'), +(26,9,'h'), +(27,4,'q'), +(28,0,'a'), +(29,1,'d'); +EXPLAIN SELECT outr.col_varchar_key AS x, outr.pk AS y +FROM t1 AS outr +WHERE outr.col_varchar_key IN (SELECT innr.col_varchar_key +FROM t2 AS innr +WHERE innr.col_varchar_key = 'a' OR innr.pk = 8) +AND outr.col_varchar_nokey < 't' +ORDER BY outr.col_varchar_key, outr.pk; +id select_type table type possible_keys key key_len ref rows Extra +1 PRIMARY innr index_merge PRIMARY,col_varchar_key col_varchar_key,PRIMARY 3,4 NULL 2 Using sort_union(col_varchar_key,PRIMARY); Using where; Using temporary; Using filesort; Start temporary +1 PRIMARY outr ref col_varchar_key col_varchar_key 3 test.innr.col_varchar_key 1 Using where; End temporary +SELECT outr.col_varchar_key AS x, outr.pk AS y +FROM t1 AS outr +WHERE outr.col_varchar_key IN (SELECT innr.col_varchar_key +FROM t2 AS innr +WHERE innr.col_varchar_key = 'a' OR innr.pk = 8) +AND outr.col_varchar_nokey < 't' +ORDER BY outr.col_varchar_key, outr.pk; +x y +a 1 +a 5 +c 3 +c 13 +DROP TABLE t1, t2; +# End of bug#12603200 set optimizer_switch=default; set optimizer_join_cache_level=default; === modified file 'mysql-test/r/subquery_sj_dupsweed_jcl7.result' --- a/mysql-test/r/subquery_sj_dupsweed_jcl7.result 2011-06-20 15:47:50 +0000 +++ b/mysql-test/r/subquery_sj_dupsweed_jcl7.result 2011-06-21 09:29:01 +0000 @@ -5566,5 +5566,86 @@ a ab DROP TABLE t1, t2, t3; # End of the test for bug#12640083. +# +# Bug#12603200 - Assert in QUICK_INDEX_MERGE_SELECT::need_sorted_output +# +CREATE TABLE t1 ( +pk int NOT NULL, +col_int_key int NOT NULL, +col_varchar_nokey varchar(1) NOT NULL, +col_varchar_key varchar(1) NOT NULL, +PRIMARY KEY(pk), +KEY col_int_key(col_int_key), +KEY col_varchar_key(col_varchar_key, col_int_key) +) engine=innodb; +INSERT INTO t1 VALUES +(1,7,'a','a'), +(2,0,'v','v'), +(3,9,'c','c'), +(4,3,'m','m'), +(5,2,'a','a'), +(6,1,'d','d'), +(7,8,'y','y'), +(8,6,'t','t'), +(11,7,'a','x'), +(12,0,'v','v'), +(13,9,'c','c'), +(14,3,'m','m'), +(15,2,'a','x'), +(16,1,'d','d'), +(17,8,'y','y'), +(18,6,'t','u'); +CREATE TABLE t2 ( +pk int NOT NULL, +col_int_key int NOT NULL, +col_varchar_key varchar(1) NOT NULL, +PRIMARY KEY(pk), +KEY col_varchar_key(col_varchar_key, col_int_key) +) engine=innodb; +INSERT INTO t2(pk,col_int_key,col_varchar_key) VALUES +(8,7,'c'), +(11,4,'l'), +(12,7,'b'), +(13,0,'c'), +(14,2,'i'), +(15,9,'h'), +(16,4,'q'), +(17,1,'m'), +(18,9,'b'), +(19,2,'e'), +(20,1,'c'), +(21,7,'z'), +(22,4,'l'), +(23,7,'z'), +(24,0,'c'), +(25,2,'i'), +(26,9,'h'), +(27,4,'q'), +(28,0,'a'), +(29,1,'d'); +EXPLAIN SELECT outr.col_varchar_key AS x, outr.pk AS y +FROM t1 AS outr +WHERE outr.col_varchar_key IN (SELECT innr.col_varchar_key +FROM t2 AS innr +WHERE innr.col_varchar_key = 'a' OR innr.pk = 8) +AND outr.col_varchar_nokey < 't' +ORDER BY outr.col_varchar_key, outr.pk; +id select_type table type possible_keys key key_len ref rows Extra +1 PRIMARY innr index_merge PRIMARY,col_varchar_key col_varchar_key,PRIMARY 3,4 NULL 2 Using sort_union(col_varchar_key,PRIMARY); Using where; Using temporary; Using filesort; Start temporary +1 PRIMARY outr ref col_varchar_key col_varchar_key 3 test.innr.col_varchar_key 1 Using where; End temporary +SELECT outr.col_varchar_key AS x, outr.pk AS y +FROM t1 AS outr +WHERE outr.col_varchar_key IN (SELECT innr.col_varchar_key +FROM t2 AS innr +WHERE innr.col_varchar_key = 'a' OR innr.pk = 8) +AND outr.col_varchar_nokey < 't' +ORDER BY outr.col_varchar_key, outr.pk; +x y +a 1 +a 5 +c 3 +c 13 +DROP TABLE t1, t2; +# End of bug#12603200 set optimizer_switch=default; set optimizer_join_cache_level=default; === modified file 'mysql-test/r/subquery_sj_firstmatch.result' --- a/mysql-test/r/subquery_sj_firstmatch.result 2011-06-20 15:47:50 +0000 +++ b/mysql-test/r/subquery_sj_firstmatch.result 2011-06-21 09:29:01 +0000 @@ -5564,6 +5564,87 @@ ab DROP TABLE t1, t2, t3; # End of the test for bug#12640083. # +# Bug#12603200 - Assert in QUICK_INDEX_MERGE_SELECT::need_sorted_output +# +CREATE TABLE t1 ( +pk int NOT NULL, +col_int_key int NOT NULL, +col_varchar_nokey varchar(1) NOT NULL, +col_varchar_key varchar(1) NOT NULL, +PRIMARY KEY(pk), +KEY col_int_key(col_int_key), +KEY col_varchar_key(col_varchar_key, col_int_key) +) engine=innodb; +INSERT INTO t1 VALUES +(1,7,'a','a'), +(2,0,'v','v'), +(3,9,'c','c'), +(4,3,'m','m'), +(5,2,'a','a'), +(6,1,'d','d'), +(7,8,'y','y'), +(8,6,'t','t'), +(11,7,'a','x'), +(12,0,'v','v'), +(13,9,'c','c'), +(14,3,'m','m'), +(15,2,'a','x'), +(16,1,'d','d'), +(17,8,'y','y'), +(18,6,'t','u'); +CREATE TABLE t2 ( +pk int NOT NULL, +col_int_key int NOT NULL, +col_varchar_key varchar(1) NOT NULL, +PRIMARY KEY(pk), +KEY col_varchar_key(col_varchar_key, col_int_key) +) engine=innodb; +INSERT INTO t2(pk,col_int_key,col_varchar_key) VALUES +(8,7,'c'), +(11,4,'l'), +(12,7,'b'), +(13,0,'c'), +(14,2,'i'), +(15,9,'h'), +(16,4,'q'), +(17,1,'m'), +(18,9,'b'), +(19,2,'e'), +(20,1,'c'), +(21,7,'z'), +(22,4,'l'), +(23,7,'z'), +(24,0,'c'), +(25,2,'i'), +(26,9,'h'), +(27,4,'q'), +(28,0,'a'), +(29,1,'d'); +EXPLAIN SELECT outr.col_varchar_key AS x, outr.pk AS y +FROM t1 AS outr +WHERE outr.col_varchar_key IN (SELECT innr.col_varchar_key +FROM t2 AS innr +WHERE innr.col_varchar_key = 'a' OR innr.pk = 8) +AND outr.col_varchar_nokey < 't' +ORDER BY outr.col_varchar_key, outr.pk; +id select_type table type possible_keys key key_len ref rows Extra +1 PRIMARY innr index_merge PRIMARY,col_varchar_key col_varchar_key,PRIMARY 3,4 NULL 2 Using sort_union(col_varchar_key,PRIMARY); Using where; Using temporary; Using filesort; Start temporary +1 PRIMARY outr ref col_varchar_key col_varchar_key 3 test.innr.col_varchar_key 1 Using where; End temporary +SELECT outr.col_varchar_key AS x, outr.pk AS y +FROM t1 AS outr +WHERE outr.col_varchar_key IN (SELECT innr.col_varchar_key +FROM t2 AS innr +WHERE innr.col_varchar_key = 'a' OR innr.pk = 8) +AND outr.col_varchar_nokey < 't' +ORDER BY outr.col_varchar_key, outr.pk; +x y +a 1 +a 5 +c 3 +c 13 +DROP TABLE t1, t2; +# End of bug#12603200 +# # Bug#51457 Firstmatch semijoin strategy gives wrong results for # certain query plans # === modified file 'mysql-test/r/subquery_sj_firstmatch_jcl6.result' --- a/mysql-test/r/subquery_sj_firstmatch_jcl6.result 2011-06-20 15:47:50 +0000 +++ b/mysql-test/r/subquery_sj_firstmatch_jcl6.result 2011-06-21 09:29:01 +0000 @@ -5568,6 +5568,87 @@ ab DROP TABLE t1, t2, t3; # End of the test for bug#12640083. # +# Bug#12603200 - Assert in QUICK_INDEX_MERGE_SELECT::need_sorted_output +# +CREATE TABLE t1 ( +pk int NOT NULL, +col_int_key int NOT NULL, +col_varchar_nokey varchar(1) NOT NULL, +col_varchar_key varchar(1) NOT NULL, +PRIMARY KEY(pk), +KEY col_int_key(col_int_key), +KEY col_varchar_key(col_varchar_key, col_int_key) +) engine=innodb; +INSERT INTO t1 VALUES +(1,7,'a','a'), +(2,0,'v','v'), +(3,9,'c','c'), +(4,3,'m','m'), +(5,2,'a','a'), +(6,1,'d','d'), +(7,8,'y','y'), +(8,6,'t','t'), +(11,7,'a','x'), +(12,0,'v','v'), +(13,9,'c','c'), +(14,3,'m','m'), +(15,2,'a','x'), +(16,1,'d','d'), +(17,8,'y','y'), +(18,6,'t','u'); +CREATE TABLE t2 ( +pk int NOT NULL, +col_int_key int NOT NULL, +col_varchar_key varchar(1) NOT NULL, +PRIMARY KEY(pk), +KEY col_varchar_key(col_varchar_key, col_int_key) +) engine=innodb; +INSERT INTO t2(pk,col_int_key,col_varchar_key) VALUES +(8,7,'c'), +(11,4,'l'), +(12,7,'b'), +(13,0,'c'), +(14,2,'i'), +(15,9,'h'), +(16,4,'q'), +(17,1,'m'), +(18,9,'b'), +(19,2,'e'), +(20,1,'c'), +(21,7,'z'), +(22,4,'l'), +(23,7,'z'), +(24,0,'c'), +(25,2,'i'), +(26,9,'h'), +(27,4,'q'), +(28,0,'a'), +(29,1,'d'); +EXPLAIN SELECT outr.col_varchar_key AS x, outr.pk AS y +FROM t1 AS outr +WHERE outr.col_varchar_key IN (SELECT innr.col_varchar_key +FROM t2 AS innr +WHERE innr.col_varchar_key = 'a' OR innr.pk = 8) +AND outr.col_varchar_nokey < 't' +ORDER BY outr.col_varchar_key, outr.pk; +id select_type table type possible_keys key key_len ref rows Extra +1 PRIMARY innr index_merge PRIMARY,col_varchar_key col_varchar_key,PRIMARY 3,4 NULL 2 Using sort_union(col_varchar_key,PRIMARY); Using where; Using temporary; Using filesort; Start temporary +1 PRIMARY outr ref col_varchar_key col_varchar_key 3 test.innr.col_varchar_key 1 Using where; End temporary +SELECT outr.col_varchar_key AS x, outr.pk AS y +FROM t1 AS outr +WHERE outr.col_varchar_key IN (SELECT innr.col_varchar_key +FROM t2 AS innr +WHERE innr.col_varchar_key = 'a' OR innr.pk = 8) +AND outr.col_varchar_nokey < 't' +ORDER BY outr.col_varchar_key, outr.pk; +x y +a 1 +a 5 +c 3 +c 13 +DROP TABLE t1, t2; +# End of bug#12603200 +# # Bug#51457 Firstmatch semijoin strategy gives wrong results for # certain query plans # === modified file 'mysql-test/r/subquery_sj_firstmatch_jcl7.result' --- a/mysql-test/r/subquery_sj_firstmatch_jcl7.result 2011-06-20 15:47:50 +0000 +++ b/mysql-test/r/subquery_sj_firstmatch_jcl7.result 2011-06-21 09:29:01 +0000 @@ -5568,6 +5568,87 @@ ab DROP TABLE t1, t2, t3; # End of the test for bug#12640083. # +# Bug#12603200 - Assert in QUICK_INDEX_MERGE_SELECT::need_sorted_output +# +CREATE TABLE t1 ( +pk int NOT NULL, +col_int_key int NOT NULL, +col_varchar_nokey varchar(1) NOT NULL, +col_varchar_key varchar(1) NOT NULL, +PRIMARY KEY(pk), +KEY col_int_key(col_int_key), +KEY col_varchar_key(col_varchar_key, col_int_key) +) engine=innodb; +INSERT INTO t1 VALUES +(1,7,'a','a'), +(2,0,'v','v'), +(3,9,'c','c'), +(4,3,'m','m'), +(5,2,'a','a'), +(6,1,'d','d'), +(7,8,'y','y'), +(8,6,'t','t'), +(11,7,'a','x'), +(12,0,'v','v'), +(13,9,'c','c'), +(14,3,'m','m'), +(15,2,'a','x'), +(16,1,'d','d'), +(17,8,'y','y'), +(18,6,'t','u'); +CREATE TABLE t2 ( +pk int NOT NULL, +col_int_key int NOT NULL, +col_varchar_key varchar(1) NOT NULL, +PRIMARY KEY(pk), +KEY col_varchar_key(col_varchar_key, col_int_key) +) engine=innodb; +INSERT INTO t2(pk,col_int_key,col_varchar_key) VALUES +(8,7,'c'), +(11,4,'l'), +(12,7,'b'), +(13,0,'c'), +(14,2,'i'), +(15,9,'h'), +(16,4,'q'), +(17,1,'m'), +(18,9,'b'), +(19,2,'e'), +(20,1,'c'), +(21,7,'z'), +(22,4,'l'), +(23,7,'z'), +(24,0,'c'), +(25,2,'i'), +(26,9,'h'), +(27,4,'q'), +(28,0,'a'), +(29,1,'d'); +EXPLAIN SELECT outr.col_varchar_key AS x, outr.pk AS y +FROM t1 AS outr +WHERE outr.col_varchar_key IN (SELECT innr.col_varchar_key +FROM t2 AS innr +WHERE innr.col_varchar_key = 'a' OR innr.pk = 8) +AND outr.col_varchar_nokey < 't' +ORDER BY outr.col_varchar_key, outr.pk; +id select_type table type possible_keys key key_len ref rows Extra +1 PRIMARY innr index_merge PRIMARY,col_varchar_key col_varchar_key,PRIMARY 3,4 NULL 2 Using sort_union(col_varchar_key,PRIMARY); Using where; Using temporary; Using filesort; Start temporary +1 PRIMARY outr ref col_varchar_key col_varchar_key 3 test.innr.col_varchar_key 1 Using where; End temporary +SELECT outr.col_varchar_key AS x, outr.pk AS y +FROM t1 AS outr +WHERE outr.col_varchar_key IN (SELECT innr.col_varchar_key +FROM t2 AS innr +WHERE innr.col_varchar_key = 'a' OR innr.pk = 8) +AND outr.col_varchar_nokey < 't' +ORDER BY outr.col_varchar_key, outr.pk; +x y +a 1 +a 5 +c 3 +c 13 +DROP TABLE t1, t2; +# End of bug#12603200 +# # Bug#51457 Firstmatch semijoin strategy gives wrong results for # certain query plans # === modified file 'mysql-test/r/subquery_sj_loosescan.result' --- a/mysql-test/r/subquery_sj_loosescan.result 2011-06-20 15:47:50 +0000 +++ b/mysql-test/r/subquery_sj_loosescan.result 2011-06-21 09:29:01 +0000 @@ -5563,4 +5563,85 @@ a ab DROP TABLE t1, t2, t3; # End of the test for bug#12640083. +# +# Bug#12603200 - Assert in QUICK_INDEX_MERGE_SELECT::need_sorted_output +# +CREATE TABLE t1 ( +pk int NOT NULL, +col_int_key int NOT NULL, +col_varchar_nokey varchar(1) NOT NULL, +col_varchar_key varchar(1) NOT NULL, +PRIMARY KEY(pk), +KEY col_int_key(col_int_key), +KEY col_varchar_key(col_varchar_key, col_int_key) +) engine=innodb; +INSERT INTO t1 VALUES +(1,7,'a','a'), +(2,0,'v','v'), +(3,9,'c','c'), +(4,3,'m','m'), +(5,2,'a','a'), +(6,1,'d','d'), +(7,8,'y','y'), +(8,6,'t','t'), +(11,7,'a','x'), +(12,0,'v','v'), +(13,9,'c','c'), +(14,3,'m','m'), +(15,2,'a','x'), +(16,1,'d','d'), +(17,8,'y','y'), +(18,6,'t','u'); +CREATE TABLE t2 ( +pk int NOT NULL, +col_int_key int NOT NULL, +col_varchar_key varchar(1) NOT NULL, +PRIMARY KEY(pk), +KEY col_varchar_key(col_varchar_key, col_int_key) +) engine=innodb; +INSERT INTO t2(pk,col_int_key,col_varchar_key) VALUES +(8,7,'c'), +(11,4,'l'), +(12,7,'b'), +(13,0,'c'), +(14,2,'i'), +(15,9,'h'), +(16,4,'q'), +(17,1,'m'), +(18,9,'b'), +(19,2,'e'), +(20,1,'c'), +(21,7,'z'), +(22,4,'l'), +(23,7,'z'), +(24,0,'c'), +(25,2,'i'), +(26,9,'h'), +(27,4,'q'), +(28,0,'a'), +(29,1,'d'); +EXPLAIN SELECT outr.col_varchar_key AS x, outr.pk AS y +FROM t1 AS outr +WHERE outr.col_varchar_key IN (SELECT innr.col_varchar_key +FROM t2 AS innr +WHERE innr.col_varchar_key = 'a' OR innr.pk = 8) +AND outr.col_varchar_nokey < 't' +ORDER BY outr.col_varchar_key, outr.pk; +id select_type table type possible_keys key key_len ref rows Extra +1 PRIMARY innr index PRIMARY,col_varchar_key col_varchar_key 7 NULL 20 Using where; Using index; Using temporary; Using filesort; LooseScan +1 PRIMARY outr ref col_varchar_key col_varchar_key 3 test.innr.col_varchar_key 1 Using where +SELECT outr.col_varchar_key AS x, outr.pk AS y +FROM t1 AS outr +WHERE outr.col_varchar_key IN (SELECT innr.col_varchar_key +FROM t2 AS innr +WHERE innr.col_varchar_key = 'a' OR innr.pk = 8) +AND outr.col_varchar_nokey < 't' +ORDER BY outr.col_varchar_key, outr.pk; +x y +a 1 +a 5 +c 3 +c 13 +DROP TABLE t1, t2; +# End of bug#12603200 set optimizer_switch=default; === modified file 'mysql-test/r/subquery_sj_loosescan_jcl6.result' --- a/mysql-test/r/subquery_sj_loosescan_jcl6.result 2011-06-20 15:47:50 +0000 +++ b/mysql-test/r/subquery_sj_loosescan_jcl6.result 2011-06-21 09:29:01 +0000 @@ -5567,5 +5567,86 @@ a ab DROP TABLE t1, t2, t3; # End of the test for bug#12640083. +# +# Bug#12603200 - Assert in QUICK_INDEX_MERGE_SELECT::need_sorted_output +# +CREATE TABLE t1 ( +pk int NOT NULL, +col_int_key int NOT NULL, +col_varchar_nokey varchar(1) NOT NULL, +col_varchar_key varchar(1) NOT NULL, +PRIMARY KEY(pk), +KEY col_int_key(col_int_key), +KEY col_varchar_key(col_varchar_key, col_int_key) +) engine=innodb; +INSERT INTO t1 VALUES +(1,7,'a','a'), +(2,0,'v','v'), +(3,9,'c','c'), +(4,3,'m','m'), +(5,2,'a','a'), +(6,1,'d','d'), +(7,8,'y','y'), +(8,6,'t','t'), +(11,7,'a','x'), +(12,0,'v','v'), +(13,9,'c','c'), +(14,3,'m','m'), +(15,2,'a','x'), +(16,1,'d','d'), +(17,8,'y','y'), +(18,6,'t','u'); +CREATE TABLE t2 ( +pk int NOT NULL, +col_int_key int NOT NULL, +col_varchar_key varchar(1) NOT NULL, +PRIMARY KEY(pk), +KEY col_varchar_key(col_varchar_key, col_int_key) +) engine=innodb; +INSERT INTO t2(pk,col_int_key,col_varchar_key) VALUES +(8,7,'c'), +(11,4,'l'), +(12,7,'b'), +(13,0,'c'), +(14,2,'i'), +(15,9,'h'), +(16,4,'q'), +(17,1,'m'), +(18,9,'b'), +(19,2,'e'), +(20,1,'c'), +(21,7,'z'), +(22,4,'l'), +(23,7,'z'), +(24,0,'c'), +(25,2,'i'), +(26,9,'h'), +(27,4,'q'), +(28,0,'a'), +(29,1,'d'); +EXPLAIN SELECT outr.col_varchar_key AS x, outr.pk AS y +FROM t1 AS outr +WHERE outr.col_varchar_key IN (SELECT innr.col_varchar_key +FROM t2 AS innr +WHERE innr.col_varchar_key = 'a' OR innr.pk = 8) +AND outr.col_varchar_nokey < 't' +ORDER BY outr.col_varchar_key, outr.pk; +id select_type table type possible_keys key key_len ref rows Extra +1 PRIMARY innr index PRIMARY,col_varchar_key col_varchar_key 7 NULL 20 Using where; Using index; Using temporary; Using filesort; LooseScan +1 PRIMARY outr ref col_varchar_key col_varchar_key 3 test.innr.col_varchar_key 1 Using where +SELECT outr.col_varchar_key AS x, outr.pk AS y +FROM t1 AS outr +WHERE outr.col_varchar_key IN (SELECT innr.col_varchar_key +FROM t2 AS innr +WHERE innr.col_varchar_key = 'a' OR innr.pk = 8) +AND outr.col_varchar_nokey < 't' +ORDER BY outr.col_varchar_key, outr.pk; +x y +a 1 +a 5 +c 3 +c 13 +DROP TABLE t1, t2; +# End of bug#12603200 set optimizer_switch=default; set optimizer_join_cache_level=default; === modified file 'mysql-test/r/subquery_sj_loosescan_jcl7.result' --- a/mysql-test/r/subquery_sj_loosescan_jcl7.result 2011-06-20 15:47:50 +0000 +++ b/mysql-test/r/subquery_sj_loosescan_jcl7.result 2011-06-21 09:29:01 +0000 @@ -5567,5 +5567,86 @@ a ab DROP TABLE t1, t2, t3; # End of the test for bug#12640083. +# +# Bug#12603200 - Assert in QUICK_INDEX_MERGE_SELECT::need_sorted_output +# +CREATE TABLE t1 ( +pk int NOT NULL, +col_int_key int NOT NULL, +col_varchar_nokey varchar(1) NOT NULL, +col_varchar_key varchar(1) NOT NULL, +PRIMARY KEY(pk), +KEY col_int_key(col_int_key), +KEY col_varchar_key(col_varchar_key, col_int_key) +) engine=innodb; +INSERT INTO t1 VALUES +(1,7,'a','a'), +(2,0,'v','v'), +(3,9,'c','c'), +(4,3,'m','m'), +(5,2,'a','a'), +(6,1,'d','d'), +(7,8,'y','y'), +(8,6,'t','t'), +(11,7,'a','x'), +(12,0,'v','v'), +(13,9,'c','c'), +(14,3,'m','m'), +(15,2,'a','x'), +(16,1,'d','d'), +(17,8,'y','y'), +(18,6,'t','u'); +CREATE TABLE t2 ( +pk int NOT NULL, +col_int_key int NOT NULL, +col_varchar_key varchar(1) NOT NULL, +PRIMARY KEY(pk), +KEY col_varchar_key(col_varchar_key, col_int_key) +) engine=innodb; +INSERT INTO t2(pk,col_int_key,col_varchar_key) VALUES +(8,7,'c'), +(11,4,'l'), +(12,7,'b'), +(13,0,'c'), +(14,2,'i'), +(15,9,'h'), +(16,4,'q'), +(17,1,'m'), +(18,9,'b'), +(19,2,'e'), +(20,1,'c'), +(21,7,'z'), +(22,4,'l'), +(23,7,'z'), +(24,0,'c'), +(25,2,'i'), +(26,9,'h'), +(27,4,'q'), +(28,0,'a'), +(29,1,'d'); +EXPLAIN SELECT outr.col_varchar_key AS x, outr.pk AS y +FROM t1 AS outr +WHERE outr.col_varchar_key IN (SELECT innr.col_varchar_key +FROM t2 AS innr +WHERE innr.col_varchar_key = 'a' OR innr.pk = 8) +AND outr.col_varchar_nokey < 't' +ORDER BY outr.col_varchar_key, outr.pk; +id select_type table type possible_keys key key_len ref rows Extra +1 PRIMARY innr index PRIMARY,col_varchar_key col_varchar_key 7 NULL 20 Using where; Using index; Using temporary; Using filesort; LooseScan +1 PRIMARY outr ref col_varchar_key col_varchar_key 3 test.innr.col_varchar_key 1 Using where +SELECT outr.col_varchar_key AS x, outr.pk AS y +FROM t1 AS outr +WHERE outr.col_varchar_key IN (SELECT innr.col_varchar_key +FROM t2 AS innr +WHERE innr.col_varchar_key = 'a' OR innr.pk = 8) +AND outr.col_varchar_nokey < 't' +ORDER BY outr.col_varchar_key, outr.pk; +x y +a 1 +a 5 +c 3 +c 13 +DROP TABLE t1, t2; +# End of bug#12603200 set optimizer_switch=default; set optimizer_join_cache_level=default; === modified file 'mysql-test/r/subquery_sj_mat.result' --- a/mysql-test/r/subquery_sj_mat.result 2011-06-20 15:47:50 +0000 +++ b/mysql-test/r/subquery_sj_mat.result 2011-06-21 09:29:01 +0000 @@ -5563,4 +5563,85 @@ a ab DROP TABLE t1, t2, t3; # End of the test for bug#12640083. +# +# Bug#12603200 - Assert in QUICK_INDEX_MERGE_SELECT::need_sorted_output +# +CREATE TABLE t1 ( +pk int NOT NULL, +col_int_key int NOT NULL, +col_varchar_nokey varchar(1) NOT NULL, +col_varchar_key varchar(1) NOT NULL, +PRIMARY KEY(pk), +KEY col_int_key(col_int_key), +KEY col_varchar_key(col_varchar_key, col_int_key) +) engine=innodb; +INSERT INTO t1 VALUES +(1,7,'a','a'), +(2,0,'v','v'), +(3,9,'c','c'), +(4,3,'m','m'), +(5,2,'a','a'), +(6,1,'d','d'), +(7,8,'y','y'), +(8,6,'t','t'), +(11,7,'a','x'), +(12,0,'v','v'), +(13,9,'c','c'), +(14,3,'m','m'), +(15,2,'a','x'), +(16,1,'d','d'), +(17,8,'y','y'), +(18,6,'t','u'); +CREATE TABLE t2 ( +pk int NOT NULL, +col_int_key int NOT NULL, +col_varchar_key varchar(1) NOT NULL, +PRIMARY KEY(pk), +KEY col_varchar_key(col_varchar_key, col_int_key) +) engine=innodb; +INSERT INTO t2(pk,col_int_key,col_varchar_key) VALUES +(8,7,'c'), +(11,4,'l'), +(12,7,'b'), +(13,0,'c'), +(14,2,'i'), +(15,9,'h'), +(16,4,'q'), +(17,1,'m'), +(18,9,'b'), +(19,2,'e'), +(20,1,'c'), +(21,7,'z'), +(22,4,'l'), +(23,7,'z'), +(24,0,'c'), +(25,2,'i'), +(26,9,'h'), +(27,4,'q'), +(28,0,'a'), +(29,1,'d'); +EXPLAIN SELECT outr.col_varchar_key AS x, outr.pk AS y +FROM t1 AS outr +WHERE outr.col_varchar_key IN (SELECT innr.col_varchar_key +FROM t2 AS innr +WHERE innr.col_varchar_key = 'a' OR innr.pk = 8) +AND outr.col_varchar_nokey < 't' +ORDER BY outr.col_varchar_key, outr.pk; +id select_type table type possible_keys key key_len ref rows Extra +1 PRIMARY innr index_merge PRIMARY,col_varchar_key col_varchar_key,PRIMARY 3,4 NULL 2 Using sort_union(col_varchar_key,PRIMARY); Using where; Using temporary; Using filesort; Start temporary +1 PRIMARY outr ref col_varchar_key col_varchar_key 3 test.innr.col_varchar_key 1 Using where; End temporary +SELECT outr.col_varchar_key AS x, outr.pk AS y +FROM t1 AS outr +WHERE outr.col_varchar_key IN (SELECT innr.col_varchar_key +FROM t2 AS innr +WHERE innr.col_varchar_key = 'a' OR innr.pk = 8) +AND outr.col_varchar_nokey < 't' +ORDER BY outr.col_varchar_key, outr.pk; +x y +a 1 +a 5 +c 3 +c 13 +DROP TABLE t1, t2; +# End of bug#12603200 set optimizer_switch=default; === modified file 'mysql-test/r/subquery_sj_mat_jcl6.result' --- a/mysql-test/r/subquery_sj_mat_jcl6.result 2011-06-20 15:47:50 +0000 +++ b/mysql-test/r/subquery_sj_mat_jcl6.result 2011-06-21 09:29:01 +0000 @@ -5567,5 +5567,86 @@ a ab DROP TABLE t1, t2, t3; # End of the test for bug#12640083. +# +# Bug#12603200 - Assert in QUICK_INDEX_MERGE_SELECT::need_sorted_output +# +CREATE TABLE t1 ( +pk int NOT NULL, +col_int_key int NOT NULL, +col_varchar_nokey varchar(1) NOT NULL, +col_varchar_key varchar(1) NOT NULL, +PRIMARY KEY(pk), +KEY col_int_key(col_int_key), +KEY col_varchar_key(col_varchar_key, col_int_key) +) engine=innodb; +INSERT INTO t1 VALUES +(1,7,'a','a'), +(2,0,'v','v'), +(3,9,'c','c'), +(4,3,'m','m'), +(5,2,'a','a'), +(6,1,'d','d'), +(7,8,'y','y'), +(8,6,'t','t'), +(11,7,'a','x'), +(12,0,'v','v'), +(13,9,'c','c'), +(14,3,'m','m'), +(15,2,'a','x'), +(16,1,'d','d'), +(17,8,'y','y'), +(18,6,'t','u'); +CREATE TABLE t2 ( +pk int NOT NULL, +col_int_key int NOT NULL, +col_varchar_key varchar(1) NOT NULL, +PRIMARY KEY(pk), +KEY col_varchar_key(col_varchar_key, col_int_key) +) engine=innodb; +INSERT INTO t2(pk,col_int_key,col_varchar_key) VALUES +(8,7,'c'), +(11,4,'l'), +(12,7,'b'), +(13,0,'c'), +(14,2,'i'), +(15,9,'h'), +(16,4,'q'), +(17,1,'m'), +(18,9,'b'), +(19,2,'e'), +(20,1,'c'), +(21,7,'z'), +(22,4,'l'), +(23,7,'z'), +(24,0,'c'), +(25,2,'i'), +(26,9,'h'), +(27,4,'q'), +(28,0,'a'), +(29,1,'d'); +EXPLAIN SELECT outr.col_varchar_key AS x, outr.pk AS y +FROM t1 AS outr +WHERE outr.col_varchar_key IN (SELECT innr.col_varchar_key +FROM t2 AS innr +WHERE innr.col_varchar_key = 'a' OR innr.pk = 8) +AND outr.col_varchar_nokey < 't' +ORDER BY outr.col_varchar_key, outr.pk; +id select_type table type possible_keys key key_len ref rows Extra +1 PRIMARY innr index_merge PRIMARY,col_varchar_key col_varchar_key,PRIMARY 3,4 NULL 2 Using sort_union(col_varchar_key,PRIMARY); Using where; Using temporary; Using filesort; Start temporary +1 PRIMARY outr ref col_varchar_key col_varchar_key 3 test.innr.col_varchar_key 1 Using where; End temporary +SELECT outr.col_varchar_key AS x, outr.pk AS y +FROM t1 AS outr +WHERE outr.col_varchar_key IN (SELECT innr.col_varchar_key +FROM t2 AS innr +WHERE innr.col_varchar_key = 'a' OR innr.pk = 8) +AND outr.col_varchar_nokey < 't' +ORDER BY outr.col_varchar_key, outr.pk; +x y +a 1 +a 5 +c 3 +c 13 +DROP TABLE t1, t2; +# End of bug#12603200 set optimizer_switch=default; set optimizer_join_cache_level=default; === modified file 'mysql-test/r/subquery_sj_mat_jcl7.result' --- a/mysql-test/r/subquery_sj_mat_jcl7.result 2011-06-20 15:47:50 +0000 +++ b/mysql-test/r/subquery_sj_mat_jcl7.result 2011-06-21 09:29:01 +0000 @@ -5567,5 +5567,86 @@ a ab DROP TABLE t1, t2, t3; # End of the test for bug#12640083. +# +# Bug#12603200 - Assert in QUICK_INDEX_MERGE_SELECT::need_sorted_output +# +CREATE TABLE t1 ( +pk int NOT NULL, +col_int_key int NOT NULL, +col_varchar_nokey varchar(1) NOT NULL, +col_varchar_key varchar(1) NOT NULL, +PRIMARY KEY(pk), +KEY col_int_key(col_int_key), +KEY col_varchar_key(col_varchar_key, col_int_key) +) engine=innodb; +INSERT INTO t1 VALUES +(1,7,'a','a'), +(2,0,'v','v'), +(3,9,'c','c'), +(4,3,'m','m'), +(5,2,'a','a'), +(6,1,'d','d'), +(7,8,'y','y'), +(8,6,'t','t'), +(11,7,'a','x'), +(12,0,'v','v'), +(13,9,'c','c'), +(14,3,'m','m'), +(15,2,'a','x'), +(16,1,'d','d'), +(17,8,'y','y'), +(18,6,'t','u'); +CREATE TABLE t2 ( +pk int NOT NULL, +col_int_key int NOT NULL, +col_varchar_key varchar(1) NOT NULL, +PRIMARY KEY(pk), +KEY col_varchar_key(col_varchar_key, col_int_key) +) engine=innodb; +INSERT INTO t2(pk,col_int_key,col_varchar_key) VALUES +(8,7,'c'), +(11,4,'l'), +(12,7,'b'), +(13,0,'c'), +(14,2,'i'), +(15,9,'h'), +(16,4,'q'), +(17,1,'m'), +(18,9,'b'), +(19,2,'e'), +(20,1,'c'), +(21,7,'z'), +(22,4,'l'), +(23,7,'z'), +(24,0,'c'), +(25,2,'i'), +(26,9,'h'), +(27,4,'q'), +(28,0,'a'), +(29,1,'d'); +EXPLAIN SELECT outr.col_varchar_key AS x, outr.pk AS y +FROM t1 AS outr +WHERE outr.col_varchar_key IN (SELECT innr.col_varchar_key +FROM t2 AS innr +WHERE innr.col_varchar_key = 'a' OR innr.pk = 8) +AND outr.col_varchar_nokey < 't' +ORDER BY outr.col_varchar_key, outr.pk; +id select_type table type possible_keys key key_len ref rows Extra +1 PRIMARY innr index_merge PRIMARY,col_varchar_key col_varchar_key,PRIMARY 3,4 NULL 2 Using sort_union(col_varchar_key,PRIMARY); Using where; Using temporary; Using filesort; Start temporary +1 PRIMARY outr ref col_varchar_key col_varchar_key 3 test.innr.col_varchar_key 1 Using where; End temporary +SELECT outr.col_varchar_key AS x, outr.pk AS y +FROM t1 AS outr +WHERE outr.col_varchar_key IN (SELECT innr.col_varchar_key +FROM t2 AS innr +WHERE innr.col_varchar_key = 'a' OR innr.pk = 8) +AND outr.col_varchar_nokey < 't' +ORDER BY outr.col_varchar_key, outr.pk; +x y +a 1 +a 5 +c 3 +c 13 +DROP TABLE t1, t2; +# End of bug#12603200 set optimizer_switch=default; set optimizer_join_cache_level=default; === modified file 'mysql-test/r/subquery_sj_mat_nosj.result' --- a/mysql-test/r/subquery_sj_mat_nosj.result 2011-06-20 15:47:50 +0000 +++ b/mysql-test/r/subquery_sj_mat_nosj.result 2011-06-21 09:29:01 +0000 @@ -5785,4 +5785,85 @@ a ab DROP TABLE t1, t2, t3; # End of the test for bug#12640083. +# +# Bug#12603200 - Assert in QUICK_INDEX_MERGE_SELECT::need_sorted_output +# +CREATE TABLE t1 ( +pk int NOT NULL, +col_int_key int NOT NULL, +col_varchar_nokey varchar(1) NOT NULL, +col_varchar_key varchar(1) NOT NULL, +PRIMARY KEY(pk), +KEY col_int_key(col_int_key), +KEY col_varchar_key(col_varchar_key, col_int_key) +) engine=innodb; +INSERT INTO t1 VALUES +(1,7,'a','a'), +(2,0,'v','v'), +(3,9,'c','c'), +(4,3,'m','m'), +(5,2,'a','a'), +(6,1,'d','d'), +(7,8,'y','y'), +(8,6,'t','t'), +(11,7,'a','x'), +(12,0,'v','v'), +(13,9,'c','c'), +(14,3,'m','m'), +(15,2,'a','x'), +(16,1,'d','d'), +(17,8,'y','y'), +(18,6,'t','u'); +CREATE TABLE t2 ( +pk int NOT NULL, +col_int_key int NOT NULL, +col_varchar_key varchar(1) NOT NULL, +PRIMARY KEY(pk), +KEY col_varchar_key(col_varchar_key, col_int_key) +) engine=innodb; +INSERT INTO t2(pk,col_int_key,col_varchar_key) VALUES +(8,7,'c'), +(11,4,'l'), +(12,7,'b'), +(13,0,'c'), +(14,2,'i'), +(15,9,'h'), +(16,4,'q'), +(17,1,'m'), +(18,9,'b'), +(19,2,'e'), +(20,1,'c'), +(21,7,'z'), +(22,4,'l'), +(23,7,'z'), +(24,0,'c'), +(25,2,'i'), +(26,9,'h'), +(27,4,'q'), +(28,0,'a'), +(29,1,'d'); +EXPLAIN SELECT outr.col_varchar_key AS x, outr.pk AS y +FROM t1 AS outr +WHERE outr.col_varchar_key IN (SELECT innr.col_varchar_key +FROM t2 AS innr +WHERE innr.col_varchar_key = 'a' OR innr.pk = 8) +AND outr.col_varchar_nokey < 't' +ORDER BY outr.col_varchar_key, outr.pk; +id select_type table type possible_keys key key_len ref rows Extra +1 PRIMARY outr ALL NULL NULL NULL NULL 16 Using where; Using filesort +2 SUBQUERY innr index_merge PRIMARY,col_varchar_key col_varchar_key,PRIMARY 3,4 NULL 2 Using sort_union(col_varchar_key,PRIMARY); Using where +SELECT outr.col_varchar_key AS x, outr.pk AS y +FROM t1 AS outr +WHERE outr.col_varchar_key IN (SELECT innr.col_varchar_key +FROM t2 AS innr +WHERE innr.col_varchar_key = 'a' OR innr.pk = 8) +AND outr.col_varchar_nokey < 't' +ORDER BY outr.col_varchar_key, outr.pk; +x y +a 1 +a 5 +c 3 +c 13 +DROP TABLE t1, t2; +# End of bug#12603200 set optimizer_switch=default; === modified file 'mysql-test/r/subquery_sj_none.result' --- a/mysql-test/r/subquery_sj_none.result 2011-06-20 15:47:50 +0000 +++ b/mysql-test/r/subquery_sj_none.result 2011-06-21 09:29:01 +0000 @@ -5708,4 +5708,85 @@ a ab DROP TABLE t1, t2, t3; # End of the test for bug#12640083. +# +# Bug#12603200 - Assert in QUICK_INDEX_MERGE_SELECT::need_sorted_output +# +CREATE TABLE t1 ( +pk int NOT NULL, +col_int_key int NOT NULL, +col_varchar_nokey varchar(1) NOT NULL, +col_varchar_key varchar(1) NOT NULL, +PRIMARY KEY(pk), +KEY col_int_key(col_int_key), +KEY col_varchar_key(col_varchar_key, col_int_key) +) engine=innodb; +INSERT INTO t1 VALUES +(1,7,'a','a'), +(2,0,'v','v'), +(3,9,'c','c'), +(4,3,'m','m'), +(5,2,'a','a'), +(6,1,'d','d'), +(7,8,'y','y'), +(8,6,'t','t'), +(11,7,'a','x'), +(12,0,'v','v'), +(13,9,'c','c'), +(14,3,'m','m'), +(15,2,'a','x'), +(16,1,'d','d'), +(17,8,'y','y'), +(18,6,'t','u'); +CREATE TABLE t2 ( +pk int NOT NULL, +col_int_key int NOT NULL, +col_varchar_key varchar(1) NOT NULL, +PRIMARY KEY(pk), +KEY col_varchar_key(col_varchar_key, col_int_key) +) engine=innodb; +INSERT INTO t2(pk,col_int_key,col_varchar_key) VALUES +(8,7,'c'), +(11,4,'l'), +(12,7,'b'), +(13,0,'c'), +(14,2,'i'), +(15,9,'h'), +(16,4,'q'), +(17,1,'m'), +(18,9,'b'), +(19,2,'e'), +(20,1,'c'), +(21,7,'z'), +(22,4,'l'), +(23,7,'z'), +(24,0,'c'), +(25,2,'i'), +(26,9,'h'), +(27,4,'q'), +(28,0,'a'), +(29,1,'d'); +EXPLAIN SELECT outr.col_varchar_key AS x, outr.pk AS y +FROM t1 AS outr +WHERE outr.col_varchar_key IN (SELECT innr.col_varchar_key +FROM t2 AS innr +WHERE innr.col_varchar_key = 'a' OR innr.pk = 8) +AND outr.col_varchar_nokey < 't' +ORDER BY outr.col_varchar_key, outr.pk; +id select_type table type possible_keys key key_len ref rows Extra +1 PRIMARY outr ALL NULL NULL NULL NULL 16 Using where; Using filesort +2 DEPENDENT SUBQUERY innr index_subquery PRIMARY,col_varchar_key col_varchar_key 3 func 1 Using index; Using where +SELECT outr.col_varchar_key AS x, outr.pk AS y +FROM t1 AS outr +WHERE outr.col_varchar_key IN (SELECT innr.col_varchar_key +FROM t2 AS innr +WHERE innr.col_varchar_key = 'a' OR innr.pk = 8) +AND outr.col_varchar_nokey < 't' +ORDER BY outr.col_varchar_key, outr.pk; +x y +a 1 +a 5 +c 3 +c 13 +DROP TABLE t1, t2; +# End of bug#12603200 set optimizer_switch=default; === modified file 'mysql-test/r/subquery_sj_none_jcl6.result' --- a/mysql-test/r/subquery_sj_none_jcl6.result 2011-06-20 15:47:50 +0000 +++ b/mysql-test/r/subquery_sj_none_jcl6.result 2011-06-21 09:29:01 +0000 @@ -5712,5 +5712,86 @@ a ab DROP TABLE t1, t2, t3; # End of the test for bug#12640083. +# +# Bug#12603200 - Assert in QUICK_INDEX_MERGE_SELECT::need_sorted_output +# +CREATE TABLE t1 ( +pk int NOT NULL, +col_int_key int NOT NULL, +col_varchar_nokey varchar(1) NOT NULL, +col_varchar_key varchar(1) NOT NULL, +PRIMARY KEY(pk), +KEY col_int_key(col_int_key), +KEY col_varchar_key(col_varchar_key, col_int_key) +) engine=innodb; +INSERT INTO t1 VALUES +(1,7,'a','a'), +(2,0,'v','v'), +(3,9,'c','c'), +(4,3,'m','m'), +(5,2,'a','a'), +(6,1,'d','d'), +(7,8,'y','y'), +(8,6,'t','t'), +(11,7,'a','x'), +(12,0,'v','v'), +(13,9,'c','c'), +(14,3,'m','m'), +(15,2,'a','x'), +(16,1,'d','d'), +(17,8,'y','y'), +(18,6,'t','u'); +CREATE TABLE t2 ( +pk int NOT NULL, +col_int_key int NOT NULL, +col_varchar_key varchar(1) NOT NULL, +PRIMARY KEY(pk), +KEY col_varchar_key(col_varchar_key, col_int_key) +) engine=innodb; +INSERT INTO t2(pk,col_int_key,col_varchar_key) VALUES +(8,7,'c'), +(11,4,'l'), +(12,7,'b'), +(13,0,'c'), +(14,2,'i'), +(15,9,'h'), +(16,4,'q'), +(17,1,'m'), +(18,9,'b'), +(19,2,'e'), +(20,1,'c'), +(21,7,'z'), +(22,4,'l'), +(23,7,'z'), +(24,0,'c'), +(25,2,'i'), +(26,9,'h'), +(27,4,'q'), +(28,0,'a'), +(29,1,'d'); +EXPLAIN SELECT outr.col_varchar_key AS x, outr.pk AS y +FROM t1 AS outr +WHERE outr.col_varchar_key IN (SELECT innr.col_varchar_key +FROM t2 AS innr +WHERE innr.col_varchar_key = 'a' OR innr.pk = 8) +AND outr.col_varchar_nokey < 't' +ORDER BY outr.col_varchar_key, outr.pk; +id select_type table type possible_keys key key_len ref rows Extra +1 PRIMARY outr ALL NULL NULL NULL NULL 16 Using where; Using filesort +2 DEPENDENT SUBQUERY innr index_subquery PRIMARY,col_varchar_key col_varchar_key 3 func 1 Using index; Using where +SELECT outr.col_varchar_key AS x, outr.pk AS y +FROM t1 AS outr +WHERE outr.col_varchar_key IN (SELECT innr.col_varchar_key +FROM t2 AS innr +WHERE innr.col_varchar_key = 'a' OR innr.pk = 8) +AND outr.col_varchar_nokey < 't' +ORDER BY outr.col_varchar_key, outr.pk; +x y +a 1 +a 5 +c 3 +c 13 +DROP TABLE t1, t2; +# End of bug#12603200 set optimizer_switch=default; set optimizer_join_cache_level=default; === modified file 'mysql-test/r/subquery_sj_none_jcl7.result' --- a/mysql-test/r/subquery_sj_none_jcl7.result 2011-06-20 15:47:50 +0000 +++ b/mysql-test/r/subquery_sj_none_jcl7.result 2011-06-21 09:29:01 +0000 @@ -5712,5 +5712,86 @@ a ab DROP TABLE t1, t2, t3; # End of the test for bug#12640083. +# +# Bug#12603200 - Assert in QUICK_INDEX_MERGE_SELECT::need_sorted_output +# +CREATE TABLE t1 ( +pk int NOT NULL, +col_int_key int NOT NULL, +col_varchar_nokey varchar(1) NOT NULL, +col_varchar_key varchar(1) NOT NULL, +PRIMARY KEY(pk), +KEY col_int_key(col_int_key), +KEY col_varchar_key(col_varchar_key, col_int_key) +) engine=innodb; +INSERT INTO t1 VALUES +(1,7,'a','a'), +(2,0,'v','v'), +(3,9,'c','c'), +(4,3,'m','m'), +(5,2,'a','a'), +(6,1,'d','d'), +(7,8,'y','y'), +(8,6,'t','t'), +(11,7,'a','x'), +(12,0,'v','v'), +(13,9,'c','c'), +(14,3,'m','m'), +(15,2,'a','x'), +(16,1,'d','d'), +(17,8,'y','y'), +(18,6,'t','u'); +CREATE TABLE t2 ( +pk int NOT NULL, +col_int_key int NOT NULL, +col_varchar_key varchar(1) NOT NULL, +PRIMARY KEY(pk), +KEY col_varchar_key(col_varchar_key, col_int_key) +) engine=innodb; +INSERT INTO t2(pk,col_int_key,col_varchar_key) VALUES +(8,7,'c'), +(11,4,'l'), +(12,7,'b'), +(13,0,'c'), +(14,2,'i'), +(15,9,'h'), +(16,4,'q'), +(17,1,'m'), +(18,9,'b'), +(19,2,'e'), +(20,1,'c'), +(21,7,'z'), +(22,4,'l'), +(23,7,'z'), +(24,0,'c'), +(25,2,'i'), +(26,9,'h'), +(27,4,'q'), +(28,0,'a'), +(29,1,'d'); +EXPLAIN SELECT outr.col_varchar_key AS x, outr.pk AS y +FROM t1 AS outr +WHERE outr.col_varchar_key IN (SELECT innr.col_varchar_key +FROM t2 AS innr +WHERE innr.col_varchar_key = 'a' OR innr.pk = 8) +AND outr.col_varchar_nokey < 't' +ORDER BY outr.col_varchar_key, outr.pk; +id select_type table type possible_keys key key_len ref rows Extra +1 PRIMARY outr ALL NULL NULL NULL NULL 16 Using where; Using filesort +2 DEPENDENT SUBQUERY innr index_subquery PRIMARY,col_varchar_key col_varchar_key 3 func 1 Using index; Using where +SELECT outr.col_varchar_key AS x, outr.pk AS y +FROM t1 AS outr +WHERE outr.col_varchar_key IN (SELECT innr.col_varchar_key +FROM t2 AS innr +WHERE innr.col_varchar_key = 'a' OR innr.pk = 8) +AND outr.col_varchar_nokey < 't' +ORDER BY outr.col_varchar_key, outr.pk; +x y +a 1 +a 5 +c 3 +c 13 +DROP TABLE t1, t2; +# End of bug#12603200 set optimizer_switch=default; set optimizer_join_cache_level=default; === modified file 'sql/sql_select.cc' --- a/sql/sql_select.cc 2011-06-20 15:47:50 +0000 +++ b/sql/sql_select.cc 2011-06-21 09:29:01 +0000 @@ -1535,17 +1535,21 @@ bool setup_semijoin_dups_elimination(JOI tab->loosescan_match_tab= last_sj_tab; /* For LooseScan, duplicate elimination is based on rows being sorted - on key. We need to make sure that range select keep the sorted index + on key. We need to make sure that range select keeps the sorted index order. (When using MRR it may not.) Note: need_sorted_output() implementations for range select classes that do not support sorted output, will trigger an assert. This - should happen since LooseScan strategy will not be picked if sorted - output is not supported. + should not happen since LooseScan strategy is only picked if sorted + output is supported. */ if (tab->select && tab->select->quick) - tab->select->quick->need_sorted_output(true); - + { + if (tab->select->quick->index == pos->loosescan_key) + tab->select->quick->need_sorted_output(true); + else + tab->select->set_quick(NULL); + } /* Calculate key length */ keylen= 0; keyno= pos->loosescan_key; No bundle (reason: useless for push emails).