2783 Alexander Barkov 2008-12-09
Postfix for WL#4164 Two-byte collation IDs
Problem:
Collation ID=2047 didn't work because of a wrong condition in some loops.
(Only collation ID=2046 worked).
Fix:
Changing the loops to work with ID=2047.
modified:
mysql-test/r/ctype_ldml.result
mysql-test/t/ctype_ldml.test
mysys/charset.c
2782 Andrei Elkin 2008-12-08 [merge]
merge 5.1-bt with Bug #33420 fixes to 6.0-bt.
modified:
mysql-test/suite/binlog/r/binlog_row_mix_innodb_myisam.result
=== modified file 'mysql-test/r/ctype_ldml.result'
--- a/mysql-test/r/ctype_ldml.result 2008-10-31 12:25:42 +0000
+++ b/mysql-test/r/ctype_ldml.result 2008-12-09 08:41:43 +0000
@@ -373,3 +373,10 @@ def test t1 t1 c1 c1 254 2 2 Y 0 0 359
c1
drop table t1;
+CREATE TABLE t1 (s1 char(10) character set utf8 collate utf8_maxuserid_ci);
+INSERT INTO t1 VALUES ('a'),('b');
+SELECT * FROM t1 WHERE s1='a' ORDER BY BINARY s1;
+s1
+a
+b
+DROP TABLE t1;
=== modified file 'mysql-test/t/ctype_ldml.test'
--- a/mysql-test/t/ctype_ldml.test 2008-10-31 12:25:42 +0000
+++ b/mysql-test/t/ctype_ldml.test 2008-12-09 08:41:43 +0000
@@ -111,3 +111,11 @@ set @@character_set_results=NULL;
select * from t1;
--disable_metadata
drop table t1;
+
+#
+# Check maximum collation ID (2047 as of MySQL-6.0.9)
+#
+CREATE TABLE t1 (s1 char(10) character set utf8 collate utf8_maxuserid_ci);
+INSERT INTO t1 VALUES ('a'),('b');
+SELECT * FROM t1 WHERE s1='a' ORDER BY BINARY s1;
+DROP TABLE t1;
=== modified file 'mysys/charset.c'
--- a/mysys/charset.c 2008-07-24 11:33:35 +0000
+++ b/mysys/charset.c 2008-12-09 08:41:43 +0000
@@ -42,7 +42,7 @@ get_collation_number_internal(const char
{
CHARSET_INFO **cs;
for (cs= all_charsets;
- cs < all_charsets+array_elements(all_charsets)-1 ;
+ cs < all_charsets + array_elements(all_charsets);
cs++)
{
if ( cs[0] && cs[0]->name &&
@@ -452,7 +452,7 @@ static my_bool init_available_charsets(m
/* Copy compiled charsets */
for (cs=all_charsets;
- cs < all_charsets+array_elements(all_charsets)-1 ;
+ cs < all_charsets + array_elements(all_charsets);
cs++)
{
if (*cs)
@@ -492,7 +492,7 @@ uint get_charset_number(const char *char
init_available_charsets(MYF(0));
for (cs= all_charsets;
- cs < all_charsets+array_elements(all_charsets)-1 ;
+ cs < all_charsets + array_elements(all_charsets);
cs++)
{
if ( cs[0] && cs[0]->csname && (cs[0]->state & cs_flags) &&
@@ -555,7 +555,7 @@ CHARSET_INFO *get_charset(uint cs_number
(void) init_available_charsets(MYF(0)); /* If it isn't initialized */
- if (!cs_number || cs_number >= array_elements(all_charsets)-1)
+ if (!cs_number || cs_number > array_elements(all_charsets))
return NULL;
cs=get_internal_charset(cs_number, flags);
| Thread |
|---|
| • bzr push into mysql-6.0-bugteam branch (bar:2782 to 2783) WL#4164 | Alexander Barkov | 9 Dec |