From: Martin Hansson Date: February 15 2011 10:30am Subject: bzr commit into mysql-5.1 branch (martin.hansson:3591) List-Archive: http://lists.mysql.com/commits/131291 MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="===============0695421336==" --===============0695421336== MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Content-Disposition: inline #At file:///data0/martin/bzrroot/bug58690/5.1/ based on revid:georgi.kodinov@stripped 3591 Martin Hansson 2011-02-15 Bug 11765699 - 58690: !TABLE || (!TABLE->READ_SET || BITMAP_IS_SET(TABLE->READ_SET, FIELD_INDEX The WHERE condition in a query block may be replaced with a different expression tree if the top expression is optimized away. Subquery "engines" were not aware of this, however, and failed to update the WHERE in the subquery expression to the new condition. This caused problems in filesort, as it processes nested query block expressions and expects to find a valid condition. Fixed by making the "engine" update the pointer after optimizing the query block. modified: mysql-test/r/subselect_innodb.result mysql-test/t/subselect_innodb.test sql/item_subselect.cc sql/item_subselect.h sql/sql_lex.h === modified file 'mysql-test/r/subselect_innodb.result' --- a/mysql-test/r/subselect_innodb.result 2006-01-26 16:54:34 +0000 +++ b/mysql-test/r/subselect_innodb.result 2011-02-15 10:30:06 +0000 @@ -245,3 +245,21 @@ x NULL drop procedure p1; drop tables t1,t2,t3; +# +# Bug 11765699 - 58690: !TABLE || (!TABLE->READ_SET || +# BITMAP_IS_SET(TABLE->READ_SET, FIELD_INDEX +# +CREATE TABLE t1( a INT ); +INSERT INTO t1 VALUES (0), (1); +CREATE TABLE t2( b TEXT, c INT, PRIMARY KEY (b( 1 )) ) ENGINE = INNODB; +INSERT INTO t2 VALUES ('a', ''), ('b', ''); +Warnings: +Warning 1366 Incorrect integer value: '' for column 'c' at row 1 +Warning 1366 Incorrect integer value: '' for column 'c' at row 2 +SELECT 1 FROM t1 WHERE a = +(SELECT 1 FROM t2 WHERE b = +(SELECT 1 FROM t1 t11 WHERE c = 1 OR t1.a = 1 AND 1 = 2) +GROUP BY b +); +1 +DROP TABLE t1, t2; === modified file 'mysql-test/t/subselect_innodb.test' --- a/mysql-test/t/subselect_innodb.test 2006-01-26 16:54:34 +0000 +++ b/mysql-test/t/subselect_innodb.test 2011-02-15 10:30:06 +0000 @@ -238,3 +238,22 @@ call p1(); call p1(); drop procedure p1; drop tables t1,t2,t3; +--echo # +--echo # Bug 11765699 - 58690: !TABLE || (!TABLE->READ_SET || +--echo # BITMAP_IS_SET(TABLE->READ_SET, FIELD_INDEX +--echo # +--source include/have_innodb.inc + +CREATE TABLE t1( a INT ); +INSERT INTO t1 VALUES (0), (1); + +CREATE TABLE t2( b TEXT, c INT, PRIMARY KEY (b( 1 )) ) ENGINE = INNODB; +INSERT INTO t2 VALUES ('a', ''), ('b', ''); + +SELECT 1 FROM t1 WHERE a = + (SELECT 1 FROM t2 WHERE b = + (SELECT 1 FROM t1 t11 WHERE c = 1 OR t1.a = 1 AND 1 = 2) + GROUP BY b + ); + +DROP TABLE t1, t2; === modified file 'sql/item_subselect.cc' --- a/sql/item_subselect.cc 2010-12-28 23:47:05 +0000 +++ b/sql/item_subselect.cc 2011-02-15 10:30:06 +0000 @@ -1893,6 +1893,9 @@ int subselect_single_select_engine::exec thd->lex->current_select= save_select; DBUG_RETURN(join->error ? join->error : 1); } + /* The WHERE condition may have been replaced during JOIN::optimize */ + item->get_unit()->first_select()->where = join->conds; + if (!select_lex->uncacheable && thd->lex->describe && !(join->select_options & SELECT_DESCRIBE)) { === modified file 'sql/item_subselect.h' --- a/sql/item_subselect.h 2010-12-14 09:33:03 +0000 +++ b/sql/item_subselect.h 2011-02-15 10:30:06 +0000 @@ -68,6 +68,8 @@ public: Item_subselect(); + const st_select_lex_unit *get_unit() const { return unit; } + virtual subs_type substype() { return UNKNOWN_SUBS; } /* === modified file 'sql/sql_lex.h' --- a/sql/sql_lex.h 2011-01-26 07:32:41 +0000 +++ b/sql/sql_lex.h 2011-02-15 10:30:06 +0000 @@ -533,7 +533,7 @@ public: void init_query(); st_select_lex_unit* master_unit(); st_select_lex* outer_select(); - st_select_lex* first_select() + st_select_lex* first_select() const { return my_reinterpret_cast(st_select_lex*)(slave); } --===============0695421336== MIME-Version: 1.0 Content-Type: text/bzr-bundle; charset="us-ascii"; name="bzr/martin.hansson@stripped" Content-Transfer-Encoding: 7bit Content-Disposition: inline # Bazaar merge directive format 2 (Bazaar 0.90) # revision_id: martin.hansson@stripped\ # 6t6nyxnc5b4g5y3u # target_branch: file:///data0/martin/bzrroot/bug58690/5.1/ # testament_sha1: 8c6fbfdc2596adf5491c74875c87a01c9160b307 # timestamp: 2011-02-15 11:30:11 +0100 # base_revision_id: georgi.kodinov@stripped\ # 9n20d3h8s4hug4jd # # Begin bundle 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 VnMo0/UTJf/i7kinChIWoaDtwA== --===============0695421336==--