Commit c64c108e authored by unknown's avatar unknown

Bug#15949 union + illegal mix of collations (IMPLICIT + COERCIBLE)

union.result, union.test:
  Adding test case.
item.cc:
  Allow safe character set conversion in UNION
  - string constant to column's charset
  - to unicode
  Thus, UNION now works the same with CONCAT (and other string functions)
  in respect of aggregating arguments with different character sets.


sql/item.cc:
  Allow character set conversion in UNION
  - string to column's charset
  - to unicode
  Bug#15949 union + illegal mix of collations (IMPLICIT + COERCIBLE)
mysql-test/t/union.test:
  Adding test case.
mysql-test/r/union.result:
  Adding test case.
parent a7abbd91
...@@ -1185,6 +1185,16 @@ select concat('value is: ', @val) union select 'some text'; ...@@ -1185,6 +1185,16 @@ select concat('value is: ', @val) union select 'some text';
concat('value is: ', @val) concat('value is: ', @val)
value is: 6 value is: 6
some text some text
select concat(_latin1'a', _ascii'b' collate ascii_bin);
concat(_latin1'a', _ascii'b' collate ascii_bin)
ab
create table t1 (foo varchar(100)) collate ascii_bin;
insert into t1 (foo) values ("foo");
select foo from t1 union select 'bar' as foo from dual;
foo
foo
bar
drop table t1;
CREATE TABLE t1 ( CREATE TABLE t1 (
a ENUM('','','') character set utf8 not null default '', a ENUM('','','') character set utf8 not null default '',
b ENUM("one", "two") character set utf8, b ENUM("one", "two") character set utf8,
...@@ -1214,7 +1224,7 @@ Field Type Null Key Default Extra ...@@ -1214,7 +1224,7 @@ Field Type Null Key Default Extra
a char(1) a char(1)
drop table t2; drop table t2;
create table t2 select a from t1 union select c from t1; create table t2 select a from t1 union select c from t1;
ERROR HY000: Illegal mix of collations (utf8_general_ci,IMPLICIT) and (latin1_swedish_ci,IMPLICIT) for operation 'UNION' drop table t2;
create table t2 select a from t1 union select b from t1; create table t2 select a from t1 union select b from t1;
show columns from t2; show columns from t2;
Field Type Null Key Default Extra Field Type Null Key Default Extra
......
...@@ -710,6 +710,15 @@ drop table t1; ...@@ -710,6 +710,15 @@ drop table t1;
set @val:=6; set @val:=6;
select concat('value is: ', @val) union select 'some text'; select concat('value is: ', @val) union select 'some text';
#
# Bug#15949 union + illegal mix of collations (IMPLICIT + COERCIBLE)
#
select concat(_latin1'a', _ascii'b' collate ascii_bin);
create table t1 (foo varchar(100)) collate ascii_bin;
insert into t1 (foo) values ("foo");
select foo from t1 union select 'bar' as foo from dual;
drop table t1;
# #
# Enum merging test # Enum merging test
# #
...@@ -729,8 +738,8 @@ drop table t2; ...@@ -729,8 +738,8 @@ drop table t2;
create table t2 select a from t1 union select a from t1; create table t2 select a from t1 union select a from t1;
show columns from t2; show columns from t2;
drop table t2; drop table t2;
-- error 1267
create table t2 select a from t1 union select c from t1; create table t2 select a from t1 union select c from t1;
drop table t2;
create table t2 select a from t1 union select b from t1; create table t2 select a from t1 union select b from t1;
show columns from t2; show columns from t2;
drop table t2, t1; drop table t2, t1;
......
...@@ -3258,7 +3258,7 @@ bool Item_type_holder::join_types(THD *thd, Item *item) ...@@ -3258,7 +3258,7 @@ bool Item_type_holder::join_types(THD *thd, Item *item)
const char *old_cs, *old_derivation; const char *old_cs, *old_derivation;
old_cs= collation.collation->name; old_cs= collation.collation->name;
old_derivation= collation.derivation_name(); old_derivation= collation.derivation_name();
if (collation.aggregate(item->collation)) if (collation.aggregate(item->collation, MY_COLL_ALLOW_CONV))
{ {
my_error(ER_CANT_AGGREGATE_2COLLATIONS, MYF(0), my_error(ER_CANT_AGGREGATE_2COLLATIONS, MYF(0),
old_cs, old_derivation, old_cs, old_derivation,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment