From: Alexey Kopytov Date: April 26 2010 8:06pm Subject: bzr commit into mysql-5.0-bugteam branch (Alexey.Kopytov:2858) Bug#50335 List-Archive: http://lists.mysql.com/commits/106567 X-Bug: 50335 Message-Id: <20100426200607.47B2E1B08A@kaamos.local> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="Boundary_(ID_gSDjaTuck24aybBwMJCTBw)" --Boundary_(ID_gSDjaTuck24aybBwMJCTBw) MIME-version: 1.0 Content-type: text/plain; CHARSET=US-ASCII Content-transfer-encoding: 7BIT Content-disposition: inline #At file:///data/src/bzr/bugteam/mysql-5.0-bugteam/ based on revid:joro@stripped 2858 Alexey Kopytov 2010-04-27 Backport of the fix for bug #50335 to 5.0. The problem was in an incorrect debug assertion. The expression used in the failing assertion states that when finding references matching ORDER BY expressions, there can be only one reference to a single table. But that does not make any sense, all test cases for this bug are valid examples with multiple identical WHERE expressions referencing the same table which are also present in the ORDER BY list. Fixed by removing the failing assertion. We also have to take care of the 'found' counter so that we count multiple references only once. We rely on this fact later in eq_ref_table(). @ mysql-test/r/join.result Added a test case for bug #50335. @ mysql-test/t/join.test Added a test case for bug #50335. @ sql/sql_select.cc Removing the assertion in eq_ref_table() as it does not make any sense. We also have to take care of the 'found' counter so that we count multiple references only once. We rely on this fact later in eq_ref_table(). modified: mysql-test/r/join.result mysql-test/t/join.test sql/sql_select.cc === modified file 'mysql-test/r/join.result' --- a/mysql-test/r/join.result 2010-03-26 07:44:24 +0000 +++ b/mysql-test/r/join.result 2010-04-26 20:06:00 +0000 @@ -942,4 +942,14 @@ ROW(t1.b, 1111.11) <=> ROW('',''); id select_type table type possible_keys key key_len ref rows Extra 1 SIMPLE NULL NULL NULL NULL NULL NULL NULL Impossible WHERE noticed after reading const tables DROP TABLE t1; +# +# Bug #50335: Assertion `!(order->used & map)' in eq_ref_table +# +CREATE TABLE t1 (a INT NOT NULL, b INT NOT NULL, PRIMARY KEY (a,b)); +INSERT INTO t1 VALUES (0,0), (1,1); +SELECT * FROM t1 STRAIGHT_JOIN t1 t2 ON t1.a=t2.a AND t1.a=t2.b ORDER BY t2.a, t1.a; +a b a b +0 0 0 0 +1 1 1 1 +DROP TABLE t1; End of 5.0 tests. === modified file 'mysql-test/t/join.test' --- a/mysql-test/t/join.test 2010-03-26 07:44:24 +0000 +++ b/mysql-test/t/join.test 2010-04-26 20:06:00 +0000 @@ -736,4 +736,15 @@ WHERE ROW(t1.a, 1111.11) = ROW(1111.11, ROW(t1.b, 1111.11) <=> ROW('',''); DROP TABLE t1; +--echo # +--echo # Bug #50335: Assertion `!(order->used & map)' in eq_ref_table +--echo # + +CREATE TABLE t1 (a INT NOT NULL, b INT NOT NULL, PRIMARY KEY (a,b)); +INSERT INTO t1 VALUES (0,0), (1,1); + +SELECT * FROM t1 STRAIGHT_JOIN t1 t2 ON t1.a=t2.a AND t1.a=t2.b ORDER BY t2.a, t1.a; + +DROP TABLE t1; + --echo End of 5.0 tests. === modified file 'sql/sql_select.cc' --- a/sql/sql_select.cc 2010-03-26 07:44:24 +0000 +++ b/sql/sql_select.cc 2010-04-26 20:06:00 +0000 @@ -6720,9 +6720,11 @@ eq_ref_table(JOIN *join, ORDER *start_or } if (order) { - found++; - DBUG_ASSERT(!(order->used & map)); - order->used|=map; + if (!(order->used & map)) + { + found++; + order->used|= map; + } continue; // Used in ORDER BY } if (!only_eq_ref_tables(join,start_order, (*ref_item)->used_tables())) --Boundary_(ID_gSDjaTuck24aybBwMJCTBw) MIME-version: 1.0 Content-type: text/bzr-bundle; CHARSET=US-ASCII; name="bzr/alexey.kopytov@stripped" Content-transfer-encoding: 7BIT Content-disposition: inline; filename="bzr/alexey.kopytov@stripped" # Bazaar merge directive format 2 (Bazaar 0.90) # revision_id: alexey.kopytov@stripped # target_branch: file:///data/src/bzr/bugteam/mysql-5.0-bugteam/ # testament_sha1: a04f59c3fca507b337f5080f4f2a9a42e75f4e6e # timestamp: 2010-04-27 00:06:07 +0400 # source_branch: file:///data/src/bzr/bugteam/bug45236/my50-bug45236/ # base_revision_id: joro@stripped # # Begin bundle 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 ckU4UJCXft1P --Boundary_(ID_gSDjaTuck24aybBwMJCTBw)--