mirror of
https://github.com/MariaDB/server.git
synced 2025-08-05 13:16:09 +03:00
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.
This commit is contained in:
@@ -3219,5 +3219,20 @@ maketime(`a`,`a`,`a`)
|
|||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
SET sql_mode=default;
|
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
|
# End of 5.5 tests
|
||||||
#
|
#
|
||||||
|
@@ -85,6 +85,16 @@ set global LC_TIME_NAMES=convert((-8388608) using cp1251);
|
|||||||
|
|
||||||
--source include/ctype_numconv.inc
|
--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 #
|
||||||
--echo # End of 5.5 tests
|
--echo # End of 5.5 tests
|
||||||
--echo #
|
--echo #
|
||||||
|
@@ -2640,7 +2640,7 @@ Item_func_if::fix_length_and_dec()
|
|||||||
if (null1)
|
if (null1)
|
||||||
{
|
{
|
||||||
cached_result_type= arg2_type;
|
cached_result_type= arg2_type;
|
||||||
collation.set(args[2]->collation.collation);
|
collation.set(args[2]->collation);
|
||||||
cached_field_type= args[2]->field_type();
|
cached_field_type= args[2]->field_type();
|
||||||
max_length= args[2]->max_length;
|
max_length= args[2]->max_length;
|
||||||
return;
|
return;
|
||||||
@@ -2649,7 +2649,7 @@ Item_func_if::fix_length_and_dec()
|
|||||||
if (null2)
|
if (null2)
|
||||||
{
|
{
|
||||||
cached_result_type= arg1_type;
|
cached_result_type= arg1_type;
|
||||||
collation.set(args[1]->collation.collation);
|
collation.set(args[1]->collation);
|
||||||
cached_field_type= args[1]->field_type();
|
cached_field_type= args[1]->field_type();
|
||||||
max_length= args[1]->max_length;
|
max_length= args[1]->max_length;
|
||||||
return;
|
return;
|
||||||
|
Reference in New Issue
Block a user