mirror of
https://github.com/MariaDB/server.git
synced 2025-07-30 16:24:05 +03:00
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.
This commit is contained in:
@ -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('<27>','<27>','<27>') character set utf8 not null default '<27>',
|
a ENUM('<27>','<27>','<27>') character set utf8 not null default '<27>',
|
||||||
b ENUM("one", "two") character set utf8,
|
b ENUM("one", "two") character set utf8,
|
||||||
@ -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;
|
|||||||
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;
|
|||||||
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)
|
|||||||
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,
|
||||||
|
Reference in New Issue
Block a user