2813 Sergey Glukhov 2009-03-19 [merge]
5.0-bugteam->5.1-bugteam merge
@ client/mysql.cc
5.0-bugteam->5.1-bugteam merge
@ mysql-test/r/ctype_collate.result
5.0-bugteam->5.1-bugteam merge
@ mysql-test/t/ctype_collate.test
5.0-bugteam->5.1-bugteam merge
@ sql/item.cc
5.0-bugteam->5.1-bugteam merge
modified:
client/mysql.cc
mysql-test/r/ctype_collate.result
mysql-test/t/ctype_collate.test
sql/item.cc
2812 Satya B 2009-03-19 [merge]
Merge 5.0-bugteam to 5.1-bugteam
modified:
client/mysqldump.c
mysql-test/suite/federated/federated.result
mysql-test/suite/federated/federated.test
=== modified file 'client/mysql.cc'
--- a/client/mysql.cc 2009-03-18 08:27:49 +0000
+++ b/client/mysql.cc 2009-03-19 09:26:12 +0000
@@ -1200,7 +1200,7 @@ int main(int argc,char *argv[])
#endif
sprintf(buff, "%s",
#ifndef NOT_YET
- "Type 'help;' or '\\h' for help. Type '\\c' to clear the buffer.\n");
+ "Type 'help;' or '\\h' for help. Type '\\c' to clear the current input statement.\n");
#else
"Type 'help [[%]function name[%]]' to get help on usage of function.\n");
#endif
=== modified file 'mysql-test/r/ctype_collate.result'
--- a/mysql-test/r/ctype_collate.result 2008-02-12 19:09:16 +0000
+++ b/mysql-test/r/ctype_collate.result 2009-03-19 09:26:12 +0000
@@ -611,3 +611,22 @@ check table t1 extended;
Table Op Msg_type Msg_text
test.t1 check status OK
drop table t1;
+select least(_latin1'a',_latin2'b',_latin5'c' collate latin5_turkish_ci);
+least(_latin1'a',_latin2'b',_latin5'c' collate latin5_turkish_ci)
+a
+create table t1
+select least(_latin1'a',_latin2'b',_latin5'c' collate latin5_turkish_ci) as f1;
+show create table t1;
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `f1` varchar(1) CHARACTER SET latin5 NOT NULL DEFAULT ''
+) ENGINE=MyISAM DEFAULT CHARSET=latin1
+drop table t1;
+select case _latin1'a' when _latin2'b' then 1 when _latin5'c' collate
+latin5_turkish_ci then 2 else 3 end;
+case _latin1'a' when _latin2'b' then 1 when _latin5'c' collate
+latin5_turkish_ci then 2 else 3 end
+3
+select concat(_latin1'a',_latin2'b',_latin5'c' collate latin5_turkish_ci);
+concat(_latin1'a',_latin2'b',_latin5'c' collate latin5_turkish_ci)
+abc
=== modified file 'mysql-test/t/ctype_collate.test'
--- a/mysql-test/t/ctype_collate.test 2007-07-08 21:23:33 +0000
+++ b/mysql-test/t/ctype_collate.test 2009-03-19 08:20:28 +0000
@@ -229,3 +229,17 @@ insert into t1 set a=0x6c;
insert into t1 set a=0x4c98;
check table t1 extended;
drop table t1;
+
+#
+# Bug#41627 Illegal mix of collations in LEAST / GREATEST / CASE
+#
+select least(_latin1'a',_latin2'b',_latin5'c' collate latin5_turkish_ci);
+create table t1
+select least(_latin1'a',_latin2'b',_latin5'c' collate latin5_turkish_ci) as f1;
+show create table t1;
+drop table t1;
+
+select case _latin1'a' when _latin2'b' then 1 when _latin5'c' collate
+latin5_turkish_ci then 2 else 3 end;
+
+select concat(_latin1'a',_latin2'b',_latin5'c' collate latin5_turkish_ci);
=== modified file 'sql/item.cc'
--- a/sql/item.cc 2009-02-20 09:50:50 +0000
+++ b/sql/item.cc 2009-03-19 09:26:12 +0000
@@ -1531,7 +1531,8 @@ bool DTCollation::aggregate(DTCollation
else
{
// Cannot apply conversion
- set(0, DERIVATION_NONE, 0);
+ set(&my_charset_bin, DERIVATION_NONE,
+ (dt.repertoire|repertoire));
return 1;
}
}
@@ -1614,15 +1615,31 @@ bool agg_item_collations(DTCollation &c,
{
uint i;
Item **arg;
+ bool unknown_cs= 0;
+
c.set(av[0]->collation);
for (i= 1, arg= &av[item_sep]; i < count; i++, arg++)
{
if (c.aggregate((*arg)->collation, flags))
{
+ if (c.derivation == DERIVATION_NONE &&
+ c.collation == &my_charset_bin)
+ {
+ unknown_cs= 1;
+ continue;
+ }
my_coll_agg_error(av, count, fname, item_sep);
return TRUE;
}
}
+
+ if (unknown_cs &&
+ c.derivation != DERIVATION_EXPLICIT)
+ {
+ my_coll_agg_error(av, count, fname, item_sep);
+ return TRUE;
+ }
+
if ((flags & MY_COLL_DISALLOW_NONE) &&
c.derivation == DERIVATION_NONE)
{
Attachment: [text/bzr-bundle] bzr/sergey.glukhov@sun.com-20090319092612-yi8naqj8ap7axo61.bundle
| Thread |
|---|
| • bzr push into mysql-5.1-bugteam branch (Sergey.Glukhov:2812 to 2813) | Sergey Glukhov | 19 Mar |