From: Sergey Glukhov Date: February 7 2011 12:43pm Subject: bzr commit into mysql-5.1 branch (sergey.glukhov:3580) Bug#59387 List-Archive: http://lists.mysql.com/commits/130566 X-Bug: 59387 Message-Id: <201102071242.p17AQxnd026081@acsinet15.oracle.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="===============2213391528976217719==" --===============2213391528976217719== MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Content-Disposition: inline #At file:///home/gluh/MySQL/mysql-5.1/ based on revid:ole.john.aske@stripped 3580 Sergey Glukhov 2011-02-07 Bug#59387 Failing assertion: cursor->pos_state == 1997660512 (BTR_PCUR_IS_POSITIONED) The crash happened due to wrong calculation of key length during creation of reference for sort order index. The problem is that keyuse->used_tables has OUTER_REF_TABLE_BIT enabled and it breaks correct key length calculation. @ mysql-test/suite/innodb/r/innodb_mysql.result test case @ mysql-test/suite/innodb/t/innodb_mysql.test test case @ sql/sql_select.cc The crash happened due to wrong calculation of key length during creation of reference for sort order index. The problem is that keyuse->used_tables has OUTER_REF_TABLE_BIT enabled and it breaks correct key length calculation. modified: mysql-test/suite/innodb/r/innodb_mysql.result mysql-test/suite/innodb/t/innodb_mysql.test sql/sql_select.cc === modified file 'mysql-test/suite/innodb/r/innodb_mysql.result' --- a/mysql-test/suite/innodb/r/innodb_mysql.result 2010-11-23 10:18:47 +0000 +++ b/mysql-test/suite/innodb/r/innodb_mysql.result 2011-02-07 12:43:21 +0000 @@ -2639,6 +2639,23 @@ COUNT(*) 1537 SET SESSION sort_buffer_size = DEFAULT; DROP TABLE t1; +# +# Bug#59387 Failing assertion: cursor->pos_state == 1997660512 (BTR_PCUR_IS_POSITIONED) +# +CREATE TABLE t1 (a INT) ENGINE=INNODB; +INSERT INTO t1 VALUES (0); +CREATE TABLE t2 (d BINARY(2), PRIMARY KEY (d(1)), UNIQUE KEY (d)) ENGINE=INNODB; +SELECT 1 FROM t1 WHERE NOT EXISTS +(SELECT 1 FROM t2 WHERE d = (SELECT d FROM t2 WHERE a >= 1) ORDER BY d); +1 +1 +EXPLAIN SELECT 1 FROM t1 WHERE NOT EXISTS +(SELECT 1 FROM t2 WHERE d = (SELECT d FROM t2 WHERE a >= 1) ORDER BY d); +id select_type table type possible_keys key key_len ref rows Extra +1 PRIMARY t1 ALL NULL NULL NULL NULL 1 Using where +2 DEPENDENT SUBQUERY t2 eq_ref PRIMARY,d d 2 func 1 Using where +3 DEPENDENT SUBQUERY t2 index NULL d 2 NULL 1 Using where; Using index +DROP TABLE t1, t2; End of 5.1 tests # # Test for bug #39932 "create table fails if column for FK is in different === modified file 'mysql-test/suite/innodb/t/innodb_mysql.test' --- a/mysql-test/suite/innodb/t/innodb_mysql.test 2010-12-20 11:58:33 +0000 +++ b/mysql-test/suite/innodb/t/innodb_mysql.test 2011-02-07 12:43:21 +0000 @@ -868,6 +868,22 @@ SET SESSION sort_buffer_size = DEFAULT; DROP TABLE t1; +--echo # +--echo # Bug#59387 Failing assertion: cursor->pos_state == 1997660512 (BTR_PCUR_IS_POSITIONED) +--echo # + +CREATE TABLE t1 (a INT) ENGINE=INNODB; +INSERT INTO t1 VALUES (0); +CREATE TABLE t2 (d BINARY(2), PRIMARY KEY (d(1)), UNIQUE KEY (d)) ENGINE=INNODB; + +SELECT 1 FROM t1 WHERE NOT EXISTS +(SELECT 1 FROM t2 WHERE d = (SELECT d FROM t2 WHERE a >= 1) ORDER BY d); + +EXPLAIN SELECT 1 FROM t1 WHERE NOT EXISTS +(SELECT 1 FROM t2 WHERE d = (SELECT d FROM t2 WHERE a >= 1) ORDER BY d); + +DROP TABLE t1, t2; + --echo End of 5.1 tests === modified file 'sql/sql_select.cc' --- a/sql/sql_select.cc 2011-02-07 09:36:21 +0000 +++ b/sql/sql_select.cc 2011-02-07 12:43:21 +0000 @@ -5763,7 +5763,7 @@ static bool create_ref_for_key(JOIN *joi */ do { - if (!(~used_tables & keyuse->used_tables)) + if (!(~used_tables & (keyuse->used_tables & ~OUTER_REF_TABLE_BIT))) { if (keyparts == keyuse->keypart && !(found_part_ref_or_null & keyuse->optimize)) @@ -5816,7 +5816,7 @@ static bool create_ref_for_key(JOIN *joi for (i=0 ; i < keyparts ; keyuse++,i++) { while (keyuse->keypart != i || - ((~used_tables) & keyuse->used_tables)) + ((~used_tables) & (keyuse->used_tables & ~OUTER_REF_TABLE_BIT))) keyuse++; /* Skip other parts */ uint maybe_null= test(keyinfo->key_part[i].null_bit); --===============2213391528976217719== MIME-Version: 1.0 Content-Type: text/bzr-bundle; charset="us-ascii"; name="bzr/sergey.glukhov@stripped" Content-Transfer-Encoding: 7bit Content-Disposition: inline # Bazaar merge directive format 2 (Bazaar 0.90) # revision_id: sergey.glukhov@stripped\ # krs5sw68jl3kx6o2 # target_branch: file:///home/gluh/MySQL/mysql-5.1/ # testament_sha1: 53c05e32725d02fc347c2e53aa454dcc8a9d967f # timestamp: 2011-02-07 15:43:26 +0300 # base_revision_id: ole.john.aske@stripped\ # hyaa46qkdbrwbiom # # Begin bundle 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 RThQkJzkfz4= --===============2213391528976217719==--