#At file:///home/bar/mysql-bzr/mysql-6.1-glob/ based on revid:bar@stripped
3067 Alexander Barkov 2009-03-27
WL#4013 Unicode german2 collation
- Adding support for two-letter expansions
- Adding German collations itself
- Monor code refactoring for easier reading and maitaining.
- Adding tests for ucs2_german2_ci, utf8_german2_ci,
utf16_german2_ci, utf32_german2_ci
- Extending tests for latin1_german2_ci
@ mysql-test/include/ctype_german.inc
Extendings tests
@ mysql-test/r/ctype_latin1_de.result
Recording extended test
@ mysql-test/r/ctype_uca.result
- Recording extended old tests.
- Recording test for the new collation utf8_german2_ci
@ mysql-test/r/ctype_ucs.result
- Recording extended old tests
- Recording test for the new collation ucs2_german2_ci
@ mysql-test/r/ctype_utf16_uca.result
Recording tests for the new collation utf16_german2_ci
@ mysql-test/r/ctype_utf32_uca.result
Recording tests for the new collation utf32_german2_ci
@ mysql-test/r/ctype_utf8.result
Recording extended old tests
@ mysql-test/t/ctype_uca.test
Adding test for utf8_german2_ci
@ mysql-test/t/ctype_ucs.test
Adding test for ucs2_german2_ci
@ mysql-test/t/ctype_utf16_uca.test
Adding test for utf16_german2_ci
@ mysql-test/t/ctype_utf32_uca.test
Adding test for utf32_german2_ci
@ mysys/charset-def.c
Adding initialization of the new collations.
@ strings/ctype-uca.c
- Adding support for two-letter expansions
- Adding German collations itself
- Monor code refactoring for easier reading and maitaining
modified:
mysql-test/include/ctype_german.inc
mysql-test/r/ctype_latin1_de.result
mysql-test/r/ctype_uca.result
mysql-test/r/ctype_ucs.result
mysql-test/r/ctype_utf16_uca.result
mysql-test/r/ctype_utf32_uca.result
mysql-test/r/ctype_utf8.result
mysql-test/t/ctype_uca.test
mysql-test/t/ctype_ucs.test
mysql-test/t/ctype_utf16_uca.test
mysql-test/t/ctype_utf32_uca.test
mysys/charset-def.c
strings/ctype-uca.c
=== modified file 'mysql-test/include/ctype_german.inc'
--- a/mysql-test/include/ctype_german.inc 2008-02-11 12:28:33 +0000
+++ b/mysql-test/include/ctype_german.inc 2009-03-27 07:40:07 +0000
@@ -1,3 +1,4 @@
+--echo "BEGIN ctype_german.inc"
#
# Bug #27877 incorrect german order in utf8_general_ci
#
@@ -27,6 +28,11 @@ delete from t1;
# Populate data
#
+INSERT INTO t1 VALUES ('ud'),('uf');
+INSERT INTO t1 VALUES ('od'),('of');
+INSERT INTO t1 VALUES ('e');
+INSERT INTO t1 VALUES ('ad'),('af');
+
insert into t1 values ('a'),('ae'),(_latin1 0xE4);
insert into t1 values ('o'),('oe'),(_latin1 0xF6);
insert into t1 values ('s'),('ss'),(_latin1 0xDF);
@@ -37,4 +43,10 @@ insert into t1 values ('u'),('ue'),(_lat
#
select s1, hex(s1) from t1 order by s1, binary s1;
select group_concat(s1 order by binary s1) from t1 group by s1;
+
+SELECT s1, hex(s1), hex(weight_string(s1)) FROM t1 ORDER BY s1, BINARY(s1);
+SELECT s1, hex(s1) FROM t1 WHERE s1='ae' ORDER BY s1, BINARY(s1);
+
drop table t1;
+
+--echo "END ctype_german.inc"
=== modified file 'mysql-test/r/ctype_latin1_de.result'
--- a/mysql-test/r/ctype_latin1_de.result 2008-07-23 09:43:50 +0000
+++ b/mysql-test/r/ctype_latin1_de.result 2009-03-27 07:40:07 +0000
@@ -326,12 +326,17 @@ latin1_german2_ci 6109
latin1_german2_ci 61
latin1_german2_ci 6120
drop table t1;
+"BEGIN ctype_german.inc"
drop table if exists t1;
create table t1 as select repeat(' ', 64) as s1;
select collation(s1) from t1;
collation(s1)
latin1_german2_ci
delete from t1;
+INSERT INTO t1 VALUES ('ud'),('uf');
+INSERT INTO t1 VALUES ('od'),('of');
+INSERT INTO t1 VALUES ('e');
+INSERT INTO t1 VALUES ('ad'),('af');
insert into t1 values ('a'),('ae'),(_latin1 0xE4);
insert into t1 values ('o'),('oe'),(_latin1 0xF6);
insert into t1 values ('s'),('ss'),(_latin1 0xDF);
@@ -339,28 +344,68 @@ insert into t1 values ('u'),('ue'),(_lat
select s1, hex(s1) from t1 order by s1, binary s1;
s1 hex(s1)
a 61
+ad 6164
ae 6165
ä E4
+af 6166
+e 65
o 6F
+od 6F64
oe 6F65
ö F6
+of 6F66
s 73
ss 7373
ß DF
u 75
+ud 7564
ue 7565
ü FC
+uf 7566
select group_concat(s1 order by binary s1) from t1 group by s1;
group_concat(s1 order by binary s1)
a
+ad
ae,ä
+af
+e
o
+od
oe,ö
+of
s
ss,ß
u
+ud
ue,ü
+uf
+SELECT s1, hex(s1), hex(weight_string(s1)) FROM t1 ORDER BY s1, BINARY(s1);
+s1 hex(s1) hex(weight_string(s1))
+a 61 41
+ad 6164 4144
+ae 6165 4145
+ä E4 4145
+af 6166 4146
+e 65 45
+o 6F 4F
+od 6F64 4F44
+oe 6F65 4F45
+ö F6 4F45
+of 6F66 4F46
+s 73 53
+ss 7373 5353
+ß DF 5353
+u 75 55
+ud 7564 5544
+ue 7565 5545
+ü FC 5545
+uf 7566 5546
+SELECT s1, hex(s1) FROM t1 WHERE s1='ae' ORDER BY s1, BINARY(s1);
+s1 hex(s1)
+ae 6165
+ä E4
drop table t1;
+"END ctype_german.inc"
SET NAMES latin1;
CREATE TABLE t1 (
col1 varchar(255) NOT NULL default ''
=== modified file 'mysql-test/r/ctype_uca.result'
--- a/mysql-test/r/ctype_uca.result 2008-08-18 05:43:50 +0000
+++ b/mysql-test/r/ctype_uca.result 2009-03-27 07:40:07 +0000
@@ -2666,12 +2666,17 @@ select c1 as c2h from t1 where c1 like '
c2h
ab_def
drop table t1;
+"BEGIN ctype_german.inc"
drop table if exists t1;
create table t1 as select repeat(' ', 64) as s1;
select collation(s1) from t1;
collation(s1)
utf8_unicode_ci
delete from t1;
+INSERT INTO t1 VALUES ('ud'),('uf');
+INSERT INTO t1 VALUES ('od'),('of');
+INSERT INTO t1 VALUES ('e');
+INSERT INTO t1 VALUES ('ad'),('af');
insert into t1 values ('a'),('ae'),(_latin1 0xE4);
insert into t1 values ('o'),('oe'),(_latin1 0xF6);
insert into t1 values ('s'),('ss'),(_latin1 0xDF);
@@ -2680,27 +2685,66 @@ select s1, hex(s1) from t1 order by s1,
s1 hex(s1)
a 61
6
+od 6F64
oe 6F65
+of 6F66
s 73
ss 7373
à C39F
u 75
ü C3BC
+ud 7564
ue 7565
+uf 7566
select group_concat(s1 order by binary s1) from t1 group by s1;
group_concat(s1 order by binary s1)
a,ä
+ad
ae
+af
+e
o,1, hex(s1), hex(weight_string(s1)) FROM t1 ORDER BY s1, BINARY(s1);
+s1 hex(s1) hex(weight_string(s1))
+a 61 0E33
+ä C3A4 0E33
+ad 6164 0E330E6D
+ae 6165 0E330E8B
+af 6166 0E330EB9
+e 65 0E8B
+o 6F 0F82
+ö C3B6 0F82
+od 6F64 0F820E6D
+oe 6F65 0F820E8B
+of 6F66 0F820EB9
+s 73 0FEA
+ss 7373 0FEA0FEA
+Ã C39F 0FEA0FEA
+u 75 101F
+ü C3BC 101F
+ud 7564 101F0E6D
+ue 7565 101F0E8B
+uf 7566 101F0EB9
+SELECT s1, hex(s1) FROM t1 WHERE s1='ae' ORDER BY s1, BINARY(s1);
+s1 hex(s1)
+ae 6165
drop table t1;
+"END ctype_german.inc"
CREATE TABLE t1 (id int, a varchar(30) character set utf8);
INSERT INTO t1 VALUES (1, _ucs2 0x01310069), (2, _ucs2 0x01310131);
INSERT INTO t1 VALUES (3, _ucs2 0x00690069), (4, _ucs2 0x01300049);
@@ -3544,3 +3588,86 @@ hex(weight_string(cast(_latin1 0xDF6368
select hex(weight_string(_utf8 0xF0908080 /* U+10000 */ collate utf8_unicode_ci));
hex(weight_string(_utf8 0xF0908080 /* U+10000 */ collate utf8_unicode_ci))
FFFD
+Start of 6.1 tests
+SET collation_connection=utf8_german2_ci;
+"BEGIN ctype_german.inc"
+drop table if exists t1;
+create table t1 as select repeat(' ', 64) as s1;
+select collation(s1) from t1;
+collation(s1)
+utf8_german2_ci
+delete from t1;
+INSERT INTO t1 VALUES ('ud'),('uf');
+INSERT INTO t1 VALUES ('od'),('of');
+INSERT INTO t1 VALUES ('e');
+INSERT INTO t1 VALUES ('ad'),('af');
+insert into t1 values ('a'),('ae'),(_latin1 0xE4);
+insert into t1 values ('o'),('oe'),(_latin1 0xF6);
+insert into t1 values ('s'),('ss'),(_latin1 0xDF);
+insert into t1 values ('u'),('ue'),(_latin1 0xFC);
+select s1, hex(s1) from t1 order by s1, binary s1;
+s1 hex(s1)
+a 61
+ad 6164
+ae 6165
+ä C3A4
+af 6166
+e 65
+o 6F
+od 6F64
+oe 6F65
+ö C3B6
+of 6F66
+s 73
+ss 7373
+Ã C39F
+u 75
+ud 7564
+ue 7565
+ü C3BC
+uf 7566
+select group_concat(s1 order by binary s1) from t1 group by s1;
+group_concat(s1 order by binary s1)
+a
+ad
+ae,ä
+af
+e
+o
+od
+oe,ö
+of
+s
+ss,Ã
+u
+ud
+ue,ü
+uf
+SELECT s1, hex(s1), hex(weight_string(s1)) FROM t1 ORDER BY s1, BINARY(s1);
+s1 hex(s1) hex(weight_string(s1))
+a 61 0E33
+ad 6164 0E330E6D
+ae 6165 0E330E8B
+ä C3A4 0E330E8B
+af 6166 0E330EB9
+e 65 0E8B
+o 6F 0F82
+od 6F64 0F820E6D
+oe 6F65 0F820E8B
+ö C3B6 0F820E8B
+of 6F66 0F820EB9
+s 73 0FEA
+ss 7373 0FEA0FEA
+Ã C39F 0FEA0FEA
+u 75 101F
+ud 7564 101F0E6D
+ue 7565 101F0E8B
+ü C3BC 101F0E8B
+uf 7566 101F0EB9
+SELECT s1, hex(s1) FROM t1 WHERE s1='ae' ORDER BY s1, BINARY(s1);
+s1 hex(s1)
+ae 6165
+ä C3A4
+drop table t1;
+"END ctype_german.inc"
+End of 6.1 tests
=== modified file 'mysql-test/r/ctype_ucs.result'
--- a/mysql-test/r/ctype_ucs.result 2009-01-06 10:38:47 +0000
+++ b/mysql-test/r/ctype_ucs.result 2009-03-27 07:40:07 +0000
@@ -716,12 +716,17 @@ select c1 as c2h from t1 where c1 like '
c2h
ab_def
drop table t1;
+"BEGIN ctype_german.inc"
drop table if exists t1;
create table t1 as select repeat(' ', 64) as s1;
select collation(s1) from t1;
collation(s1)
ucs2_general_ci
delete from t1;
+INSERT INTO t1 VALUES ('ud'),('uf');
+INSERT INTO t1 VALUES ('od'),('of');
+INSERT INTO t1 VALUES ('e');
+INSERT INTO t1 VALUES ('ad'),('af');
insert into t1 values ('a'),('ae'),(_latin1 0xE4);
insert into t1 values ('o'),('oe'),(_latin1 0xF6);
insert into t1 values ('s'),('ss'),(_latin1 0xDF);
@@ -730,27 +735,66 @@ select s1, hex(s1) from t1 order by s1,
s1 hex(s1)
a 0061
ä 00E4
+ad 00610064
ae 00610065
+af 00610066
+e 0065
o 006F
ö 00F6
+od 006F0064
oe 006F0065
+of 006F0066
s 0073
ß 00DF
ss 00730073
u 0075
ü 00FC
+ud 00750064
ue 00750065
+uf 00750066
select group_concat(s1 order by binary s1) from t1 group by s1;
group_concat(s1 order by binary s1)
a,ä
+ad
ae
+af
+e
o,ö
+od
oe
+of
s,ß
ss
u,ü
+ud
ue
+uf
+SELECT s1, hex(s1), hex(weight_string(s1)) FROM t1 ORDER BY s1, BINARY(s1);
+s1 hex(s1) hex(weight_string(s1))
+a 0061 0041
+ä 00E4 0041
+ad 00610064 00410044
+ae 00610065 00410045
+af 00610066 00410046
+e 0065 0045
+o 006F 004F
+ö 00F6 004F
+od 006F0064 004F0044
+oe 006F0065 004F0045
+of 006F0066 004F0046
+s 0073 0053
+ß 00DF 0053
+ss 00730073 00530053
+u 0075 0055
+ü 00FC 0055
+ud 00750064 00550044
+ue 00750065 00550045
+uf 00750066 00550046
+SELECT s1, hex(s1) FROM t1 WHERE s1='ae' ORDER BY s1, BINARY(s1);
+s1 hex(s1)
+ae 00610065
drop table t1;
+"END ctype_german.inc"
CREATE TABLE t1 AS
SELECT 10 AS a, REPEAT('a',20) AS b, REPEAT('a',8) AS c, REPEAT('a',8) AS d;
ALTER TABLE t1 ADD PRIMARY KEY(a), ADD KEY(b);
@@ -1604,3 +1648,87 @@ s1 hex(s1)
DROP TABLE t1;
SET timestamp=0;
SET NAMES latin1;
+End of 6.0 tests
+Start of 6.0 tests
+SET collation_connection=ucs2_german2_ci;
+"BEGIN ctype_german.inc"
+drop table if exists t1;
+create table t1 as select repeat(' ', 64) as s1;
+select collation(s1) from t1;
+collation(s1)
+ucs2_german2_ci
+delete from t1;
+INSERT INTO t1 VALUES ('ud'),('uf');
+INSERT INTO t1 VALUES ('od'),('of');
+INSERT INTO t1 VALUES ('e');
+INSERT INTO t1 VALUES ('ad'),('af');
+insert into t1 values ('a'),('ae'),(_latin1 0xE4);
+insert into t1 values ('o'),('oe'),(_latin1 0xF6);
+insert into t1 values ('s'),('ss'),(_latin1 0xDF);
+insert into t1 values ('u'),('ue'),(_latin1 0xFC);
+select s1, hex(s1) from t1 order by s1, binary s1;
+s1 hex(s1)
+a 0061
+ad 00610064
+ae 00610065
+ä 00E4
+af 00610066
+e 0065
+o 006F
+od 006F0064
+oe 006F0065
+ö 00F6
+of 006F0066
+s 0073
+ss 00730073
+ß 00DF
+u 0075
+ud 00750064
+ue 00750065
+ü 00FC
+uf 00750066
+select group_concat(s1 order by binary s1) from t1 group by s1;
+group_concat(s1 order by binary s1)
+a
+ad
+ae,ä
+af
+e
+o
+od
+oe,x(weight_string(s1)) FROM t1 ORDER BY s1, BINARY(s1);
+s1 hex(s1) hex(weight_string(s1))
+a 0061 0E33
+ad 00610064 0E330E6D
+ae 00610065 0E330E8B
+ä 00E4 0E330E8B
+af 00610066 0E330EB9
+e 0065 0E8B
+o 006F 0F82
+od 006F0064 0F820E6D
+oe 006F0065 0F820E8B
+ö 00F6 0F820E8B
+of 006F0066 0F820EB9
+s 0073 0FEA
+ss 00730073 0FEA0FEA
+ß 00DF 0FEA0FEA
+u 0075 101F
+ud 00750064 101F0E6D
+ue 00750065 101F0E8B
+ü 00FC 101F0E8B
+uf 00750066 101F0EB9
+SELECT s1, hex(s1) FROM t1 WHERE s1='ae' ORDER BY s1, BINARY(s1);
+s1 hex(s1)
+ae 00610065
+ä 00E4
+drop table t1;
+"END ctype_german.inc"
+End of 6.1 tests
=== modified file 'mysql-test/r/ctype_utf16_uca.result'
--- a/mysql-test/r/ctype_utf16_uca.result 2008-07-23 09:43:50 +0000
+++ b/mysql-test/r/ctype_utf16_uca.result 2009-03-27 07:40:07 +0000
@@ -2698,5 +2698,87 @@ NULL
NULL
NULL
drop table t1;
-set names latin1;
End of 5.2 tests
+SET NAMES utf8;
+SET collation_connection=utf16_german2_ci;
+"BEGIN ctype_german.inc"
+drop table if exists t1;
+create table t1 as select repeat(' ', 64) as s1;
+select collation(s1) from t1;
+collation(s1)
+utf16_german2_ci
+delete from t1;
+INSERT INTO t1 VALUES ('ud'),('uf');
+INSERT INTO t1 VALUES ('od'),('of');
+INSERT INTO t1 VALUES ('e');
+INSERT INTO t1 VALUES ('ad'),('af');
+insert into t1 values ('a'),('ae'),(_latin1 0xE4);
+insert into t1 values ('o'),('oe'),(_latin1 0xF6);
+insert into t1 values ('s'),('ss'),(_latin1 0xDF);
+insert into t1 values ('u'),('ue'),(_latin1 0xFC);
+select s1, hex(s1) from t1 order by s1, binary s1;
+s1 hex(s1)
+a 0061
+ad 00610064
+ae 00610065
+ä 00E4
+af 00610066
+e 0065
+o 006F
+od 006F0064
+oe 006F0065
+0075
+ud 00750064
+ue 00750065
+ü 00FC
+uf 00750066
+select group_concat(s1 order by binary s1) from t1 group by s1;
+group_concat(s1 order by binary s1)
+a
+ad
+ae,Ã+uf
+SELECT s1, hex(s1), hex(weight_string(s1)) FROM t1 ORDER BY s1, BINARY(s1);
+s1 hex(s1) hex(weight_string(s1))
+a 0061 0E33
+ad 00610064 0E330E6D
+ae 00610065 0E330E8B
+ä 00E4 0E330E8B
+af 00610066 0E330EB9
+e 0065 0E8B
+o 006F 0F82
+od 006F0064 0F820E6D
+oe 006F0065 0F820E8B
+ö 00F6 0F820E8B
+of 006F0066 0F820EB9
+s 0073 0FEA
+ss 00730073 0FEA0FEA
+Ã 00DF 0FEA0FEA
+u 0075 101F
+ud 00750064 101F0E6D
+ue 00750065 101F0E8B
+ü 00FC 101F0E8B
+uf 00750066 101F0EB9
+SELECT s1, hex(s1) FROM t1 WHERE s1='ae' ORDER BY s1, BINARY(s1);
+s1 hex(s1)
+ae 00610065
+ä 00E4
+drop table t1;
+"END ctype_german.inc"
+End of 6.1 tests
=== modified file 'mysql-test/r/ctype_utf32_uca.result'
--- a/mysql-test/r/ctype_utf32_uca.result 2008-07-23 09:43:50 +0000
+++ b/mysql-test/r/ctype_utf32_uca.result 2009-03-27 07:40:07 +0000
@@ -2698,5 +2698,87 @@ NULL
NULL
NULL
drop table t1;
-set names latin1;
End of 5.2 tests
+SET NAMES utf8;
+SET collation_connection=utf32_german2_ci;
+"BEGIN ctype_german.inc"
+drop table if exists t1;
+create table t1 as select repeat(' ', 64) as s1;
+select collation(s1) from t1;
+collation(s1)
+utf32_german2_ci
+delete from t1;
+INSERT INTO t1 VALUES ('ud'),('uf');
+INSERT INTO t1 VALUES ('od'),('of');
+INSERT INTO t1 VALUES ('e');
+INSERT INTO t1 VALUES ('ad'),('af');
+insert into t1 values ('a'),('ae'),(_latin1 0xE4);
+insert into t1 values ('o'),('oe'),(_latin1 0xF6);
+insert into t1 values ('s'),('ss'),(_latin1 0xDF);
+insert into t1 values ('u'),('ue'),(_latin1 0xFC);
+select s1, hex(s1) from t1 order by s1, binary s1;
+s1 hex(s1)
+a 00000061
+ad 0000006100000064
+ae 0000006100000065
+ä 000000E4
+af 0000006100000066
+e 00000065
+o 0000006F
+od 0000006F00000064
+oe 0000006F00000065
+ö 000000F6
+of 0000006F00000066
+s 00000073
+ss 0000007300000073
+Ã 000000DF
+u 00000075
+ud 0000007500000064
+ue 0000007500000065
+ü 000000FC
+uf 0000007500000066
+select group_concat(s1 order by binary s1) from t1 group by s1;
+group_concat(s1 order by binary s1)
+a
+ad
+ae,ä
+af
+e
+o
+od
+oe,ö
+of
+s
+ss,Ã
+u
+ud
+ue,ü
+uf
+SELECT s1, hex(s1), hex(weight_string(s1)) FROM t1 ORDER BY s1, BINARY(s1);
+s1 hex(s1) hex(weight_string(s1))
+a 00000061 0E33
+ad 0000006100000064 0E330E6D
+ae 0000006100000065 0E330E8B
+ä 000000E4 0E330E8B
+af 0000006100000066 0E330EB9
+e 00000065 0E8B
+o 0000006F 0F82
+od 0000006F00000064 0F820E6D
+oe 0000006F00000065 0F820E8B
+ö 000000F6 0F820E8B
+of 0000006F00000066 0F820EB9
+s 00000073 0FEA
+ss 0000007300000073 0FEA0FEA
+Ã 000000DF 0FEA0FEA
+u 00000075 101F
+ud 0000007500000064 101F0E6D
+ue 0000007500000065 101F0E8B
+ü 000000FC 101F0E8B
+uf 0000007500000066 101F0EB9
+SELECT s1, hex(s1) FROM t1 WHERE s1='ae' ORDER BY s1, BINARY(s1);
+s1 hex(s1)
+ae 0000006100000065
+ä 000000E4
+drop table t1;
+"END ctype_german.inc"
+End of 6.1 tests
=== modified file 'mysql-test/r/ctype_utf8.result'
--- a/mysql-test/r/ctype_utf8.result 2009-02-13 16:30:54 +0000
+++ b/mysql-test/r/ctype_utf8.result 2009-03-27 07:40:07 +0000
@@ -939,12 +939,17 @@ select c1 as c2h from t1 where c1 like '
c2h
ab_def
drop table t1;
+"BEGIN ctype_german.inc"
drop table if exists t1;
create table t1 as select repeat(' ', 64) as s1;
select collation(s1) from t1;
collation(s1)
utf8_general_ci
delete from t1;
+INSERT INTO t1 VALUES ('ud'),('uf');
+INSERT INTO t1 VALUES ('od'),('of');
+INSERT INTO t1 VALUES ('e');
+INSERT INTO t1 VALUES ('ad'),('af');
insert into t1 values ('a'),('ae'),(_latin1 0xE4);
insert into t1 values ('o'),('oe'),(_latin1 0xF6);
insert into t1 values ('s'),('ss'),(_latin1 0xDF);
@@ -953,27 +958,66 @@ select s1, hex(s1) from t1 order by s1,
s1 hex(s1)
a 61
ä C3A4
+ad 6164
ae 6165
+af 6166
+e 65
o 6F
ö C3B6
+od 6F64
oe 6F65
+of 6F66
s 73
à C39F
ss 7373
u 75
ü C3BC
+ud 7564
ue 7565
+uf 7566
select group_concat(s1 order by binary s1) from t1 group by s1;
group_concat(s1 order by binary s1)
a,ä
+ad
ae
+af
+e
o,ö
+od
oe
+of
s,Ã
ss
u,ü
+ud
ue
+uf
+SELECT s1, hex(s1), hex(weight_string(s1)) FROM t1 ORDER BY s1, BINARY(s1);
+s1 hex(s1) hex(weight_string(s1))
+a 61 0041
+ä C3A4 0041
+ad 6164 00410044
+ae 6165 00410045
+af 6166 00410046
+e 65 0045
+o 6F 004F
+ö C3B6 004F
+od 6F64 004F0044
+oe 6F65 004F0045
+of 6F66 004F0046
+s 73 0053
+Ã C39F 0053
+ss 7373 00530053
+u 75 0055
+ü C3BC 0055
+ud 7564 00550044
+ue 7565 00550045
+uf 7566 00550046
+SELECT s1, hex(s1) FROM t1 WHERE s1='ae' ORDER BY s1, BINARY(s1);
+s1 hex(s1)
+ae 6165
drop table t1;
+"END ctype_german.inc"
SET collation_connection='utf8_bin';
create table t1 select repeat('a',4000) a;
delete from t1;
=== modified file 'mysql-test/t/ctype_uca.test'
--- a/mysql-test/t/ctype_uca.test 2008-07-23 09:43:50 +0000
+++ b/mysql-test/t/ctype_uca.test 2009-03-27 07:40:07 +0000
@@ -567,3 +567,13 @@ set @@collation_connection=ucs2_czech_ci
# Bug#33077 weight of supplementary characters is not 0xfffd
#
select hex(weight_string(_utf8 0xF0908080 /* U+10000 */ collate utf8_unicode_ci));
+
+
+--echo Start of 6.1 tests
+#
+# WL#4013 Unicode german2 collation
+#
+SET collation_connection=utf8_german2_ci;
+--source include/ctype_german.inc
+
+--echo End of 6.1 tests
=== modified file 'mysql-test/t/ctype_ucs.test'
--- a/mysql-test/t/ctype_ucs.test 2009-01-06 10:38:47 +0000
+++ b/mysql-test/t/ctype_ucs.test 2009-03-27 07:40:07 +0000
@@ -708,4 +708,14 @@ select hex(char(0x01020304 using ucs2));
SET collation_connection=ucs2_general_ci;
--source include/ctype_datetime.inc
SET NAMES latin1;
+--echo End of 6.0 tests
+--echo Start of 6.0 tests
+
+#
+# WL#4013 Unicode german2 collation
+#
+SET collation_connection=ucs2_german2_ci;
+--source include/ctype_german.inc
+
+--echo End of 6.1 tests
=== modified file 'mysql-test/t/ctype_utf16_uca.test'
--- a/mysql-test/t/ctype_utf16_uca.test 2008-07-23 09:43:50 +0000
+++ b/mysql-test/t/ctype_utf16_uca.test 2009-03-27 07:40:07 +0000
@@ -290,6 +290,14 @@ set @@collation_connection=utf16_czech_c
#
set collation_connection=utf16_unicode_ci;
--source include/ctype_regex.inc
-set names latin1;
--echo End of 5.2 tests
+
+#
+# WL#4013 Unicode german2 collation
+#
+SET NAMES utf8;
+SET collation_connection=utf16_german2_ci;
+--source include/ctype_german.inc
+
+--echo End of 6.1 tests
=== modified file 'mysql-test/t/ctype_utf32_uca.test'
--- a/mysql-test/t/ctype_utf32_uca.test 2008-07-23 09:43:50 +0000
+++ b/mysql-test/t/ctype_utf32_uca.test 2009-03-27 07:40:07 +0000
@@ -291,6 +291,14 @@ set @@collation_connection=utf32_czech_c
#
set collation_connection=utf32_unicode_ci;
--source include/ctype_regex.inc
-set names latin1;
--echo End of 5.2 tests
+
+#
+# WL#4013 Unicode german2 collation
+#
+SET NAMES utf8;
+SET collation_connection=utf32_german2_ci;
+--source include/ctype_german.inc
+
+--echo End of 6.1 tests
=== modified file 'mysys/charset-def.c'
--- a/mysys/charset-def.c 2007-10-22 12:02:48 +0000
+++ b/mysys/charset-def.c 2009-03-27 07:40:07 +0000
@@ -24,6 +24,7 @@
#ifdef HAVE_UCA_COLLATIONS
#ifdef HAVE_CHARSET_ucs2
+extern CHARSET_INFO my_charset_ucs2_german2_uca_ci;
extern CHARSET_INFO my_charset_ucs2_icelandic_uca_ci;
extern CHARSET_INFO my_charset_ucs2_latvian_uca_ci;
extern CHARSET_INFO my_charset_ucs2_romanian_uca_ci;
@@ -47,6 +48,7 @@ extern CHARSET_INFO my_charset_ucs2_sinh
#ifdef HAVE_CHARSET_utf32
+extern CHARSET_INFO my_charset_utf32_german2_uca_ci;
extern CHARSET_INFO my_charset_utf32_icelandic_uca_ci;
extern CHARSET_INFO my_charset_utf32_latvian_uca_ci;
extern CHARSET_INFO my_charset_utf32_romanian_uca_ci;
@@ -70,6 +72,7 @@ extern CHARSET_INFO my_charset_utf32_sin
#ifdef HAVE_CHARSET_utf16
+extern CHARSET_INFO my_charset_utf16_german2_uca_ci;
extern CHARSET_INFO my_charset_utf16_icelandic_uca_ci;
extern CHARSET_INFO my_charset_utf16_latvian_uca_ci;
extern CHARSET_INFO my_charset_utf16_romanian_uca_ci;
@@ -93,6 +96,7 @@ extern CHARSET_INFO my_charset_utf16_sin
#ifdef HAVE_CHARSET_utf8mb3
+extern CHARSET_INFO my_charset_utf8mb3_german2_uca_ci;
extern CHARSET_INFO my_charset_utf8mb3_icelandic_uca_ci;
extern CHARSET_INFO my_charset_utf8mb3_latvian_uca_ci;
extern CHARSET_INFO my_charset_utf8mb3_romanian_uca_ci;
@@ -118,6 +122,7 @@ extern CHARSET_INFO my_charset_utf8mb3_g
#endif /* HAVE_CHARSET_utf8mb3 */
#ifdef HAVE_CHARSET_utf8mb4
+extern CHARSET_INFO my_charset_utf8mb4_german2_uca_ci;
extern CHARSET_INFO my_charset_utf8mb4_icelandic_uca_ci;
extern CHARSET_INFO my_charset_utf8mb4_latvian_uca_ci;
extern CHARSET_INFO my_charset_utf8mb4_romanian_uca_ci;
@@ -206,6 +211,7 @@ my_bool init_compiled_charsets(myf flags
add_compiled_collation(&my_charset_ucs2_bin);
#ifdef HAVE_UCA_COLLATIONS
add_compiled_collation(&my_charset_ucs2_unicode_ci);
+ add_compiled_collation(&my_charset_ucs2_german2_uca_ci);
add_compiled_collation(&my_charset_ucs2_icelandic_uca_ci);
add_compiled_collation(&my_charset_ucs2_latvian_uca_ci);
add_compiled_collation(&my_charset_ucs2_romanian_uca_ci);
@@ -241,6 +247,7 @@ my_bool init_compiled_charsets(myf flags
#endif
#ifdef HAVE_UCA_COLLATIONS
add_compiled_collation(&my_charset_utf8mb3_unicode_ci);
+ add_compiled_collation(&my_charset_utf8mb3_german2_uca_ci);
add_compiled_collation(&my_charset_utf8mb3_icelandic_uca_ci);
add_compiled_collation(&my_charset_utf8mb3_latvian_uca_ci);
add_compiled_collation(&my_charset_utf8mb3_romanian_uca_ci);
@@ -269,6 +276,7 @@ my_bool init_compiled_charsets(myf flags
add_compiled_collation(&my_charset_utf8mb4_bin);
#ifdef HAVE_UCA_COLLATIONS
add_compiled_collation(&my_charset_utf8mb4_unicode_ci);
+ add_compiled_collation(&my_charset_utf8mb4_german2_uca_ci);
add_compiled_collation(&my_charset_utf8mb4_icelandic_uca_ci);
add_compiled_collation(&my_charset_utf8mb4_latvian_uca_ci);
add_compiled_collation(&my_charset_utf8mb4_romanian_uca_ci);
@@ -297,6 +305,7 @@ my_bool init_compiled_charsets(myf flags
add_compiled_collation(&my_charset_utf16_bin);
#ifdef HAVE_UCA_COLLATIONS
add_compiled_collation(&my_charset_utf16_unicode_ci);
+ add_compiled_collation(&my_charset_utf16_german2_uca_ci);
add_compiled_collation(&my_charset_utf16_icelandic_uca_ci);
add_compiled_collation(&my_charset_utf16_latvian_uca_ci);
add_compiled_collation(&my_charset_utf16_romanian_uca_ci);
@@ -325,6 +334,7 @@ my_bool init_compiled_charsets(myf flags
add_compiled_collation(&my_charset_utf32_bin);
#ifdef HAVE_UCA_COLLATIONS
add_compiled_collation(&my_charset_utf32_unicode_ci);
+ add_compiled_collation(&my_charset_utf32_german2_uca_ci);
add_compiled_collation(&my_charset_utf32_icelandic_uca_ci);
add_compiled_collation(&my_charset_utf32_latvian_uca_ci);
add_compiled_collation(&my_charset_utf32_romanian_uca_ci);
=== modified file 'strings/ctype-uca.c'
--- a/strings/ctype-uca.c 2008-10-31 12:25:42 +0000
+++ b/strings/ctype-uca.c 2009-03-27 07:40:07 +0000
@@ -6521,6 +6521,16 @@ NULL ,page0F9data,page0FAdata,page
page0FCdata,page0FDdata,page0FEdata,page0FFdata
};
+
+/*
+ German Phonebook
+*/
+static const char german2[]=
+ "&AE << \\u00E4 <<< \\u00C4 "
+ "&OE << \\u00F6 <<< \\u00D6 "
+ "&UE << \\u00FC <<< \\u00DC ";
+
+
/*
Some sources treat LETTER A WITH DIARESIS (00E4,00C4)
secondary greater than LETTER AE (00E6,00C6).
@@ -7741,7 +7751,7 @@ ex:
typedef struct my_coll_rule_item_st
{
- uint base; /* Base character */
+ uint base[2]; /* Base character */
uint curr[2]; /* Current character */
int diff[3]; /* Primary, Secondary and Tertiary difference */
} MY_COLL_RULE;
@@ -7817,16 +7827,30 @@ static int my_coll_rule_parse(MY_COLL_RU
if (prevlexnum == MY_COLL_LEXEM_SHIFT)
{
- item.base= lexem.code;
+ MY_COLL_LEXEM savlex= lexem;
+ item.base[0]= lexem.code;
item.diff[0]= 0;
item.diff[1]= 0;
item.diff[2]= 0;
+
+ /* Check if shift to a double character (expansion) */
+ if ((lexnum= my_coll_lexem_next(&lexem)) == MY_COLL_LEXEM_CHAR)
+ {
+ item.base[1]= lexem.code;
+ }
+ else
+ {
+ item.base[1]= 0;
+ lexem= savlex; /* Restore previous parser state */
+ }
}
else if (prevlexnum == MY_COLL_LEXEM_DIFF)
{
MY_COLL_LEXEM savlex;
savlex= lexem;
item.curr[0]= lexem.code;
+
+ /* Check if diff for a double character (contraction) */
if ((lexnum= my_coll_lexem_next(&lexem)) == MY_COLL_LEXEM_CHAR)
{
item.curr[1]= lexem.code;
@@ -7876,6 +7900,67 @@ static int my_coll_rule_parse(MY_COLL_RU
#define MY_MAX_COLL_RULE 128
+/**
+ Helper function:
+ Find address of weights of the given character.
+
+ @weights UCA weight array
+ @lengths UCA length array
+ @ch character Unicode code point
+
+ @return Weight array
+ @retval pointer to weight array for the given character,
+ or NULL if this page does not have implicit weights.
+*/
+
+static inline uint16 *
+my_char_weight_addr(uint16 **weights, const uchar *lengths, uint ch)
+{
+ uint page= (ch >> 8) & 0xFF;
+ uint ofst= ch & 0xFF;
+ return weights[page] ? weights[page] + ofst * lengths[page] : NULL;
+}
+
+
+
+/**
+ Helper function:
+ Copies UCA weights for a given "uint" string
+ to the given location.
+
+ @weights source UCA weight array
+ @lengths source UCA length array
+ @to destination
+ @to_length size of destination
+ @str string
+ @len string length
+
+ @return number of weights put
+*/
+
+static size_t
+my_char_weight_put(uint16 **weights, const uchar *lengths,
+ uint16 *to, size_t to_length,
+ uint *str, size_t len)
+{
+ size_t i, count;
+ if (!to_length)
+ return 0;
+ to_length--; /* Without trailing zero */
+ for (count=0, i= 0; (i < len) && (count < to_length); i++, str++)
+ {
+ uint16 *from= my_char_weight_addr(weights, lengths, *str);
+ for ( ; from && from[0]; from++)
+ {
+ *to++= *from;
+ count++;
+ }
+ }
+ *to= 0;
+ return count;
+}
+
+
/*
This function copies an UCS2 collation from
the default Unicode Collation Algorithm (UCA)
@@ -7895,14 +7980,13 @@ static int my_coll_rule_parse(MY_COLL_RU
static my_bool create_tailoring(CHARSET_INFO *cs, void *(*alloc)(size_t))
{
- MY_COLL_RULE rule[MY_MAX_COLL_RULE];
+ MY_COLL_RULE rule[MY_MAX_COLL_RULE], *r, *rlast;
char errstr[128];
uchar *newlengths;
uint16 **newweights;
const uchar *deflengths= uca_length;
uint16 **defweights= uca_weight;
- int rc, i;
- int ncontractions= 0;
+ int rc, ncontractions= 0;
if (!cs->tailoring)
return 1;
@@ -7919,6 +8003,7 @@ static my_bool create_tailoring(CHARSET_
*/
return 1;
}
+ rlast= rule + rc;
if (!(newweights= (uint16**) (*alloc)(256*sizeof(uint16*))))
return 1;
@@ -7933,12 +8018,12 @@ static my_bool create_tailoring(CHARSET_
Calculate maximum lenghts for the pages
which will be overwritten.
*/
- for (i=0; i < rc; i++)
+ for (r= rule; r < rlast; r++)
{
- if (!rule[i].curr[1]) /* If not a contraction */
+ if (!r->curr[1]) /* If not a contraction */
{
- uint pageb= (rule[i].base >> 8) & 0xFF;
- uint pagec= (rule[i].curr[0] >> 8) & 0xFF;
+ uint pageb= (r->base[0] >> 8) & 0xFF;
+ uint pagec= (r->curr[0] >> 8) & 0xFF;
if (newlengths[pagec] < deflengths[pageb])
newlengths[pagec]= deflengths[pageb];
@@ -7947,57 +8032,7 @@ static my_bool create_tailoring(CHARSET_
ncontractions++;
}
- for (i=0; i < rc; i++)
- {
- uint pageb= (rule[i].base >> 8) & 0xFF;
- uint pagec= (rule[i].curr[0] >> 8) & 0xFF;
- uint chb, chc;
-
- if (rule[i].curr[1]) /* Skip contraction */
- continue;
-
- if (!newweights[pagec])
- {
- /* Alloc new page and copy the default UCA weights */
- uint size= 256*newlengths[pagec]*sizeof(uint16);
-
- if (!(newweights[pagec]= (uint16*) (*alloc)(size)))
- return 1;
- bzero((void*) newweights[pagec], size);
-
- for (chc=0 ; chc < 256; chc++)
- {
- memcpy(newweights[pagec] + chc*newlengths[pagec],
- defweights[pagec] + chc*deflengths[pagec],
- deflengths[pagec]*sizeof(uint16));
- }
- }
-
- /*
- Aply the alternative rule:
- shift to the base character and primary difference.
- */
- chc= rule[i].curr[0] & 0xFF;
- chb= rule[i].base & 0xFF;
- memcpy(newweights[pagec] + chc*newlengths[pagec],
- defweights[pageb] + chb*deflengths[pageb],
- deflengths[pageb]*sizeof(uint16));
- /* Apply primary difference */
- newweights[pagec][chc*newlengths[pagec]]+= rule[i].diff[0];
- }
-
- /* Copy non-overwritten pages from the default UCA weights */
- for (i= 0; i < 256 ; i++)
- {
- if (!newweights[i])
- newweights[i]= defweights[i];
- }
-
- cs->sort_order= newlengths;
- cs->sort_order_big= newweights;
- cs->contractions= NULL;
- /* Now process contractions */
if (ncontractions)
{
/*
@@ -8005,42 +8040,92 @@ static my_bool create_tailoring(CHARSET_
plus 256 bytes for "is contraction part" flags.
*/
uint size= 0x40*0x40*sizeof(uint16) + 256;
- char *contraction_flags;
if (!(cs->contractions= (uint16*) (*alloc)(size)))
return 1;
bzero((void*)cs->contractions, size);
- contraction_flags= ((char*) cs->contractions) + 0x40*0x40;
- for (i=0; i < rc; i++)
+ }
+ else
+ cs->contractions= NULL;
+
+
+ for (r= rule; r < rlast; r++)
+ {
+ size_t nweights, baselen= r->base[1] ? 2 : 1;
+ uint16 *to;
+
+ if (r->curr[1]) /* Contraction */
+ {
+ char *contraction_flags= ((char*) cs->contractions) + 0x40*0x40;
+ uint pageb= (r->base[0] >> 8) & 0xFF;
+ uint chb= r->base[0] & 0xFF;
+ uint16 *offsb= defweights[pageb] + chb*deflengths[pageb];
+
+ if (offsb[1] ||
+ r->curr[0] < 0x40 || r->curr[0] > 0x7f ||
+ r->curr[1] < 0x40 || r->curr[1] > 0x7f)
+ {
+ /*
+ TODO: add error reporting;
+ We support only basic latin letters contractions at this point.
+ Also, We don't support contractions with weight longer than one.
+ Otherwise, we'd need much more memory.
+ */
+ return 1;
+ }
+ /* Mark both letters as "is contraction part */
+ contraction_flags[r->curr[0]]= 1;
+ contraction_flags[r->curr[1]]= 1;
+
+ to= &cs->contractions[(r->curr[0] - 0x40) * 0x40 + (r->curr[1] - 0x40)];
+ nweights= 2; /* +1 for trailing zero */
+ }
+ else
{
- if (rule[i].curr[1])
+ uint16 pagec;
+ if (!newweights[pagec= ((r->curr[0] >> 8) & 0xFF)])
{
- uint pageb= (rule[i].base >> 8) & 0xFF;
- uint chb= rule[i].base & 0xFF;
- uint16 *offsb= defweights[pageb] + chb*deflengths[pageb];
- uint offsc;
+ /* Alloc new page and copy the default UCA weights */
+ uint chc, size= 256 * newlengths[pagec] * sizeof(uint16);
- if (offsb[1] ||
- rule[i].curr[0] < 0x40 || rule[i].curr[0] > 0x7f ||
- rule[i].curr[1] < 0x40 || rule[i].curr[1] > 0x7f)
- {
- /*
- TODO: add error reporting;
- We support only basic latin letters contractions at this point.
- Also, We don't support contractions with weight longer than one.
- Otherwise, we'd need much more memory.
- */
+ if (!(newweights[pagec]= (uint16*) (*alloc)(size)))
return 1;
- }
- offsc= (rule[i].curr[0]-0x40)*0x40+(rule[i].curr[1]-0x40);
+ bzero((void*) newweights[pagec], size);
- /* Copy base weight applying primary difference */
- cs->contractions[offsc]= offsb[0] + rule[i].diff[0];
- /* Mark both letters as "is contraction part */
- contraction_flags[rule[i].curr[0]]= 1;
- contraction_flags[rule[i].curr[1]]= 1;
+ for (chc=0 ; chc < 256; chc++)
+ {
+ memcpy(newweights[pagec] + chc*newlengths[pagec],
+ defweights[pagec] + chc*deflengths[pagec],
+ deflengths[pagec]*sizeof(uint16));
+ }
}
+ to= my_char_weight_addr(newweights, newlengths, r->curr[0]);
+ nweights= newlengths[pagec];
+ }
+
+ /* Copy weights of the "shift to" character */
+ nweights= my_char_weight_put(defweights, deflengths,
+ to, nweights,
+ r->base, baselen);
+
+ /* Apply primary difference */
+ if (nweights)
+ to[nweights - 1]+= r->diff[0];
+ }
+
+
+ /* Copy non-overwritten pages from the default UCA weights */
+ {
+ size_t i;
+ for (i= 0; i < 256 ; i++)
+ {
+ if (!newweights[i])
+ newweights[i]= defweights[i];
}
}
+
+ cs->sort_order= newlengths;
+ cs->sort_order_big= newweights;
+
return 0;
}
@@ -8800,7 +8885,7 @@ CHARSET_INFO my_charset_ucs2_hungarian_u
CHARSET_INFO my_charset_ucs2_sinhala_uca_ci=
{
147,0,0, /* number */
- MY_CS_COMPILED|MY_CS_STRNXFRM|MY_CS_UNICODE,
+ MY_CS_COMPILED|MY_CS_STRNXFRM|MY_CS_UNICODE|MY_CS_NONASCII,
"ucs2", /* csname */
"ucs2_sinhala_ci", /* name */
"", /* comment */
@@ -8832,6 +8917,41 @@ CHARSET_INFO my_charset_ucs2_sinhala_uca
};
+CHARSET_INFO my_charset_ucs2_german2_uca_ci=
+{
+ 148,0,0, /* number */
+ MY_CS_COMPILED|MY_CS_STRNXFRM|MY_CS_UNICODE|MY_CS_NONASCII,
+ "ucs2", /* csname */
+ "ucs2_german2_ci", /* name */
+ "", /* comment */
+ german2, /* tailoring */
+ NULL, /* ctype */
+ NULL, /* to_lower */
+ NULL, /* to_upper */
+ NULL, /* sort_order */
+ NULL, /* contractions */
+ NULL, /* sort_order_big*/
+ NULL, /* tab_to_uni */
+ NULL, /* tab_from_uni */
+ my_unicase_default, /* caseinfo */
+ NULL, /* state_map */
+ NULL, /* ident_map */
+ 8, /* strxfrm_multiply */
+ 1, /* caseup_multiply */
+ 1, /* casedn_multiply */
+ 2, /* mbminlen */
+ 2, /* mbmaxlen */
+ 9, /* min_sort_char */
+ 0xFFFF, /* max_sort_char */
+ ' ', /* pad char */
+ 0, /* escape_with_backslash_is_dangerous */
+ 1, /* levels_for_compare */
+ 1, /* levels_for_order */
+ &my_charset_ucs2_handler,
+ &my_collation_ucs2_uca_handler
+};
+
+
#endif
@@ -9568,6 +9688,41 @@ CHARSET_INFO my_charset_utf8mb3_sinhala_
&my_collation_any_uca_handler
};
+
+CHARSET_INFO my_charset_utf8mb3_german2_uca_ci=
+{
+ 212,0,0, /* number */
+ MY_CS_COMPILED|MY_CS_STRNXFRM|MY_CS_UNICODE,
+ MY_UTF8MB3, /* cs name */
+ MY_UTF8MB3 "_german2_ci",/* name */
+ "", /* comment */
+ german2, /* tailoring */
+ ctype_utf8, /* ctype */
+ NULL, /* to_lower */
+ NULL, /* to_upper */
+ NULL, /* sort_order */
+ NULL, /* contractions */
+ NULL, /* sort_order_big*/
+ NULL, /* tab_to_uni */
+ NULL, /* tab_from_uni */
+ my_unicase_default, /* caseinfo */
+ NULL, /* state_map */
+ NULL, /* ident_map */
+ 8, /* strxfrm_multiply */
+ 1, /* caseup_multiply */
+ 1, /* casedn_multiply */
+ 3, /* mbminlen */
+ 3, /* mbmaxlen */
+ 9, /* min_sort_char */
+ 0xFFFF, /* max_sort_char */
+ ' ', /* pad char */
+ 0, /* escape_with_backslash_is_dangerous */
+ 1, /* levels_for_compare */
+ 1, /* levels_for_order */
+ &my_charset_utf8mb3_handler,
+ &my_collation_any_uca_handler
+};
+
#endif /* HAVE_CHARSET_utf8mb3 */
@@ -10257,6 +10412,40 @@ CHARSET_INFO my_charset_utf8mb4_sinhala_
&my_collation_any_uca_handler
};
+CHARSET_INFO my_charset_utf8mb4_german2_uca_ci=
+{
+ 244,0,0, /* number */
+ MY_CS_COMPILED|MY_CS_STRNXFRM|MY_CS_UNICODE,
+ MY_UTF8MB4, /* csname */
+ MY_UTF8MB4 "_german2_ci",/* name */
+ "", /* comment */
+ german2, /* tailoring */
+ ctype_utf8, /* ctype */
+ NULL, /* to_lower */
+ NULL, /* to_upper */
+ NULL, /* sort_order */
+ NULL, /* contractions */
+ NULL, /* sort_order_big*/
+ NULL, /* tab_to_uni */
+ NULL, /* tab_from_uni */
+ my_unicase_default, /* caseinfo */
+ NULL, /* state_map */
+ NULL, /* ident_map */
+ 8, /* strxfrm_multiply */
+ 1, /* caseup_multiply */
+ 1, /* casedn_multiply */
+ 1, /* mbminlen */
+ 4, /* mbmaxlen */
+ 9, /* min_sort_char */
+ 0xFFFF, /* max_sort_char */
+ ' ', /* pad char */
+ 0, /* escape_with_backslash_is_dangerous */
+ 1, /* levels_for_compare */
+ 1, /* levels_for_order */
+ &my_charset_utf8mb4_handler,
+ &my_collation_any_uca_handler
+};
+
#endif /* HAVE_CHARSET_utf8mb4 */
@@ -10961,6 +11150,40 @@ CHARSET_INFO my_charset_utf32_sinhala_uc
&my_collation_utf32_uca_handler
};
+CHARSET_INFO my_charset_utf32_german2_uca_ci=
+{
+ 180,0,0, /* number */
+ MY_CS_COMPILED|MY_CS_STRNXFRM|MY_CS_UNICODE|MY_CS_NONASCII,
+ "utf32", /* csname */
+ "utf32_german2_ci", /* name */
+ "", /* comment */
+ german2, /* tailoring */
+ NULL, /* ctype */
+ NULL, /* to_lower */
+ NULL, /* to_upper */
+ NULL, /* sort_order */
+ NULL, /* contractions */
+ NULL, /* sort_order_big*/
+ NULL, /* tab_to_uni */
+ NULL, /* tab_from_uni */
+ my_unicase_default, /* caseinfo */
+ NULL, /* state_map */
+ NULL, /* ident_map */
+ 8, /* strxfrm_multiply */
+ 1, /* caseup_multiply */
+ 1, /* casedn_multiply */
+ 4, /* mbminlen */
+ 4, /* mbmaxlen */
+ 9, /* min_sort_char */
+ 0xFFFF, /* max_sort_char */
+ ' ', /* pad char */
+ 0, /* escape_with_backslash_is_dangerous */
+ 1, /* levels_for_compare */
+ 1, /* levels_for_order */
+ &my_charset_utf32_handler,
+ &my_collation_utf32_uca_handler
+};
+
#endif /* HAVE_CHARSET_utf32 */
@@ -11666,6 +11889,40 @@ CHARSET_INFO my_charset_utf16_sinhala_uc
&my_collation_utf16_uca_handler
};
+CHARSET_INFO my_charset_utf16_german2_uca_ci=
+{
+ 121,0,0, /* number */
+ MY_CS_COMPILED|MY_CS_STRNXFRM|MY_CS_UNICODE|MY_CS_NONASCII,
+ "utf16", /* cs name */
+ "utf16_german2_ci",/* name */
+ "", /* comment */
+ german2, /* tailoring */
+ NULL, /* ctype */
+ NULL, /* to_lower */
+ NULL, /* to_upper */
+ NULL, /* sort_order */
+ NULL, /* contractions */
+ NULL, /* sort_order_big*/
+ NULL, /* tab_to_uni */
+ NULL, /* tab_from_uni */
+ my_unicase_default,/* caseinfo */
+ NULL, /* state_map */
+ NULL, /* ident_map */
+ 8, /* strxfrm_multiply */
+ 1, /* caseup_multiply */
+ 1, /* casedn_multiply */
+ 2, /* mbminlen */
+ 4, /* mbmaxlen */
+ 9, /* min_sort_char */
+ 0xFFFF, /* max_sort_char */
+ ' ', /* pad char */
+ 0, /* escape_with_backslash_is_dangerous */
+ 1, /* levels_for_compare */
+ 1, /* levels_for_order */
+ &my_charset_utf16_handler,
+ &my_collation_utf16_uca_handler
+};
+
#endif /* HAVE_CHARSET_utf16 */
Attachment: [text/bzr-bundle] bzr/bar@mysql.com-20090327074007-b3ad6jaro05e0ai1.bundle
| Thread |
|---|
| • bzr commit into mysql-6.0 branch (bar:3067) WL#4013 | Alexander Barkov | 27 Mar |