From: Jon Olav Hauglid Date: February 21 2011 11:35am Subject: bzr push into mysql-trunk branch (jon.hauglid:3687 to 3688) List-Archive: http://lists.mysql.com/commits/131778 Message-Id: <201102211135.p1L1tMlj026395@acsinet15.oracle.com> MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit 3688 Jon Olav Hauglid 2011-02-21 [merge] Merge from mysql-5.5 to mysql-trunk No conflicts modified: mysql-test/r/alter_table.result mysql-test/t/alter_table.test 3687 Jorgen Loland 2011-02-21 Bug#11766642: crash in Item_field::register_field_in_read_map with view (Former 59793) Prior to the refactoring in this patch, Item_cond_xor behaved partially as an Item_cond and partially as an Item_func. The reasoning behind this was that XOR is currently not optimized (thus should be Item_func instead of Item_cond), but it was planned optimize it in the future (thus, made Item_cond anyway to ease optimization later). Even though Item_cond inherits from Item_func, there are differences between these two. One difference is that the arguments are stored differently. Item_cond stores them in a list while Item_func store them in an args[]. BUG no 45221 was caused by Item_cond_xor storing arguments in the list while users of the objects would look for them in args[]. The fix back then was to store the arguments in both locations. In this bug, Item_cond_xor initially gets two Item_field arguments. These are stored in the list inherited from Item_cond and in args[] inherited from Item_func. During resolution, find_field_in_view() replaces the Item_fields stored in the list with Item_direct_view_refs, but args[] still points to the unresolved Item_fields. This shows that the fix for 45221 was incorrect. The refactoring performed in this patch removes the confusion by making the XOR item an Item_func period. A neg_transformer() is also implemented for Item_func_xor to improve performance when negating XOR expressions. An XOR is negated by negating one of the operands. @ mysql-test/include/subquery_sj.inc Add test for BUG#11766642 @ mysql-test/r/negation_elimination.result Add tests for XOR @ mysql-test/r/subquery_sj_none.result Add test for BUG#11766642 @ mysql-test/t/negation_elimination.test Add tests for XOR @ sql/item_cmpfunc.cc Refactor XOR item: it is now a pure Item_func, inheriting from Item_bool_func2 instead of Item_cond. Also added neg_transformer() function to improve performance when XOR is negated. @ sql/item_cmpfunc.h Refactor XOR item: it is now a pure Item_func, inheriting from Item_bool_func2 instead of Item_cond. Also added neg_transformer() function to improve performance when XOR is negated. @ sql/item_func.h Refactor XOR item: it is now a pure Item_func, inheriting from Item_bool_func2 instead of Item_cond @ sql/sql_yacc.yy Refactor XOR item: it is now a pure Item_func, inheriting from Item_bool_func2 instead of Item_cond @ unittest/gunit/item-t.cc Add unit test for Item_func_xor modified: mysql-test/include/subquery_sj.inc mysql-test/r/negation_elimination.result mysql-test/r/subquery_sj_none.result mysql-test/t/negation_elimination.test sql/item_cmpfunc.cc sql/item_cmpfunc.h sql/item_func.h sql/sql_yacc.yy unittest/gunit/item-t.cc === modified file 'mysql-test/r/alter_table.result' --- a/mysql-test/r/alter_table.result 2010-08-30 06:38:09 +0000 +++ b/mysql-test/r/alter_table.result 2011-02-21 11:34:23 +0000 @@ -1383,3 +1383,11 @@ ALTER TABLE t1 CHANGE a id INT; affected rows: 0 info: Records: 0 Duplicates: 0 Warnings: 0 DROP TABLE t1; +# +# Bug#11754461 CANNOT ALTER TABLE WHEN KEY PREFIX TOO LONG +# +DROP DATABASE IF EXISTS db1; +CREATE DATABASE db1 CHARACTER SET utf8; +CREATE TABLE db1.t1 (bar TINYTEXT, KEY (bar(100))); +ALTER TABLE db1.t1 ADD baz INT; +DROP DATABASE db1; === modified file 'mysql-test/t/alter_table.test' --- a/mysql-test/t/alter_table.test 2010-07-26 09:22:38 +0000 +++ b/mysql-test/t/alter_table.test 2011-02-21 11:30:08 +0000 @@ -1144,3 +1144,18 @@ INSERT INTO t1 VALUES (1, 1), (2, 2); ALTER TABLE t1 CHANGE a id INT; --disable_info DROP TABLE t1; + + +--echo # +--echo # Bug#11754461 CANNOT ALTER TABLE WHEN KEY PREFIX TOO LONG +--echo # + +--disable_warnings +DROP DATABASE IF EXISTS db1; +--enable_warnings + +CREATE DATABASE db1 CHARACTER SET utf8; +CREATE TABLE db1.t1 (bar TINYTEXT, KEY (bar(100))); +ALTER TABLE db1.t1 ADD baz INT; + +DROP DATABASE db1; No bundle (reason: useless for push emails).