summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorunknown <bar@mysql.com>2006-03-06 14:50:34 +0400
committerunknown <bar@mysql.com>2006-03-06 14:50:34 +0400
commitd86a66d483e4999840958129fa6a2ba9d48ac169 (patch)
tree99827f07c0530f1ac1ea4ea3a498f1e7fec2475f
parent3ecf9f040a7cbbbab243a31a9189ecbe94796d68 (diff)
parentc64c108eda29fbcb397a694056708261f2891916 (diff)
downloadmariadb-git-d86a66d483e4999840958129fa6a2ba9d48ac169.tar.gz
Merge abarkov@bk-internal.mysql.com:/home/bk/mysql-4.1
into mysql.com:/usr/home/bar/mysql-4.1.b15949
-rw-r--r--mysql-test/r/union.result12
-rw-r--r--mysql-test/t/union.test11
-rw-r--r--sql/item.cc2
3 files changed, 22 insertions, 3 deletions
diff --git a/mysql-test/r/union.result b/mysql-test/r/union.result
index a9b2345d834..d01ce6249f7 100644
--- a/mysql-test/r/union.result
+++ b/mysql-test/r/union.result
@@ -1185,6 +1185,16 @@ select concat('value is: ', @val) union select 'some text';
concat('value is: ', @val)
value is: 6
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 (
a ENUM('ä','ö','ü') character set utf8 not null default 'ü',
b ENUM("one", "two") character set utf8,
@@ -1214,7 +1224,7 @@ Field Type Null Key Default Extra
a char(1)
drop table t2;
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;
show columns from t2;
Field Type Null Key Default Extra
diff --git a/mysql-test/t/union.test b/mysql-test/t/union.test
index 1f6fc2c8d3b..994546e9d97 100644
--- a/mysql-test/t/union.test
+++ b/mysql-test/t/union.test
@@ -711,6 +711,15 @@ set @val:=6;
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
#
CREATE TABLE t1 (
@@ -729,8 +738,8 @@ drop table t2;
create table t2 select a from t1 union select a from t1;
show columns from t2;
drop table t2;
--- error 1267
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;
show columns from t2;
drop table t2, t1;
diff --git a/sql/item.cc b/sql/item.cc
index f996e962cca..5964ed388c6 100644
--- a/sql/item.cc
+++ b/sql/item.cc
@@ -3258,7 +3258,7 @@ bool Item_type_holder::join_types(THD *thd, Item *item)
const char *old_cs, *old_derivation;
old_cs= collation.collation->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),
old_cs, old_derivation,