List:Commits« Previous MessageNext Message »
From:Alexander Barkov Date:February 11 2011 8:57am
Subject:bzr commit into mysql-5.5 branch (alexander.barkov:3323)
View as plain text  
#At file:///home/bar/mysql-bzr/mysql-5.5.b60101/ based on revid:alexander.barkov@stripped

 3323 Alexander Barkov	2011-02-11
      Bug@60101 COALESCE with cp1251 tables causes [Err] 1267 - Illegal mix of collations
      
      Problem:
        IF() did not copy collation derivation and repertoire from
        an argument if the opposite argument was NULL:
          IF(cond, res1, NULL)
          IF(cond, NULL, res2)
        only CHARSET_INFO pointer was copied.
        This resulted in illegal mix of collations error.
      
      Fix:
        copy all collation parameters from the non-NULL argument:
        CHARSET_INFO pointer, derivation, repertoire.

    modified:
      mysql-test/r/ctype_cp1251.result
      mysql-test/t/ctype_cp1251.test
      sql/item_cmpfunc.cc
=== modified file 'mysql-test/r/ctype_cp1251.result'
--- a/mysql-test/r/ctype_cp1251.result	2011-02-10 08:18:08 +0000
+++ b/mysql-test/r/ctype_cp1251.result	2011-02-11 08:52:55 +0000
@@ -3217,5 +3217,20 @@ maketime(`a`,`a`,`a`)
 DROP TABLE t1;
 SET sql_mode=default;
 #
+# Bug#60101 COALESCE with cp1251 tables causes [Err] 1267 - Illegal mix of collations
+#
+CREATE TABLE t1 (test1 INT, test2 VARCHAR(255));
+SHOW CREATE TABLE t1;
+Table	Create Table
+t1	CREATE TABLE `t1` (
+  `test1` int(11) DEFAULT NULL,
+  `test2` varchar(255) DEFAULT NULL
+) ENGINE=MyISAM DEFAULT CHARSET=latin1
+SELECT COALESCE(IF(test1=1, 1, NULL), test2) FROM t1;
+COALESCE(IF(test1=1, 1, NULL), test2)
+SELECT COALESCE(IF(test1=1, NULL, 1), test2) FROM t1;
+COALESCE(IF(test1=1, NULL, 1), test2)
+DROP TABLE t1;
+#
 # End of 5.5 tests
 #

=== modified file 'mysql-test/t/ctype_cp1251.test'
--- a/mysql-test/t/ctype_cp1251.test	2010-11-26 14:22:06 +0000
+++ b/mysql-test/t/ctype_cp1251.test	2011-02-11 08:52:55 +0000
@@ -76,5 +76,15 @@ DROP TABLE t1;
 --source include/ctype_numconv.inc
 
 --echo #
+--echo # Bug#60101 COALESCE with cp1251 tables causes [Err] 1267 - Illegal mix of collations
+--echo #
+CREATE TABLE t1 (test1 INT, test2 VARCHAR(255));
+SHOW CREATE TABLE t1;
+SELECT COALESCE(IF(test1=1, 1, NULL), test2) FROM t1;
+SELECT COALESCE(IF(test1=1, NULL, 1), test2) FROM t1;
+DROP TABLE t1;
+
+
+--echo #
 --echo # End of 5.5 tests
 --echo #

=== modified file 'sql/item_cmpfunc.cc'
--- a/sql/item_cmpfunc.cc	2011-02-08 15:47:33 +0000
+++ b/sql/item_cmpfunc.cc	2011-02-11 08:52:55 +0000
@@ -2640,7 +2640,7 @@ Item_func_if::fix_length_and_dec()
   if (null1)
   {
     cached_result_type= arg2_type;
-    collation.set(args[2]->collation.collation);
+    collation.set(args[2]->collation);
     cached_field_type= args[2]->field_type();
     max_length= args[2]->max_length;
     return;
@@ -2649,7 +2649,7 @@ Item_func_if::fix_length_and_dec()
   if (null2)
   {
     cached_result_type= arg1_type;
-    collation.set(args[1]->collation.collation);
+    collation.set(args[1]->collation);
     cached_field_type= args[1]->field_type();
     max_length= args[1]->max_length;
     return;


Attachment: [text/bzr-bundle] bzr/alexander.barkov@oracle.com-20110211085255-cpdnfe1nrk30ga1g.bundle
Thread
bzr commit into mysql-5.5 branch (alexander.barkov:3323) Alexander Barkov11 Feb