From: Ole John Aske Date: November 19 2010 10:09am Subject: bzr commit into mysql-5.1 branch (ole.john.aske:3474) Bug#58134 List-Archive: http://lists.mysql.com/commits/124392 X-Bug: 58134 Message-Id: <20101119100919.AFA5F222@fimafeng09.norway.sun.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="===============7352173073885274659==" --===============7352173073885274659== MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Content-Disposition: inline #At file:///net/fimafeng09/export/home/tmp/oleja/mysql/mysql-5.1/ based on revid:ole.john.aske@stripped 3474 Ole John Aske 2010-11-19 Fix for bug#58134, Incorrectly condition pushdown inside subquery to NDB engine. An incorrect 'table_map' containing both the table itself, and possible any outer-refs if this was the last table in the subquery, was presented to make_cond_for_table(). As a pushed condition is only able to refer column from the table the condition is pushed to, nothing else than columns from the table itself (tab->table->map) may be refered in the pushed condition constructed by 'push_cond= make_cond_for_table()'. Also fix a minor 'copy and paste' bug in a comment inside make_cond_for_table(). modified: mysql-test/suite/ndb/r/ndb_condition_pushdown.result mysql-test/suite/ndb/t/ndb_condition_pushdown.test sql/sql_select.cc === modified file 'mysql-test/suite/ndb/r/ndb_condition_pushdown.result' --- a/mysql-test/suite/ndb/r/ndb_condition_pushdown.result 2008-01-31 13:47:50 +0000 +++ b/mysql-test/suite/ndb/r/ndb_condition_pushdown.result 2010-11-19 10:09:13 +0000 @@ -1916,5 +1916,37 @@ a b d 50 5 21845 Warnings: Warning 4294 Scan filter is too large, discarded +set engine_condition_pushdown = on; +create table t (pk int, i int) engine = ndb; +insert into t values (1,3), (3,6), (6,9), (9,1); +create table subq (pk int, i int) engine = ndb; +insert into subq values (1,3), (3,6), (6,9), (9,1); +explain extended +select * from t where exists +(select * from t as subq where subq.i=3 and t.i=3); +id select_type table type possible_keys key key_len ref rows filtered Extra +1 PRIMARY t ALL NULL NULL NULL NULL 4 50.00 Using where +2 DEPENDENT SUBQUERY subq ALL NULL NULL NULL NULL 4 100.00 Using where with pushed condition: (`test`.`subq`.`i` = 3) +Warnings: +Note 1276 Field or reference 'test.t.i' of SELECT #2 was resolved in SELECT #1 +Note 1003 select `test`.`t`.`pk` AS `pk`,`test`.`t`.`i` AS `i` from `test`.`t` where exists(select 1 from `test`.`t` `subq` where ((`test`.`subq`.`i` = 3) and (`test`.`t`.`i` = 3))) +explain extended +select * from t where exists +(select * from subq where subq.i=3 and t.i=3); +id select_type table type possible_keys key key_len ref rows filtered Extra +1 PRIMARY t ALL NULL NULL NULL NULL 4 100.00 Using where +2 DEPENDENT SUBQUERY subq ALL NULL NULL NULL NULL 4 50.00 Using where with pushed condition: (`test`.`subq`.`i` = 3) +Warnings: +Note 1276 Field or reference 'test.t.i' of SELECT #2 was resolved in SELECT #1 +Note 1003 select `test`.`t`.`pk` AS `pk`,`test`.`t`.`i` AS `i` from `test`.`t` where exists(select 1 from `test`.`subq` where ((`test`.`subq`.`i` = 3) and (`test`.`t`.`i` = 3))) +select * from t where exists +(select * from t as subq where subq.i=3 and t.i=3); +pk i +1 3 +select * from t where exists +(select * from subq where subq.i=3 and t.i=3); +pk i +1 3 +drop table t,subq; set engine_condition_pushdown = @old_ecpd; DROP TABLE t1,t2,t3,t4,t5; === modified file 'mysql-test/suite/ndb/t/ndb_condition_pushdown.test' --- a/mysql-test/suite/ndb/t/ndb_condition_pushdown.test 2008-01-31 13:47:50 +0000 +++ b/mysql-test/suite/ndb/t/ndb_condition_pushdown.test 2010-11-19 10:09:13 +0000 @@ -2050,5 +2050,31 @@ select a,b,d from t1 order by b; --enable_query_log +# Bug#58134: Incorrectly condition pushdown inside subquery to NDB engine +set engine_condition_pushdown = on; + +create table t (pk int, i int) engine = ndb; +insert into t values (1,3), (3,6), (6,9), (9,1); +create table subq (pk int, i int) engine = ndb; +insert into subq values (1,3), (3,6), (6,9), (9,1); + +# 'Explain extended' to verify that only 'subq.i=3' is pushed +explain extended +select * from t where exists + (select * from t as subq where subq.i=3 and t.i=3); +explain extended + select * from t where exists + (select * from subq where subq.i=3 and t.i=3); + +--sorted_result +select * from t where exists + (select * from t as subq where subq.i=3 and t.i=3); +--sorted_result +select * from t where exists + (select * from subq where subq.i=3 and t.i=3); + +drop table t,subq; + + set engine_condition_pushdown = @old_ecpd; DROP TABLE t1,t2,t3,t4,t5; === modified file 'sql/sql_select.cc' --- a/sql/sql_select.cc 2010-10-20 13:22:47 +0000 +++ b/sql/sql_select.cc 2010-11-19 10:09:13 +0000 @@ -6371,7 +6371,7 @@ make_join_select(JOIN *join,SQL_SELECT * if (thd->variables.engine_condition_pushdown) { COND *push_cond= - make_cond_for_table(tmp, current_map, current_map); + make_cond_for_table(tmp, tab->table->map, tab->table->map); if (push_cond) { /* Push condition to handler */ @@ -12857,7 +12857,7 @@ make_cond_for_table(COND *cond, table_ma new_cond->argument_list()->push_back(fix); } /* - Item_cond_and do not need fix_fields for execution, its parameters + Item_cond_or do not need fix_fields for execution, its parameters are fixed or do not need fix_fields, too */ new_cond->quick_fix_field(); --===============7352173073885274659== MIME-Version: 1.0 Content-Type: text/bzr-bundle; charset="us-ascii"; name="bzr/ole.john.aske@stripped" Content-Transfer-Encoding: 7bit Content-Disposition: inline # Bazaar merge directive format 2 (Bazaar 0.90) # revision_id: ole.john.aske@stripped\ # r7tzb15bdquf3q7f # target_branch: file:///net/fimafeng09/export/home/tmp/oleja/mysql\ # /mysql-5.1/ # testament_sha1: da705d4f02520acf48b6a6345f1f27d007fae578 # timestamp: 2010-11-19 11:09:19 +0100 # base_revision_id: ole.john.aske@stripped\ # nbqqrw4mw1v30oop # # Begin bundle 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 --===============7352173073885274659==--