List:Commits« Previous MessageNext Message »
From:Jon Olav Hauglid Date:February 21 2011 11:35am
Subject:bzr push into mysql-trunk branch (jon.hauglid:3687 to 3688)
View as plain text  
 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).
Thread
bzr push into mysql-trunk branch (jon.hauglid:3687 to 3688) Jon Olav Hauglid21 Feb