1
0
mirror of https://github.com/MariaDB/server.git synced 2025-08-08 11:22:35 +03:00

MDEV-26572 Improve simple multibyte collation performance on the ASCII range

This commit is contained in:
Alexander Barkov
2021-09-08 11:42:42 +04:00
parent 4be366111b
commit 0629711db4
29 changed files with 2621 additions and 22 deletions

View File

@@ -4,11 +4,16 @@ drop table if exists t1;
create table t1 select repeat('a',10) as c1; create table t1 select repeat('a',10) as c1;
delete from t1; delete from t1;
insert into t1 values (0x00),(0x01),(0x02),(0x03),(0x04),(0x05),(0x06),(0x07),(0x08),(0x09),(0x0A),(0x0B),(0x0C),(0x0D),(0x0E),(0x0F);
insert into t1 values (0x10),(0x11),(0x12),(0x13),(0x14),(0x15),(0x16),(0x17),(0x18),(0x19),(0x1A),(0x1B),(0x1C),(0x1D),(0x1E),(0x1F);
insert into t1 values (0x20),(0x21),(0x22),(0x23),(0x24),(0x25),(0x26),(0x27),(0x28),(0x29),(0x2A),(0x2B),(0x2C),(0x2D),(0x2E),(0x2F); insert into t1 values (0x20),(0x21),(0x22),(0x23),(0x24),(0x25),(0x26),(0x27),(0x28),(0x29),(0x2A),(0x2B),(0x2C),(0x2D),(0x2E),(0x2F);
insert into t1 values (0x30),(0x31),(0x32),(0x33),(0x34),(0x35),(0x36),(0x37),(0x38),(0x39),(0x3A),(0x3B),(0x3C),(0x3D),(0x3E),(0x3F); insert into t1 values (0x30),(0x31),(0x32),(0x33),(0x34),(0x35),(0x36),(0x37),(0x38),(0x39),(0x3A),(0x3B),(0x3C),(0x3D),(0x3E),(0x3F);
insert into t1 values (0x40),(0x41),(0x42),(0x43),(0x44),(0x45),(0x46),(0x47),(0x48),(0x49),(0x4A),(0x4B),(0x4C),(0x4D),(0x4E),(0x4F); insert into t1 values (0x40),(0x41),(0x42),(0x43),(0x44),(0x45),(0x46),(0x47),(0x48),(0x49),(0x4A),(0x4B),(0x4C),(0x4D),(0x4E),(0x4F);
insert into t1 values (0x50),(0x51),(0x52),(0x53),(0x54),(0x55),(0x56),(0x57),(0x58),(0x59),(0x5A),(0x5B),(0x5C),(0x5D),(0x5E),(0x5F); insert into t1 values (0x50),(0x51),(0x52),(0x53),(0x54),(0x55),(0x56),(0x57),(0x58),(0x59),(0x5A),(0x5B),(0x5C),(0x5D),(0x5E),(0x5F);
insert into t1 values (0x60),(0x61),(0x62),(0x63),(0x64),(0x65),(0x66),(0x67),(0x68),(0x69),(0x6A),(0x6B),(0x6C),(0x6D),(0x6E),(0x6F); insert into t1 values (0x60),(0x61),(0x62),(0x63),(0x64),(0x65),(0x66),(0x67),(0x68),(0x69),(0x6A),(0x6B),(0x6C),(0x6D),(0x6E),(0x6F);
insert into t1 values (0x70),(0x71),(0x72),(0x73),(0x74),(0x75),(0x76),(0x77),(0x78),(0x79),(0x7A),(0x7B),(0x7C),(0x7D),(0x7E),(0x7F); insert into t1 values (0x70),(0x71),(0x72),(0x73),(0x74),(0x75),(0x76),(0x77),(0x78),(0x79),(0x7A),(0x7B),(0x7C),(0x7D),(0x7E),(0x7F);
SELECT GROUP_CONCAT(c1 ORDER BY binary c1 SEPARATOR ''), GROUP_CONCAT(hex(c1) ORDER BY BINARY c1) FROM t1 GROUP BY c1; create view v1 as select c1, if(c1 < 0x20 OR c1=0x7F, concat('<',hex(c1),'>'),c1) as name from t1;
select column_name, collation_name from information_schema.columns where table_schema=database() and table_name='v1';
SELECT GROUP_CONCAT(name ORDER BY binary c1 SEPARATOR ''), GROUP_CONCAT(hex(c1) ORDER BY BINARY c1) FROM v1 GROUP BY c1;
drop table t1; drop table t1;
drop view v1;

View File

@@ -246,14 +246,53 @@ DROP TABLE t1;
drop table if exists t1; drop table if exists t1;
create table t1 select repeat('a',10) as c1; create table t1 select repeat('a',10) as c1;
delete from t1; delete from t1;
insert into t1 values (0x00),(0x01),(0x02),(0x03),(0x04),(0x05),(0x06),(0x07),(0x08),(0x09),(0x0A),(0x0B),(0x0C),(0x0D),(0x0E),(0x0F);
insert into t1 values (0x10),(0x11),(0x12),(0x13),(0x14),(0x15),(0x16),(0x17),(0x18),(0x19),(0x1A),(0x1B),(0x1C),(0x1D),(0x1E),(0x1F);
insert into t1 values (0x20),(0x21),(0x22),(0x23),(0x24),(0x25),(0x26),(0x27),(0x28),(0x29),(0x2A),(0x2B),(0x2C),(0x2D),(0x2E),(0x2F); insert into t1 values (0x20),(0x21),(0x22),(0x23),(0x24),(0x25),(0x26),(0x27),(0x28),(0x29),(0x2A),(0x2B),(0x2C),(0x2D),(0x2E),(0x2F);
insert into t1 values (0x30),(0x31),(0x32),(0x33),(0x34),(0x35),(0x36),(0x37),(0x38),(0x39),(0x3A),(0x3B),(0x3C),(0x3D),(0x3E),(0x3F); insert into t1 values (0x30),(0x31),(0x32),(0x33),(0x34),(0x35),(0x36),(0x37),(0x38),(0x39),(0x3A),(0x3B),(0x3C),(0x3D),(0x3E),(0x3F);
insert into t1 values (0x40),(0x41),(0x42),(0x43),(0x44),(0x45),(0x46),(0x47),(0x48),(0x49),(0x4A),(0x4B),(0x4C),(0x4D),(0x4E),(0x4F); insert into t1 values (0x40),(0x41),(0x42),(0x43),(0x44),(0x45),(0x46),(0x47),(0x48),(0x49),(0x4A),(0x4B),(0x4C),(0x4D),(0x4E),(0x4F);
insert into t1 values (0x50),(0x51),(0x52),(0x53),(0x54),(0x55),(0x56),(0x57),(0x58),(0x59),(0x5A),(0x5B),(0x5C),(0x5D),(0x5E),(0x5F); insert into t1 values (0x50),(0x51),(0x52),(0x53),(0x54),(0x55),(0x56),(0x57),(0x58),(0x59),(0x5A),(0x5B),(0x5C),(0x5D),(0x5E),(0x5F);
insert into t1 values (0x60),(0x61),(0x62),(0x63),(0x64),(0x65),(0x66),(0x67),(0x68),(0x69),(0x6A),(0x6B),(0x6C),(0x6D),(0x6E),(0x6F); insert into t1 values (0x60),(0x61),(0x62),(0x63),(0x64),(0x65),(0x66),(0x67),(0x68),(0x69),(0x6A),(0x6B),(0x6C),(0x6D),(0x6E),(0x6F);
insert into t1 values (0x70),(0x71),(0x72),(0x73),(0x74),(0x75),(0x76),(0x77),(0x78),(0x79),(0x7A),(0x7B),(0x7C),(0x7D),(0x7E),(0x7F); insert into t1 values (0x70),(0x71),(0x72),(0x73),(0x74),(0x75),(0x76),(0x77),(0x78),(0x79),(0x7A),(0x7B),(0x7C),(0x7D),(0x7E),(0x7F);
SELECT GROUP_CONCAT(c1 ORDER BY binary c1 SEPARATOR ''), GROUP_CONCAT(hex(c1) ORDER BY BINARY c1) FROM t1 GROUP BY c1; create view v1 as select c1, if(c1 < 0x20 OR c1=0x7F, concat('<',hex(c1),'>'),c1) as name from t1;
GROUP_CONCAT(c1 ORDER BY binary c1 SEPARATOR '') GROUP_CONCAT(hex(c1) ORDER BY BINARY c1) select column_name, collation_name from information_schema.columns where table_schema=database() and table_name='v1';
column_name collation_name
c1 big5_chinese_ci
name big5_chinese_ci
SELECT GROUP_CONCAT(name ORDER BY binary c1 SEPARATOR ''), GROUP_CONCAT(hex(c1) ORDER BY BINARY c1) FROM v1 GROUP BY c1;
GROUP_CONCAT(name ORDER BY binary c1 SEPARATOR '') GROUP_CONCAT(hex(c1) ORDER BY BINARY c1)
<00> 00
<01> 01
<02> 02
<03> 03
<04> 04
<05> 05
<06> 06
<07> 07
<08> 08
<09> 09
<0A> 0A
<0B> 0B
<0C> 0C
<0D> 0D
<0E> 0E
<0F> 0F
<10> 10
<11> 11
<12> 12
<13> 13
<14> 14
<15> 15
<16> 16
<17> 17
<18> 18
<19> 19
<1A> 1A
<1B> 1B
<1C> 1C
<1D> 1D
<1E> 1E
<1F> 1F
20 20
! 21 ! 21
" 22 " 22
@@ -321,8 +360,9 @@ _ 5F
{ 7B { 7B
| 7C | 7C
} 7D } 7D
 7F <7F> 7F
drop table t1; drop table t1;
drop view v1;
SELECT strcmp('a','a '), strcmp('a ','a'); SELECT strcmp('a','a '), strcmp('a ','a');
strcmp('a','a ') strcmp('a ','a') strcmp('a','a ') strcmp('a ','a')
0 0 0 0
@@ -479,6 +519,154 @@ a hex(b) c
3 F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2 NULL 3 F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2 NULL
4 F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2 NULL 4 F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2 NULL
DROP TABLE t1; DROP TABLE t1;
drop table if exists t1;
create table t1 select repeat('a',10) as c1;
delete from t1;
insert into t1 values (0x00),(0x01),(0x02),(0x03),(0x04),(0x05),(0x06),(0x07),(0x08),(0x09),(0x0A),(0x0B),(0x0C),(0x0D),(0x0E),(0x0F);
insert into t1 values (0x10),(0x11),(0x12),(0x13),(0x14),(0x15),(0x16),(0x17),(0x18),(0x19),(0x1A),(0x1B),(0x1C),(0x1D),(0x1E),(0x1F);
insert into t1 values (0x20),(0x21),(0x22),(0x23),(0x24),(0x25),(0x26),(0x27),(0x28),(0x29),(0x2A),(0x2B),(0x2C),(0x2D),(0x2E),(0x2F);
insert into t1 values (0x30),(0x31),(0x32),(0x33),(0x34),(0x35),(0x36),(0x37),(0x38),(0x39),(0x3A),(0x3B),(0x3C),(0x3D),(0x3E),(0x3F);
insert into t1 values (0x40),(0x41),(0x42),(0x43),(0x44),(0x45),(0x46),(0x47),(0x48),(0x49),(0x4A),(0x4B),(0x4C),(0x4D),(0x4E),(0x4F);
insert into t1 values (0x50),(0x51),(0x52),(0x53),(0x54),(0x55),(0x56),(0x57),(0x58),(0x59),(0x5A),(0x5B),(0x5C),(0x5D),(0x5E),(0x5F);
insert into t1 values (0x60),(0x61),(0x62),(0x63),(0x64),(0x65),(0x66),(0x67),(0x68),(0x69),(0x6A),(0x6B),(0x6C),(0x6D),(0x6E),(0x6F);
insert into t1 values (0x70),(0x71),(0x72),(0x73),(0x74),(0x75),(0x76),(0x77),(0x78),(0x79),(0x7A),(0x7B),(0x7C),(0x7D),(0x7E),(0x7F);
create view v1 as select c1, if(c1 < 0x20 OR c1=0x7F, concat('<',hex(c1),'>'),c1) as name from t1;
select column_name, collation_name from information_schema.columns where table_schema=database() and table_name='v1';
column_name collation_name
c1 big5_bin
name big5_bin
SELECT GROUP_CONCAT(name ORDER BY binary c1 SEPARATOR ''), GROUP_CONCAT(hex(c1) ORDER BY BINARY c1) FROM v1 GROUP BY c1;
GROUP_CONCAT(name ORDER BY binary c1 SEPARATOR '') GROUP_CONCAT(hex(c1) ORDER BY BINARY c1)
<00> 00
<01> 01
<02> 02
<03> 03
<04> 04
<05> 05
<06> 06
<07> 07
<08> 08
<09> 09
<0A> 0A
<0B> 0B
<0C> 0C
<0D> 0D
<0E> 0E
<0F> 0F
<10> 10
<11> 11
<12> 12
<13> 13
<14> 14
<15> 15
<16> 16
<17> 17
<18> 18
<19> 19
<1A> 1A
<1B> 1B
<1C> 1C
<1D> 1D
<1E> 1E
<1F> 1F
20
! 21
" 22
# 23
$ 24
% 25
& 26
' 27
( 28
) 29
* 2A
+ 2B
, 2C
- 2D
. 2E
/ 2F
0 30
1 31
2 32
3 33
4 34
5 35
6 36
7 37
8 38
9 39
: 3A
; 3B
< 3C
= 3D
> 3E
? 3F
@ 40
A 41
B 42
C 43
D 44
E 45
F 46
G 47
H 48
I 49
J 4A
K 4B
L 4C
M 4D
N 4E
O 4F
P 50
Q 51
R 52
S 53
T 54
U 55
V 56
W 57
X 58
Y 59
Z 5A
[ 5B
\ 5C
] 5D
^ 5E
_ 5F
` 60
a 61
b 62
c 63
d 64
e 65
f 66
g 67
h 68
i 69
j 6A
k 6B
l 6C
m 6D
n 6E
o 6F
p 70
q 71
r 72
s 73
t 74
u 75
v 76
w 77
x 78
y 79
z 7A
{ 7B
| 7C
} 7D
~ 7E
<7F> 7F
drop table t1;
drop view v1;
SELECT strcmp('a','a '), strcmp('a ','a'); SELECT strcmp('a','a '), strcmp('a ','a');
strcmp('a','a ') strcmp('a ','a') strcmp('a','a ') strcmp('a ','a')
0 0 0 0

View File

@@ -24,6 +24,7 @@ SET collation_connection='big5_bin';
-- source include/ctype_innodb_like.inc -- source include/ctype_innodb_like.inc
-- source include/ctype_like_escape.inc -- source include/ctype_like_escape.inc
-- source include/ctype_like_range_f1f2.inc -- source include/ctype_like_range_f1f2.inc
-- source include/ctype_ascii_order.inc
-- source include/ctype_pad_space.inc -- source include/ctype_pad_space.inc
# #

View File

@@ -598,6 +598,281 @@ SET DEFAULT_STORAGE_ENGINE=Default;
# End of 10.2 tests # End of 10.2 tests
# #
# #
# General tests
#
SET NAMES cp932;
drop table if exists t1;
create table t1 select repeat('a',10) as c1;
delete from t1;
insert into t1 values (0x00),(0x01),(0x02),(0x03),(0x04),(0x05),(0x06),(0x07),(0x08),(0x09),(0x0A),(0x0B),(0x0C),(0x0D),(0x0E),(0x0F);
insert into t1 values (0x10),(0x11),(0x12),(0x13),(0x14),(0x15),(0x16),(0x17),(0x18),(0x19),(0x1A),(0x1B),(0x1C),(0x1D),(0x1E),(0x1F);
insert into t1 values (0x20),(0x21),(0x22),(0x23),(0x24),(0x25),(0x26),(0x27),(0x28),(0x29),(0x2A),(0x2B),(0x2C),(0x2D),(0x2E),(0x2F);
insert into t1 values (0x30),(0x31),(0x32),(0x33),(0x34),(0x35),(0x36),(0x37),(0x38),(0x39),(0x3A),(0x3B),(0x3C),(0x3D),(0x3E),(0x3F);
insert into t1 values (0x40),(0x41),(0x42),(0x43),(0x44),(0x45),(0x46),(0x47),(0x48),(0x49),(0x4A),(0x4B),(0x4C),(0x4D),(0x4E),(0x4F);
insert into t1 values (0x50),(0x51),(0x52),(0x53),(0x54),(0x55),(0x56),(0x57),(0x58),(0x59),(0x5A),(0x5B),(0x5C),(0x5D),(0x5E),(0x5F);
insert into t1 values (0x60),(0x61),(0x62),(0x63),(0x64),(0x65),(0x66),(0x67),(0x68),(0x69),(0x6A),(0x6B),(0x6C),(0x6D),(0x6E),(0x6F);
insert into t1 values (0x70),(0x71),(0x72),(0x73),(0x74),(0x75),(0x76),(0x77),(0x78),(0x79),(0x7A),(0x7B),(0x7C),(0x7D),(0x7E),(0x7F);
create view v1 as select c1, if(c1 < 0x20 OR c1=0x7F, concat('<',hex(c1),'>'),c1) as name from t1;
select column_name, collation_name from information_schema.columns where table_schema=database() and table_name='v1';
column_name collation_name
c1 cp932_japanese_ci
name cp932_japanese_ci
SELECT GROUP_CONCAT(name ORDER BY binary c1 SEPARATOR ''), GROUP_CONCAT(hex(c1) ORDER BY BINARY c1) FROM v1 GROUP BY c1;
GROUP_CONCAT(name ORDER BY binary c1 SEPARATOR '') GROUP_CONCAT(hex(c1) ORDER BY BINARY c1)
<00> 00
<01> 01
<02> 02
<03> 03
<04> 04
<05> 05
<06> 06
<07> 07
<08> 08
<09> 09
<0A> 0A
<0B> 0B
<0C> 0C
<0D> 0D
<0E> 0E
<0F> 0F
<10> 10
<11> 11
<12> 12
<13> 13
<14> 14
<15> 15
<16> 16
<17> 17
<18> 18
<19> 19
<1A> 1A
<1B> 1B
<1C> 1C
<1D> 1D
<1E> 1E
<1F> 1F
20
! 21
" 22
# 23
$ 24
% 25
& 26
' 27
( 28
) 29
* 2A
+ 2B
, 2C
- 2D
. 2E
/ 2F
0 30
1 31
2 32
3 33
4 34
5 35
6 36
7 37
8 38
9 39
: 3A
; 3B
< 3C
= 3D
> 3E
? 3F
@ 40
Aa 41,61
Bb 42,62
Cc 43,63
Dd 44,64
Ee 45,65
Ff 46,66
Gg 47,67
Hh 48,68
Ii 49,69
Jj 4A,6A
Kk 4B,6B
Ll 4C,6C
Mm 4D,6D
Nn 4E,6E
Oo 4F,6F
Pp 50,70
Qq 51,71
Rr 52,72
Ss 53,73
Tt 54,74
Uu 55,75
Vv 56,76
Ww 57,77
Xx 58,78
Yy 59,79
Zz 5A,7A
[ 5B
\ 5C
] 5D
^ 5E
_ 5F
` 60
{ 7B
| 7C
} 7D
~ 7E
<7F> 7F
drop table t1;
drop view v1;
SET NAMES cp932 COLLATE cp932_bin;
drop table if exists t1;
create table t1 select repeat('a',10) as c1;
delete from t1;
insert into t1 values (0x00),(0x01),(0x02),(0x03),(0x04),(0x05),(0x06),(0x07),(0x08),(0x09),(0x0A),(0x0B),(0x0C),(0x0D),(0x0E),(0x0F);
insert into t1 values (0x10),(0x11),(0x12),(0x13),(0x14),(0x15),(0x16),(0x17),(0x18),(0x19),(0x1A),(0x1B),(0x1C),(0x1D),(0x1E),(0x1F);
insert into t1 values (0x20),(0x21),(0x22),(0x23),(0x24),(0x25),(0x26),(0x27),(0x28),(0x29),(0x2A),(0x2B),(0x2C),(0x2D),(0x2E),(0x2F);
insert into t1 values (0x30),(0x31),(0x32),(0x33),(0x34),(0x35),(0x36),(0x37),(0x38),(0x39),(0x3A),(0x3B),(0x3C),(0x3D),(0x3E),(0x3F);
insert into t1 values (0x40),(0x41),(0x42),(0x43),(0x44),(0x45),(0x46),(0x47),(0x48),(0x49),(0x4A),(0x4B),(0x4C),(0x4D),(0x4E),(0x4F);
insert into t1 values (0x50),(0x51),(0x52),(0x53),(0x54),(0x55),(0x56),(0x57),(0x58),(0x59),(0x5A),(0x5B),(0x5C),(0x5D),(0x5E),(0x5F);
insert into t1 values (0x60),(0x61),(0x62),(0x63),(0x64),(0x65),(0x66),(0x67),(0x68),(0x69),(0x6A),(0x6B),(0x6C),(0x6D),(0x6E),(0x6F);
insert into t1 values (0x70),(0x71),(0x72),(0x73),(0x74),(0x75),(0x76),(0x77),(0x78),(0x79),(0x7A),(0x7B),(0x7C),(0x7D),(0x7E),(0x7F);
create view v1 as select c1, if(c1 < 0x20 OR c1=0x7F, concat('<',hex(c1),'>'),c1) as name from t1;
select column_name, collation_name from information_schema.columns where table_schema=database() and table_name='v1';
column_name collation_name
c1 cp932_bin
name cp932_bin
SELECT GROUP_CONCAT(name ORDER BY binary c1 SEPARATOR ''), GROUP_CONCAT(hex(c1) ORDER BY BINARY c1) FROM v1 GROUP BY c1;
GROUP_CONCAT(name ORDER BY binary c1 SEPARATOR '') GROUP_CONCAT(hex(c1) ORDER BY BINARY c1)
<00> 00
<01> 01
<02> 02
<03> 03
<04> 04
<05> 05
<06> 06
<07> 07
<08> 08
<09> 09
<0A> 0A
<0B> 0B
<0C> 0C
<0D> 0D
<0E> 0E
<0F> 0F
<10> 10
<11> 11
<12> 12
<13> 13
<14> 14
<15> 15
<16> 16
<17> 17
<18> 18
<19> 19
<1A> 1A
<1B> 1B
<1C> 1C
<1D> 1D
<1E> 1E
<1F> 1F
20
! 21
" 22
# 23
$ 24
% 25
& 26
' 27
( 28
) 29
* 2A
+ 2B
, 2C
- 2D
. 2E
/ 2F
0 30
1 31
2 32
3 33
4 34
5 35
6 36
7 37
8 38
9 39
: 3A
; 3B
< 3C
= 3D
> 3E
? 3F
@ 40
A 41
B 42
C 43
D 44
E 45
F 46
G 47
H 48
I 49
J 4A
K 4B
L 4C
M 4D
N 4E
O 4F
P 50
Q 51
R 52
S 53
T 54
U 55
V 56
W 57
X 58
Y 59
Z 5A
[ 5B
\ 5C
] 5D
^ 5E
_ 5F
` 60
a 61
b 62
c 63
d 64
e 65
f 66
g 67
h 68
i 69
j 6A
k 6B
l 6C
m 6D
n 6E
o 6F
p 70
q 71
r 72
s 73
t 74
u 75
v 76
w 77
x 78
y 79
z 7A
{ 7B
| 7C
} 7D
~ 7E
<7F> 7F
drop table t1;
drop view v1;
#
# Start of 10.5 tests # Start of 10.5 tests
# #
# #

View File

@@ -49,6 +49,15 @@ let $coll_pad='cp932_bin';
--echo # --echo #
--echo #
--echo # General tests
--echo #
SET NAMES cp932;
-- source include/ctype_ascii_order.inc
SET NAMES cp932 COLLATE cp932_bin;
-- source include/ctype_ascii_order.inc
--echo # --echo #
--echo # Start of 10.5 tests --echo # Start of 10.5 tests
--echo # --echo #

View File

@@ -2,6 +2,281 @@ drop table if exists t1;
drop table if exists t2; drop table if exists t2;
drop table if exists t3; drop table if exists t3;
drop table if exists t4; drop table if exists t4;
#
# General tests
#
SET NAMES eucjpms;
drop table if exists t1;
create table t1 select repeat('a',10) as c1;
delete from t1;
insert into t1 values (0x00),(0x01),(0x02),(0x03),(0x04),(0x05),(0x06),(0x07),(0x08),(0x09),(0x0A),(0x0B),(0x0C),(0x0D),(0x0E),(0x0F);
insert into t1 values (0x10),(0x11),(0x12),(0x13),(0x14),(0x15),(0x16),(0x17),(0x18),(0x19),(0x1A),(0x1B),(0x1C),(0x1D),(0x1E),(0x1F);
insert into t1 values (0x20),(0x21),(0x22),(0x23),(0x24),(0x25),(0x26),(0x27),(0x28),(0x29),(0x2A),(0x2B),(0x2C),(0x2D),(0x2E),(0x2F);
insert into t1 values (0x30),(0x31),(0x32),(0x33),(0x34),(0x35),(0x36),(0x37),(0x38),(0x39),(0x3A),(0x3B),(0x3C),(0x3D),(0x3E),(0x3F);
insert into t1 values (0x40),(0x41),(0x42),(0x43),(0x44),(0x45),(0x46),(0x47),(0x48),(0x49),(0x4A),(0x4B),(0x4C),(0x4D),(0x4E),(0x4F);
insert into t1 values (0x50),(0x51),(0x52),(0x53),(0x54),(0x55),(0x56),(0x57),(0x58),(0x59),(0x5A),(0x5B),(0x5C),(0x5D),(0x5E),(0x5F);
insert into t1 values (0x60),(0x61),(0x62),(0x63),(0x64),(0x65),(0x66),(0x67),(0x68),(0x69),(0x6A),(0x6B),(0x6C),(0x6D),(0x6E),(0x6F);
insert into t1 values (0x70),(0x71),(0x72),(0x73),(0x74),(0x75),(0x76),(0x77),(0x78),(0x79),(0x7A),(0x7B),(0x7C),(0x7D),(0x7E),(0x7F);
create view v1 as select c1, if(c1 < 0x20 OR c1=0x7F, concat('<',hex(c1),'>'),c1) as name from t1;
select column_name, collation_name from information_schema.columns where table_schema=database() and table_name='v1';
column_name collation_name
c1 eucjpms_japanese_ci
name eucjpms_japanese_ci
SELECT GROUP_CONCAT(name ORDER BY binary c1 SEPARATOR ''), GROUP_CONCAT(hex(c1) ORDER BY BINARY c1) FROM v1 GROUP BY c1;
GROUP_CONCAT(name ORDER BY binary c1 SEPARATOR '') GROUP_CONCAT(hex(c1) ORDER BY BINARY c1)
<00> 00
<01> 01
<02> 02
<03> 03
<04> 04
<05> 05
<06> 06
<07> 07
<08> 08
<09> 09
<0A> 0A
<0B> 0B
<0C> 0C
<0D> 0D
<0E> 0E
<0F> 0F
<10> 10
<11> 11
<12> 12
<13> 13
<14> 14
<15> 15
<16> 16
<17> 17
<18> 18
<19> 19
<1A> 1A
<1B> 1B
<1C> 1C
<1D> 1D
<1E> 1E
<1F> 1F
20
! 21
" 22
# 23
$ 24
% 25
& 26
' 27
( 28
) 29
* 2A
+ 2B
, 2C
- 2D
. 2E
/ 2F
0 30
1 31
2 32
3 33
4 34
5 35
6 36
7 37
8 38
9 39
: 3A
; 3B
< 3C
= 3D
> 3E
? 3F
@ 40
Aa 41,61
Bb 42,62
Cc 43,63
Dd 44,64
Ee 45,65
Ff 46,66
Gg 47,67
Hh 48,68
Ii 49,69
Jj 4A,6A
Kk 4B,6B
Ll 4C,6C
Mm 4D,6D
Nn 4E,6E
Oo 4F,6F
Pp 50,70
Qq 51,71
Rr 52,72
Ss 53,73
Tt 54,74
Uu 55,75
Vv 56,76
Ww 57,77
Xx 58,78
Yy 59,79
Zz 5A,7A
[ 5B
\ 5C
] 5D
^ 5E
_ 5F
` 60
{ 7B
| 7C
} 7D
~ 7E
<7F> 7F
drop table t1;
drop view v1;
SET NAMES eucjpms COLLATE eucjpms_bin;
drop table if exists t1;
create table t1 select repeat('a',10) as c1;
delete from t1;
insert into t1 values (0x00),(0x01),(0x02),(0x03),(0x04),(0x05),(0x06),(0x07),(0x08),(0x09),(0x0A),(0x0B),(0x0C),(0x0D),(0x0E),(0x0F);
insert into t1 values (0x10),(0x11),(0x12),(0x13),(0x14),(0x15),(0x16),(0x17),(0x18),(0x19),(0x1A),(0x1B),(0x1C),(0x1D),(0x1E),(0x1F);
insert into t1 values (0x20),(0x21),(0x22),(0x23),(0x24),(0x25),(0x26),(0x27),(0x28),(0x29),(0x2A),(0x2B),(0x2C),(0x2D),(0x2E),(0x2F);
insert into t1 values (0x30),(0x31),(0x32),(0x33),(0x34),(0x35),(0x36),(0x37),(0x38),(0x39),(0x3A),(0x3B),(0x3C),(0x3D),(0x3E),(0x3F);
insert into t1 values (0x40),(0x41),(0x42),(0x43),(0x44),(0x45),(0x46),(0x47),(0x48),(0x49),(0x4A),(0x4B),(0x4C),(0x4D),(0x4E),(0x4F);
insert into t1 values (0x50),(0x51),(0x52),(0x53),(0x54),(0x55),(0x56),(0x57),(0x58),(0x59),(0x5A),(0x5B),(0x5C),(0x5D),(0x5E),(0x5F);
insert into t1 values (0x60),(0x61),(0x62),(0x63),(0x64),(0x65),(0x66),(0x67),(0x68),(0x69),(0x6A),(0x6B),(0x6C),(0x6D),(0x6E),(0x6F);
insert into t1 values (0x70),(0x71),(0x72),(0x73),(0x74),(0x75),(0x76),(0x77),(0x78),(0x79),(0x7A),(0x7B),(0x7C),(0x7D),(0x7E),(0x7F);
create view v1 as select c1, if(c1 < 0x20 OR c1=0x7F, concat('<',hex(c1),'>'),c1) as name from t1;
select column_name, collation_name from information_schema.columns where table_schema=database() and table_name='v1';
column_name collation_name
c1 eucjpms_bin
name eucjpms_bin
SELECT GROUP_CONCAT(name ORDER BY binary c1 SEPARATOR ''), GROUP_CONCAT(hex(c1) ORDER BY BINARY c1) FROM v1 GROUP BY c1;
GROUP_CONCAT(name ORDER BY binary c1 SEPARATOR '') GROUP_CONCAT(hex(c1) ORDER BY BINARY c1)
<00> 00
<01> 01
<02> 02
<03> 03
<04> 04
<05> 05
<06> 06
<07> 07
<08> 08
<09> 09
<0A> 0A
<0B> 0B
<0C> 0C
<0D> 0D
<0E> 0E
<0F> 0F
<10> 10
<11> 11
<12> 12
<13> 13
<14> 14
<15> 15
<16> 16
<17> 17
<18> 18
<19> 19
<1A> 1A
<1B> 1B
<1C> 1C
<1D> 1D
<1E> 1E
<1F> 1F
20
! 21
" 22
# 23
$ 24
% 25
& 26
' 27
( 28
) 29
* 2A
+ 2B
, 2C
- 2D
. 2E
/ 2F
0 30
1 31
2 32
3 33
4 34
5 35
6 36
7 37
8 38
9 39
: 3A
; 3B
< 3C
= 3D
> 3E
? 3F
@ 40
A 41
B 42
C 43
D 44
E 45
F 46
G 47
H 48
I 49
J 4A
K 4B
L 4C
M 4D
N 4E
O 4F
P 50
Q 51
R 52
S 53
T 54
U 55
V 56
W 57
X 58
Y 59
Z 5A
[ 5B
\ 5C
] 5D
^ 5E
_ 5F
` 60
a 61
b 62
c 63
d 64
e 65
f 66
g 67
h 68
i 69
j 6A
k 6B
l 6C
m 6D
n 6E
o 6F
p 70
q 71
r 72
s 73
t 74
u 75
v 76
w 77
x 78
y 79
z 7A
{ 7B
| 7C
} 7D
~ 7E
<7F> 7F
drop table t1;
drop view v1;
set names eucjpms; set names eucjpms;
set character_set_database = eucjpms; set character_set_database = eucjpms;
CREATE TABLE t1(c1 CHAR(1)) DEFAULT CHARACTER SET = eucjpms; CREATE TABLE t1(c1 CHAR(1)) DEFAULT CHARACTER SET = eucjpms;

View File

@@ -8,6 +8,14 @@ drop table if exists t3;
drop table if exists t4; drop table if exists t4;
--enable_warnings --enable_warnings
--echo #
--echo # General tests
--echo #
SET NAMES eucjpms;
-- source include/ctype_ascii_order.inc
SET NAMES eucjpms COLLATE eucjpms_bin;
-- source include/ctype_ascii_order.inc
set names eucjpms; set names eucjpms;
set character_set_database = eucjpms; set character_set_database = eucjpms;

View File

@@ -243,6 +243,128 @@ a hex(b) c
3 F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2 NULL 3 F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2 NULL
4 F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2 NULL 4 F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2 NULL
DROP TABLE t1; DROP TABLE t1;
drop table if exists t1;
create table t1 select repeat('a',10) as c1;
delete from t1;
insert into t1 values (0x00),(0x01),(0x02),(0x03),(0x04),(0x05),(0x06),(0x07),(0x08),(0x09),(0x0A),(0x0B),(0x0C),(0x0D),(0x0E),(0x0F);
insert into t1 values (0x10),(0x11),(0x12),(0x13),(0x14),(0x15),(0x16),(0x17),(0x18),(0x19),(0x1A),(0x1B),(0x1C),(0x1D),(0x1E),(0x1F);
insert into t1 values (0x20),(0x21),(0x22),(0x23),(0x24),(0x25),(0x26),(0x27),(0x28),(0x29),(0x2A),(0x2B),(0x2C),(0x2D),(0x2E),(0x2F);
insert into t1 values (0x30),(0x31),(0x32),(0x33),(0x34),(0x35),(0x36),(0x37),(0x38),(0x39),(0x3A),(0x3B),(0x3C),(0x3D),(0x3E),(0x3F);
insert into t1 values (0x40),(0x41),(0x42),(0x43),(0x44),(0x45),(0x46),(0x47),(0x48),(0x49),(0x4A),(0x4B),(0x4C),(0x4D),(0x4E),(0x4F);
insert into t1 values (0x50),(0x51),(0x52),(0x53),(0x54),(0x55),(0x56),(0x57),(0x58),(0x59),(0x5A),(0x5B),(0x5C),(0x5D),(0x5E),(0x5F);
insert into t1 values (0x60),(0x61),(0x62),(0x63),(0x64),(0x65),(0x66),(0x67),(0x68),(0x69),(0x6A),(0x6B),(0x6C),(0x6D),(0x6E),(0x6F);
insert into t1 values (0x70),(0x71),(0x72),(0x73),(0x74),(0x75),(0x76),(0x77),(0x78),(0x79),(0x7A),(0x7B),(0x7C),(0x7D),(0x7E),(0x7F);
create view v1 as select c1, if(c1 < 0x20 OR c1=0x7F, concat('<',hex(c1),'>'),c1) as name from t1;
select column_name, collation_name from information_schema.columns where table_schema=database() and table_name='v1';
column_name collation_name
c1 euckr_korean_ci
name euckr_korean_ci
SELECT GROUP_CONCAT(name ORDER BY binary c1 SEPARATOR ''), GROUP_CONCAT(hex(c1) ORDER BY BINARY c1) FROM v1 GROUP BY c1;
GROUP_CONCAT(name ORDER BY binary c1 SEPARATOR '') GROUP_CONCAT(hex(c1) ORDER BY BINARY c1)
<00> 00
<01> 01
<02> 02
<03> 03
<04> 04
<05> 05
<06> 06
<07> 07
<08> 08
<09> 09
<0A> 0A
<0B> 0B
<0C> 0C
<0D> 0D
<0E> 0E
<0F> 0F
<10> 10
<11> 11
<12> 12
<13> 13
<14> 14
<15> 15
<16> 16
<17> 17
<18> 18
<19> 19
<1A> 1A
<1B> 1B
<1C> 1C
<1D> 1D
<1E> 1E
<1F> 1F
20
! 21
" 22
# 23
$ 24
% 25
& 26
' 27
( 28
) 29
* 2A
+ 2B
, 2C
- 2D
. 2E
/ 2F
0 30
1 31
2 32
3 33
4 34
5 35
6 36
7 37
8 38
9 39
: 3A
; 3B
< 3C
= 3D
> 3E
? 3F
@ 40
Aa 41,61
Bb 42,62
Cc 43,63
Dd 44,64
Ee 45,65
Ff 46,66
Gg 47,67
Hh 48,68
Ii 49,69
Jj 4A,6A
Kk 4B,6B
Ll 4C,6C
Mm 4D,6D
Nn 4E,6E
Oo 4F,6F
Pp 50,70
Qq 51,71
Rr 52,72
Ss 53,73
Tt 54,74
Uu 55,75
Vv 56,76
Ww 57,77
Xx 58,78
Yy 59,79
Zz 5A,7A
[ 5B
\ 5C
] 5D
^ 5E
_ 5F
` 60
{ 7B
| 7C
} 7D
~ 7E
<7F> 7F
drop table t1;
drop view v1;
SET collation_connection='euckr_bin'; SET collation_connection='euckr_bin';
create table t1 select repeat('a',4000) a; create table t1 select repeat('a',4000) a;
delete from t1; delete from t1;
@@ -384,6 +506,154 @@ a hex(b) c
3 F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2 NULL 3 F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2 NULL
4 F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2 NULL 4 F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2 NULL
DROP TABLE t1; DROP TABLE t1;
drop table if exists t1;
create table t1 select repeat('a',10) as c1;
delete from t1;
insert into t1 values (0x00),(0x01),(0x02),(0x03),(0x04),(0x05),(0x06),(0x07),(0x08),(0x09),(0x0A),(0x0B),(0x0C),(0x0D),(0x0E),(0x0F);
insert into t1 values (0x10),(0x11),(0x12),(0x13),(0x14),(0x15),(0x16),(0x17),(0x18),(0x19),(0x1A),(0x1B),(0x1C),(0x1D),(0x1E),(0x1F);
insert into t1 values (0x20),(0x21),(0x22),(0x23),(0x24),(0x25),(0x26),(0x27),(0x28),(0x29),(0x2A),(0x2B),(0x2C),(0x2D),(0x2E),(0x2F);
insert into t1 values (0x30),(0x31),(0x32),(0x33),(0x34),(0x35),(0x36),(0x37),(0x38),(0x39),(0x3A),(0x3B),(0x3C),(0x3D),(0x3E),(0x3F);
insert into t1 values (0x40),(0x41),(0x42),(0x43),(0x44),(0x45),(0x46),(0x47),(0x48),(0x49),(0x4A),(0x4B),(0x4C),(0x4D),(0x4E),(0x4F);
insert into t1 values (0x50),(0x51),(0x52),(0x53),(0x54),(0x55),(0x56),(0x57),(0x58),(0x59),(0x5A),(0x5B),(0x5C),(0x5D),(0x5E),(0x5F);
insert into t1 values (0x60),(0x61),(0x62),(0x63),(0x64),(0x65),(0x66),(0x67),(0x68),(0x69),(0x6A),(0x6B),(0x6C),(0x6D),(0x6E),(0x6F);
insert into t1 values (0x70),(0x71),(0x72),(0x73),(0x74),(0x75),(0x76),(0x77),(0x78),(0x79),(0x7A),(0x7B),(0x7C),(0x7D),(0x7E),(0x7F);
create view v1 as select c1, if(c1 < 0x20 OR c1=0x7F, concat('<',hex(c1),'>'),c1) as name from t1;
select column_name, collation_name from information_schema.columns where table_schema=database() and table_name='v1';
column_name collation_name
c1 euckr_bin
name euckr_bin
SELECT GROUP_CONCAT(name ORDER BY binary c1 SEPARATOR ''), GROUP_CONCAT(hex(c1) ORDER BY BINARY c1) FROM v1 GROUP BY c1;
GROUP_CONCAT(name ORDER BY binary c1 SEPARATOR '') GROUP_CONCAT(hex(c1) ORDER BY BINARY c1)
<00> 00
<01> 01
<02> 02
<03> 03
<04> 04
<05> 05
<06> 06
<07> 07
<08> 08
<09> 09
<0A> 0A
<0B> 0B
<0C> 0C
<0D> 0D
<0E> 0E
<0F> 0F
<10> 10
<11> 11
<12> 12
<13> 13
<14> 14
<15> 15
<16> 16
<17> 17
<18> 18
<19> 19
<1A> 1A
<1B> 1B
<1C> 1C
<1D> 1D
<1E> 1E
<1F> 1F
20
! 21
" 22
# 23
$ 24
% 25
& 26
' 27
( 28
) 29
* 2A
+ 2B
, 2C
- 2D
. 2E
/ 2F
0 30
1 31
2 32
3 33
4 34
5 35
6 36
7 37
8 38
9 39
: 3A
; 3B
< 3C
= 3D
> 3E
? 3F
@ 40
A 41
B 42
C 43
D 44
E 45
F 46
G 47
H 48
I 49
J 4A
K 4B
L 4C
M 4D
N 4E
O 4F
P 50
Q 51
R 52
S 53
T 54
U 55
V 56
W 57
X 58
Y 59
Z 5A
[ 5B
\ 5C
] 5D
^ 5E
_ 5F
` 60
a 61
b 62
c 63
d 64
e 65
f 66
g 67
h 68
i 69
j 6A
k 6B
l 6C
m 6D
n 6E
o 6F
p 70
q 71
r 72
s 73
t 74
u 75
v 76
w 77
x 78
y 79
z 7A
{ 7B
| 7C
} 7D
~ 7E
<7F> 7F
drop table t1;
drop view v1;
SET NAMES euckr; SET NAMES euckr;
CREATE TABLE t1 (a text) character set euckr; CREATE TABLE t1 (a text) character set euckr;
INSERT INTO t1 VALUES (0xA2E6),(0xFEF7); INSERT INTO t1 VALUES (0xA2E6),(0xFEF7);

View File

@@ -17,11 +17,13 @@ SET collation_connection='euckr_korean_ci';
-- source include/ctype_innodb_like.inc -- source include/ctype_innodb_like.inc
-- source include/ctype_like_escape.inc -- source include/ctype_like_escape.inc
-- source include/ctype_like_range_f1f2.inc -- source include/ctype_like_range_f1f2.inc
-- source include/ctype_ascii_order.inc
SET collation_connection='euckr_bin'; SET collation_connection='euckr_bin';
-- source include/ctype_filesort.inc -- source include/ctype_filesort.inc
-- source include/ctype_innodb_like.inc -- source include/ctype_innodb_like.inc
-- source include/ctype_like_escape.inc -- source include/ctype_like_escape.inc
-- source include/ctype_like_range_f1f2.inc -- source include/ctype_like_range_f1f2.inc
-- source include/ctype_ascii_order.inc
# #
# Bug#15377 Valid multibyte sequences are truncated on INSERT # Bug#15377 Valid multibyte sequences are truncated on INSERT

View File

@@ -246,14 +246,53 @@ DROP TABLE t1;
drop table if exists t1; drop table if exists t1;
create table t1 select repeat('a',10) as c1; create table t1 select repeat('a',10) as c1;
delete from t1; delete from t1;
insert into t1 values (0x00),(0x01),(0x02),(0x03),(0x04),(0x05),(0x06),(0x07),(0x08),(0x09),(0x0A),(0x0B),(0x0C),(0x0D),(0x0E),(0x0F);
insert into t1 values (0x10),(0x11),(0x12),(0x13),(0x14),(0x15),(0x16),(0x17),(0x18),(0x19),(0x1A),(0x1B),(0x1C),(0x1D),(0x1E),(0x1F);
insert into t1 values (0x20),(0x21),(0x22),(0x23),(0x24),(0x25),(0x26),(0x27),(0x28),(0x29),(0x2A),(0x2B),(0x2C),(0x2D),(0x2E),(0x2F); insert into t1 values (0x20),(0x21),(0x22),(0x23),(0x24),(0x25),(0x26),(0x27),(0x28),(0x29),(0x2A),(0x2B),(0x2C),(0x2D),(0x2E),(0x2F);
insert into t1 values (0x30),(0x31),(0x32),(0x33),(0x34),(0x35),(0x36),(0x37),(0x38),(0x39),(0x3A),(0x3B),(0x3C),(0x3D),(0x3E),(0x3F); insert into t1 values (0x30),(0x31),(0x32),(0x33),(0x34),(0x35),(0x36),(0x37),(0x38),(0x39),(0x3A),(0x3B),(0x3C),(0x3D),(0x3E),(0x3F);
insert into t1 values (0x40),(0x41),(0x42),(0x43),(0x44),(0x45),(0x46),(0x47),(0x48),(0x49),(0x4A),(0x4B),(0x4C),(0x4D),(0x4E),(0x4F); insert into t1 values (0x40),(0x41),(0x42),(0x43),(0x44),(0x45),(0x46),(0x47),(0x48),(0x49),(0x4A),(0x4B),(0x4C),(0x4D),(0x4E),(0x4F);
insert into t1 values (0x50),(0x51),(0x52),(0x53),(0x54),(0x55),(0x56),(0x57),(0x58),(0x59),(0x5A),(0x5B),(0x5C),(0x5D),(0x5E),(0x5F); insert into t1 values (0x50),(0x51),(0x52),(0x53),(0x54),(0x55),(0x56),(0x57),(0x58),(0x59),(0x5A),(0x5B),(0x5C),(0x5D),(0x5E),(0x5F);
insert into t1 values (0x60),(0x61),(0x62),(0x63),(0x64),(0x65),(0x66),(0x67),(0x68),(0x69),(0x6A),(0x6B),(0x6C),(0x6D),(0x6E),(0x6F); insert into t1 values (0x60),(0x61),(0x62),(0x63),(0x64),(0x65),(0x66),(0x67),(0x68),(0x69),(0x6A),(0x6B),(0x6C),(0x6D),(0x6E),(0x6F);
insert into t1 values (0x70),(0x71),(0x72),(0x73),(0x74),(0x75),(0x76),(0x77),(0x78),(0x79),(0x7A),(0x7B),(0x7C),(0x7D),(0x7E),(0x7F); insert into t1 values (0x70),(0x71),(0x72),(0x73),(0x74),(0x75),(0x76),(0x77),(0x78),(0x79),(0x7A),(0x7B),(0x7C),(0x7D),(0x7E),(0x7F);
SELECT GROUP_CONCAT(c1 ORDER BY binary c1 SEPARATOR ''), GROUP_CONCAT(hex(c1) ORDER BY BINARY c1) FROM t1 GROUP BY c1; create view v1 as select c1, if(c1 < 0x20 OR c1=0x7F, concat('<',hex(c1),'>'),c1) as name from t1;
GROUP_CONCAT(c1 ORDER BY binary c1 SEPARATOR '') GROUP_CONCAT(hex(c1) ORDER BY BINARY c1) select column_name, collation_name from information_schema.columns where table_schema=database() and table_name='v1';
column_name collation_name
c1 gb2312_chinese_ci
name gb2312_chinese_ci
SELECT GROUP_CONCAT(name ORDER BY binary c1 SEPARATOR ''), GROUP_CONCAT(hex(c1) ORDER BY BINARY c1) FROM v1 GROUP BY c1;
GROUP_CONCAT(name ORDER BY binary c1 SEPARATOR '') GROUP_CONCAT(hex(c1) ORDER BY BINARY c1)
<00> 00
<01> 01
<02> 02
<03> 03
<04> 04
<05> 05
<06> 06
<07> 07
<08> 08
<09> 09
<0A> 0A
<0B> 0B
<0C> 0C
<0D> 0D
<0E> 0E
<0F> 0F
<10> 10
<11> 11
<12> 12
<13> 13
<14> 14
<15> 15
<16> 16
<17> 17
<18> 18
<19> 19
<1A> 1A
<1B> 1B
<1C> 1C
<1D> 1D
<1E> 1E
<1F> 1F
20 20
! 21 ! 21
" 22 " 22
@@ -322,8 +361,9 @@ _ 5F
{ 7B { 7B
| 7C | 7C
} 7D } 7D
 7F <7F> 7F
drop table t1; drop table t1;
drop view v1;
SET collation_connection='gb2312_bin'; SET collation_connection='gb2312_bin';
create table t1 select repeat('a',4000) a; create table t1 select repeat('a',4000) a;
delete from t1; delete from t1;
@@ -465,6 +505,154 @@ a hex(b) c
3 F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2 NULL 3 F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2 NULL
4 F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2 NULL 4 F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2 NULL
DROP TABLE t1; DROP TABLE t1;
drop table if exists t1;
create table t1 select repeat('a',10) as c1;
delete from t1;
insert into t1 values (0x00),(0x01),(0x02),(0x03),(0x04),(0x05),(0x06),(0x07),(0x08),(0x09),(0x0A),(0x0B),(0x0C),(0x0D),(0x0E),(0x0F);
insert into t1 values (0x10),(0x11),(0x12),(0x13),(0x14),(0x15),(0x16),(0x17),(0x18),(0x19),(0x1A),(0x1B),(0x1C),(0x1D),(0x1E),(0x1F);
insert into t1 values (0x20),(0x21),(0x22),(0x23),(0x24),(0x25),(0x26),(0x27),(0x28),(0x29),(0x2A),(0x2B),(0x2C),(0x2D),(0x2E),(0x2F);
insert into t1 values (0x30),(0x31),(0x32),(0x33),(0x34),(0x35),(0x36),(0x37),(0x38),(0x39),(0x3A),(0x3B),(0x3C),(0x3D),(0x3E),(0x3F);
insert into t1 values (0x40),(0x41),(0x42),(0x43),(0x44),(0x45),(0x46),(0x47),(0x48),(0x49),(0x4A),(0x4B),(0x4C),(0x4D),(0x4E),(0x4F);
insert into t1 values (0x50),(0x51),(0x52),(0x53),(0x54),(0x55),(0x56),(0x57),(0x58),(0x59),(0x5A),(0x5B),(0x5C),(0x5D),(0x5E),(0x5F);
insert into t1 values (0x60),(0x61),(0x62),(0x63),(0x64),(0x65),(0x66),(0x67),(0x68),(0x69),(0x6A),(0x6B),(0x6C),(0x6D),(0x6E),(0x6F);
insert into t1 values (0x70),(0x71),(0x72),(0x73),(0x74),(0x75),(0x76),(0x77),(0x78),(0x79),(0x7A),(0x7B),(0x7C),(0x7D),(0x7E),(0x7F);
create view v1 as select c1, if(c1 < 0x20 OR c1=0x7F, concat('<',hex(c1),'>'),c1) as name from t1;
select column_name, collation_name from information_schema.columns where table_schema=database() and table_name='v1';
column_name collation_name
c1 gb2312_bin
name gb2312_bin
SELECT GROUP_CONCAT(name ORDER BY binary c1 SEPARATOR ''), GROUP_CONCAT(hex(c1) ORDER BY BINARY c1) FROM v1 GROUP BY c1;
GROUP_CONCAT(name ORDER BY binary c1 SEPARATOR '') GROUP_CONCAT(hex(c1) ORDER BY BINARY c1)
<00> 00
<01> 01
<02> 02
<03> 03
<04> 04
<05> 05
<06> 06
<07> 07
<08> 08
<09> 09
<0A> 0A
<0B> 0B
<0C> 0C
<0D> 0D
<0E> 0E
<0F> 0F
<10> 10
<11> 11
<12> 12
<13> 13
<14> 14
<15> 15
<16> 16
<17> 17
<18> 18
<19> 19
<1A> 1A
<1B> 1B
<1C> 1C
<1D> 1D
<1E> 1E
<1F> 1F
20
! 21
" 22
# 23
$ 24
% 25
& 26
' 27
( 28
) 29
* 2A
+ 2B
, 2C
- 2D
. 2E
/ 2F
0 30
1 31
2 32
3 33
4 34
5 35
6 36
7 37
8 38
9 39
: 3A
; 3B
< 3C
= 3D
> 3E
? 3F
@ 40
A 41
B 42
C 43
D 44
E 45
F 46
G 47
H 48
I 49
J 4A
K 4B
L 4C
M 4D
N 4E
O 4F
P 50
Q 51
R 52
S 53
T 54
U 55
V 56
W 57
X 58
Y 59
Z 5A
[ 5B
\ 5C
] 5D
^ 5E
_ 5F
` 60
a 61
b 62
c 63
d 64
e 65
f 66
g 67
h 68
i 69
j 6A
k 6B
l 6C
m 6D
n 6E
o 6F
p 70
q 71
r 72
s 73
t 74
u 75
v 76
w 77
x 78
y 79
z 7A
{ 7B
| 7C
} 7D
~ 7E
<7F> 7F
drop table t1;
drop view v1;
SET NAMES gb2312; SET NAMES gb2312;
CREATE TABLE t1 (a text) character set gb2312; CREATE TABLE t1 (a text) character set gb2312;
INSERT INTO t1 VALUES (0xA2A1),(0xD7FE); INSERT INTO t1 VALUES (0xA2A1),(0xD7FE);

View File

@@ -23,6 +23,7 @@ SET collation_connection='gb2312_bin';
-- source include/ctype_innodb_like.inc -- source include/ctype_innodb_like.inc
-- source include/ctype_like_escape.inc -- source include/ctype_like_escape.inc
-- source include/ctype_like_range_f1f2.inc -- source include/ctype_like_range_f1f2.inc
-- source include/ctype_ascii_order.inc
# #
# Bug#15377 Valid multibyte sequences are truncated on INSERT # Bug#15377 Valid multibyte sequences are truncated on INSERT

View File

@@ -246,14 +246,53 @@ DROP TABLE t1;
drop table if exists t1; drop table if exists t1;
create table t1 select repeat('a',10) as c1; create table t1 select repeat('a',10) as c1;
delete from t1; delete from t1;
insert into t1 values (0x00),(0x01),(0x02),(0x03),(0x04),(0x05),(0x06),(0x07),(0x08),(0x09),(0x0A),(0x0B),(0x0C),(0x0D),(0x0E),(0x0F);
insert into t1 values (0x10),(0x11),(0x12),(0x13),(0x14),(0x15),(0x16),(0x17),(0x18),(0x19),(0x1A),(0x1B),(0x1C),(0x1D),(0x1E),(0x1F);
insert into t1 values (0x20),(0x21),(0x22),(0x23),(0x24),(0x25),(0x26),(0x27),(0x28),(0x29),(0x2A),(0x2B),(0x2C),(0x2D),(0x2E),(0x2F); insert into t1 values (0x20),(0x21),(0x22),(0x23),(0x24),(0x25),(0x26),(0x27),(0x28),(0x29),(0x2A),(0x2B),(0x2C),(0x2D),(0x2E),(0x2F);
insert into t1 values (0x30),(0x31),(0x32),(0x33),(0x34),(0x35),(0x36),(0x37),(0x38),(0x39),(0x3A),(0x3B),(0x3C),(0x3D),(0x3E),(0x3F); insert into t1 values (0x30),(0x31),(0x32),(0x33),(0x34),(0x35),(0x36),(0x37),(0x38),(0x39),(0x3A),(0x3B),(0x3C),(0x3D),(0x3E),(0x3F);
insert into t1 values (0x40),(0x41),(0x42),(0x43),(0x44),(0x45),(0x46),(0x47),(0x48),(0x49),(0x4A),(0x4B),(0x4C),(0x4D),(0x4E),(0x4F); insert into t1 values (0x40),(0x41),(0x42),(0x43),(0x44),(0x45),(0x46),(0x47),(0x48),(0x49),(0x4A),(0x4B),(0x4C),(0x4D),(0x4E),(0x4F);
insert into t1 values (0x50),(0x51),(0x52),(0x53),(0x54),(0x55),(0x56),(0x57),(0x58),(0x59),(0x5A),(0x5B),(0x5C),(0x5D),(0x5E),(0x5F); insert into t1 values (0x50),(0x51),(0x52),(0x53),(0x54),(0x55),(0x56),(0x57),(0x58),(0x59),(0x5A),(0x5B),(0x5C),(0x5D),(0x5E),(0x5F);
insert into t1 values (0x60),(0x61),(0x62),(0x63),(0x64),(0x65),(0x66),(0x67),(0x68),(0x69),(0x6A),(0x6B),(0x6C),(0x6D),(0x6E),(0x6F); insert into t1 values (0x60),(0x61),(0x62),(0x63),(0x64),(0x65),(0x66),(0x67),(0x68),(0x69),(0x6A),(0x6B),(0x6C),(0x6D),(0x6E),(0x6F);
insert into t1 values (0x70),(0x71),(0x72),(0x73),(0x74),(0x75),(0x76),(0x77),(0x78),(0x79),(0x7A),(0x7B),(0x7C),(0x7D),(0x7E),(0x7F); insert into t1 values (0x70),(0x71),(0x72),(0x73),(0x74),(0x75),(0x76),(0x77),(0x78),(0x79),(0x7A),(0x7B),(0x7C),(0x7D),(0x7E),(0x7F);
SELECT GROUP_CONCAT(c1 ORDER BY binary c1 SEPARATOR ''), GROUP_CONCAT(hex(c1) ORDER BY BINARY c1) FROM t1 GROUP BY c1; create view v1 as select c1, if(c1 < 0x20 OR c1=0x7F, concat('<',hex(c1),'>'),c1) as name from t1;
GROUP_CONCAT(c1 ORDER BY binary c1 SEPARATOR '') GROUP_CONCAT(hex(c1) ORDER BY BINARY c1) select column_name, collation_name from information_schema.columns where table_schema=database() and table_name='v1';
column_name collation_name
c1 gbk_chinese_ci
name gbk_chinese_ci
SELECT GROUP_CONCAT(name ORDER BY binary c1 SEPARATOR ''), GROUP_CONCAT(hex(c1) ORDER BY BINARY c1) FROM v1 GROUP BY c1;
GROUP_CONCAT(name ORDER BY binary c1 SEPARATOR '') GROUP_CONCAT(hex(c1) ORDER BY BINARY c1)
<00> 00
<01> 01
<02> 02
<03> 03
<04> 04
<05> 05
<06> 06
<07> 07
<08> 08
<09> 09
<0A> 0A
<0B> 0B
<0C> 0C
<0D> 0D
<0E> 0E
<0F> 0F
<10> 10
<11> 11
<12> 12
<13> 13
<14> 14
<15> 15
<16> 16
<17> 17
<18> 18
<19> 19
<1A> 1A
<1B> 1B
<1C> 1C
<1D> 1D
<1E> 1E
<1F> 1F
20 20
! 21 ! 21
" 22 " 22
@@ -322,8 +361,9 @@ _ 5F
{ 7B { 7B
| 7C | 7C
} 7D } 7D
 7F <7F> 7F
drop table t1; drop table t1;
drop view v1;
SET collation_connection='gbk_bin'; SET collation_connection='gbk_bin';
create table t1 select repeat('a',4000) a; create table t1 select repeat('a',4000) a;
delete from t1; delete from t1;
@@ -465,6 +505,154 @@ a hex(b) c
3 F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2 NULL 3 F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2 NULL
4 F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2 NULL 4 F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2 NULL
DROP TABLE t1; DROP TABLE t1;
drop table if exists t1;
create table t1 select repeat('a',10) as c1;
delete from t1;
insert into t1 values (0x00),(0x01),(0x02),(0x03),(0x04),(0x05),(0x06),(0x07),(0x08),(0x09),(0x0A),(0x0B),(0x0C),(0x0D),(0x0E),(0x0F);
insert into t1 values (0x10),(0x11),(0x12),(0x13),(0x14),(0x15),(0x16),(0x17),(0x18),(0x19),(0x1A),(0x1B),(0x1C),(0x1D),(0x1E),(0x1F);
insert into t1 values (0x20),(0x21),(0x22),(0x23),(0x24),(0x25),(0x26),(0x27),(0x28),(0x29),(0x2A),(0x2B),(0x2C),(0x2D),(0x2E),(0x2F);
insert into t1 values (0x30),(0x31),(0x32),(0x33),(0x34),(0x35),(0x36),(0x37),(0x38),(0x39),(0x3A),(0x3B),(0x3C),(0x3D),(0x3E),(0x3F);
insert into t1 values (0x40),(0x41),(0x42),(0x43),(0x44),(0x45),(0x46),(0x47),(0x48),(0x49),(0x4A),(0x4B),(0x4C),(0x4D),(0x4E),(0x4F);
insert into t1 values (0x50),(0x51),(0x52),(0x53),(0x54),(0x55),(0x56),(0x57),(0x58),(0x59),(0x5A),(0x5B),(0x5C),(0x5D),(0x5E),(0x5F);
insert into t1 values (0x60),(0x61),(0x62),(0x63),(0x64),(0x65),(0x66),(0x67),(0x68),(0x69),(0x6A),(0x6B),(0x6C),(0x6D),(0x6E),(0x6F);
insert into t1 values (0x70),(0x71),(0x72),(0x73),(0x74),(0x75),(0x76),(0x77),(0x78),(0x79),(0x7A),(0x7B),(0x7C),(0x7D),(0x7E),(0x7F);
create view v1 as select c1, if(c1 < 0x20 OR c1=0x7F, concat('<',hex(c1),'>'),c1) as name from t1;
select column_name, collation_name from information_schema.columns where table_schema=database() and table_name='v1';
column_name collation_name
c1 gbk_bin
name gbk_bin
SELECT GROUP_CONCAT(name ORDER BY binary c1 SEPARATOR ''), GROUP_CONCAT(hex(c1) ORDER BY BINARY c1) FROM v1 GROUP BY c1;
GROUP_CONCAT(name ORDER BY binary c1 SEPARATOR '') GROUP_CONCAT(hex(c1) ORDER BY BINARY c1)
<00> 00
<01> 01
<02> 02
<03> 03
<04> 04
<05> 05
<06> 06
<07> 07
<08> 08
<09> 09
<0A> 0A
<0B> 0B
<0C> 0C
<0D> 0D
<0E> 0E
<0F> 0F
<10> 10
<11> 11
<12> 12
<13> 13
<14> 14
<15> 15
<16> 16
<17> 17
<18> 18
<19> 19
<1A> 1A
<1B> 1B
<1C> 1C
<1D> 1D
<1E> 1E
<1F> 1F
20
! 21
" 22
# 23
$ 24
% 25
& 26
' 27
( 28
) 29
* 2A
+ 2B
, 2C
- 2D
. 2E
/ 2F
0 30
1 31
2 32
3 33
4 34
5 35
6 36
7 37
8 38
9 39
: 3A
; 3B
< 3C
= 3D
> 3E
? 3F
@ 40
A 41
B 42
C 43
D 44
E 45
F 46
G 47
H 48
I 49
J 4A
K 4B
L 4C
M 4D
N 4E
O 4F
P 50
Q 51
R 52
S 53
T 54
U 55
V 56
W 57
X 58
Y 59
Z 5A
[ 5B
\ 5C
] 5D
^ 5E
_ 5F
` 60
a 61
b 62
c 63
d 64
e 65
f 66
g 67
h 68
i 69
j 6A
k 6B
l 6C
m 6D
n 6E
o 6F
p 70
q 71
r 72
s 73
t 74
u 75
v 76
w 77
x 78
y 79
z 7A
{ 7B
| 7C
} 7D
~ 7E
<7F> 7F
drop table t1;
drop view v1;
SET NAMES gbk; SET NAMES gbk;
CREATE TABLE t1 (a text) character set gbk; CREATE TABLE t1 (a text) character set gbk;
INSERT INTO t1 VALUES (0xA3A0),(0xA1A1); INSERT INTO t1 VALUES (0xA3A0),(0xA1A1);

View File

@@ -23,6 +23,7 @@ SET collation_connection='gbk_bin';
-- source include/ctype_innodb_like.inc -- source include/ctype_innodb_like.inc
-- source include/ctype_like_escape.inc -- source include/ctype_like_escape.inc
-- source include/ctype_like_range_f1f2.inc -- source include/ctype_like_range_f1f2.inc
-- source include/ctype_ascii_order.inc
# #
# Bug#11987 mysql will truncate the text when # Bug#11987 mysql will truncate the text when

View File

@@ -231,6 +231,128 @@ SELECT HEX(subject),HEX(pattern),STR_TO_DATE(subject, pattern) FROM t1;
HEX(subject) HEX(pattern) STR_TO_DATE(subject, pattern) HEX(subject) HEX(pattern) STR_TO_DATE(subject, pattern)
323030318180303181803031 25598180256D81802564 2001-01-01 00:00:00.000000 323030318180303181803031 25598180256D81802564 2001-01-01 00:00:00.000000
DROP TABLE t1; DROP TABLE t1;
drop table if exists t1;
create table t1 select repeat('a',10) as c1;
delete from t1;
insert into t1 values (0x00),(0x01),(0x02),(0x03),(0x04),(0x05),(0x06),(0x07),(0x08),(0x09),(0x0A),(0x0B),(0x0C),(0x0D),(0x0E),(0x0F);
insert into t1 values (0x10),(0x11),(0x12),(0x13),(0x14),(0x15),(0x16),(0x17),(0x18),(0x19),(0x1A),(0x1B),(0x1C),(0x1D),(0x1E),(0x1F);
insert into t1 values (0x20),(0x21),(0x22),(0x23),(0x24),(0x25),(0x26),(0x27),(0x28),(0x29),(0x2A),(0x2B),(0x2C),(0x2D),(0x2E),(0x2F);
insert into t1 values (0x30),(0x31),(0x32),(0x33),(0x34),(0x35),(0x36),(0x37),(0x38),(0x39),(0x3A),(0x3B),(0x3C),(0x3D),(0x3E),(0x3F);
insert into t1 values (0x40),(0x41),(0x42),(0x43),(0x44),(0x45),(0x46),(0x47),(0x48),(0x49),(0x4A),(0x4B),(0x4C),(0x4D),(0x4E),(0x4F);
insert into t1 values (0x50),(0x51),(0x52),(0x53),(0x54),(0x55),(0x56),(0x57),(0x58),(0x59),(0x5A),(0x5B),(0x5C),(0x5D),(0x5E),(0x5F);
insert into t1 values (0x60),(0x61),(0x62),(0x63),(0x64),(0x65),(0x66),(0x67),(0x68),(0x69),(0x6A),(0x6B),(0x6C),(0x6D),(0x6E),(0x6F);
insert into t1 values (0x70),(0x71),(0x72),(0x73),(0x74),(0x75),(0x76),(0x77),(0x78),(0x79),(0x7A),(0x7B),(0x7C),(0x7D),(0x7E),(0x7F);
create view v1 as select c1, if(c1 < 0x20 OR c1=0x7F, concat('<',hex(c1),'>'),c1) as name from t1;
select column_name, collation_name from information_schema.columns where table_schema=database() and table_name='v1';
column_name collation_name
c1 sjis_japanese_ci
name sjis_japanese_ci
SELECT GROUP_CONCAT(name ORDER BY binary c1 SEPARATOR ''), GROUP_CONCAT(hex(c1) ORDER BY BINARY c1) FROM v1 GROUP BY c1;
GROUP_CONCAT(name ORDER BY binary c1 SEPARATOR '') GROUP_CONCAT(hex(c1) ORDER BY BINARY c1)
<00> 00
<01> 01
<02> 02
<03> 03
<04> 04
<05> 05
<06> 06
<07> 07
<08> 08
<09> 09
<0A> 0A
<0B> 0B
<0C> 0C
<0D> 0D
<0E> 0E
<0F> 0F
<10> 10
<11> 11
<12> 12
<13> 13
<14> 14
<15> 15
<16> 16
<17> 17
<18> 18
<19> 19
<1A> 1A
<1B> 1B
<1C> 1C
<1D> 1D
<1E> 1E
<1F> 1F
20
! 21
" 22
# 23
$ 24
% 25
& 26
' 27
( 28
) 29
* 2A
+ 2B
, 2C
- 2D
. 2E
/ 2F
0 30
1 31
2 32
3 33
4 34
5 35
6 36
7 37
8 38
9 39
: 3A
; 3B
< 3C
= 3D
> 3E
? 3F
@ 40
Aa 41,61
Bb 42,62
Cc 43,63
Dd 44,64
Ee 45,65
Ff 46,66
Gg 47,67
Hh 48,68
Ii 49,69
Jj 4A,6A
Kk 4B,6B
Ll 4C,6C
Mm 4D,6D
Nn 4E,6E
Oo 4F,6F
Pp 50,70
Qq 51,71
Rr 52,72
Ss 53,73
Tt 54,74
Uu 55,75
Vv 56,76
Ww 57,77
Xx 58,78
Yy 59,79
Zz 5A,7A
[ 5B
\ 5C
] 5D
^ 5E
_ 5F
` 60
{ 7B
| 7C
} 7D
~ 7E
<7F> 7F
drop table t1;
drop view v1;
SET collation_connection='sjis_bin'; SET collation_connection='sjis_bin';
create table t1 select repeat('a',4000) a; create table t1 select repeat('a',4000) a;
delete from t1; delete from t1;
@@ -372,6 +494,154 @@ a hex(b) c
3 F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2 NULL 3 F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2 NULL
4 F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2 NULL 4 F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2 NULL
DROP TABLE t1; DROP TABLE t1;
drop table if exists t1;
create table t1 select repeat('a',10) as c1;
delete from t1;
insert into t1 values (0x00),(0x01),(0x02),(0x03),(0x04),(0x05),(0x06),(0x07),(0x08),(0x09),(0x0A),(0x0B),(0x0C),(0x0D),(0x0E),(0x0F);
insert into t1 values (0x10),(0x11),(0x12),(0x13),(0x14),(0x15),(0x16),(0x17),(0x18),(0x19),(0x1A),(0x1B),(0x1C),(0x1D),(0x1E),(0x1F);
insert into t1 values (0x20),(0x21),(0x22),(0x23),(0x24),(0x25),(0x26),(0x27),(0x28),(0x29),(0x2A),(0x2B),(0x2C),(0x2D),(0x2E),(0x2F);
insert into t1 values (0x30),(0x31),(0x32),(0x33),(0x34),(0x35),(0x36),(0x37),(0x38),(0x39),(0x3A),(0x3B),(0x3C),(0x3D),(0x3E),(0x3F);
insert into t1 values (0x40),(0x41),(0x42),(0x43),(0x44),(0x45),(0x46),(0x47),(0x48),(0x49),(0x4A),(0x4B),(0x4C),(0x4D),(0x4E),(0x4F);
insert into t1 values (0x50),(0x51),(0x52),(0x53),(0x54),(0x55),(0x56),(0x57),(0x58),(0x59),(0x5A),(0x5B),(0x5C),(0x5D),(0x5E),(0x5F);
insert into t1 values (0x60),(0x61),(0x62),(0x63),(0x64),(0x65),(0x66),(0x67),(0x68),(0x69),(0x6A),(0x6B),(0x6C),(0x6D),(0x6E),(0x6F);
insert into t1 values (0x70),(0x71),(0x72),(0x73),(0x74),(0x75),(0x76),(0x77),(0x78),(0x79),(0x7A),(0x7B),(0x7C),(0x7D),(0x7E),(0x7F);
create view v1 as select c1, if(c1 < 0x20 OR c1=0x7F, concat('<',hex(c1),'>'),c1) as name from t1;
select column_name, collation_name from information_schema.columns where table_schema=database() and table_name='v1';
column_name collation_name
c1 sjis_bin
name sjis_bin
SELECT GROUP_CONCAT(name ORDER BY binary c1 SEPARATOR ''), GROUP_CONCAT(hex(c1) ORDER BY BINARY c1) FROM v1 GROUP BY c1;
GROUP_CONCAT(name ORDER BY binary c1 SEPARATOR '') GROUP_CONCAT(hex(c1) ORDER BY BINARY c1)
<00> 00
<01> 01
<02> 02
<03> 03
<04> 04
<05> 05
<06> 06
<07> 07
<08> 08
<09> 09
<0A> 0A
<0B> 0B
<0C> 0C
<0D> 0D
<0E> 0E
<0F> 0F
<10> 10
<11> 11
<12> 12
<13> 13
<14> 14
<15> 15
<16> 16
<17> 17
<18> 18
<19> 19
<1A> 1A
<1B> 1B
<1C> 1C
<1D> 1D
<1E> 1E
<1F> 1F
20
! 21
" 22
# 23
$ 24
% 25
& 26
' 27
( 28
) 29
* 2A
+ 2B
, 2C
- 2D
. 2E
/ 2F
0 30
1 31
2 32
3 33
4 34
5 35
6 36
7 37
8 38
9 39
: 3A
; 3B
< 3C
= 3D
> 3E
? 3F
@ 40
A 41
B 42
C 43
D 44
E 45
F 46
G 47
H 48
I 49
J 4A
K 4B
L 4C
M 4D
N 4E
O 4F
P 50
Q 51
R 52
S 53
T 54
U 55
V 56
W 57
X 58
Y 59
Z 5A
[ 5B
\ 5C
] 5D
^ 5E
_ 5F
` 60
a 61
b 62
c 63
d 64
e 65
f 66
g 67
h 68
i 69
j 6A
k 6B
l 6C
m 6D
n 6E
o 6F
p 70
q 71
r 72
s 73
t 74
u 75
v 76
w 77
x 78
y 79
z 7A
{ 7B
| 7C
} 7D
~ 7E
<7F> 7F
drop table t1;
drop view v1;
SET NAMES sjis; SET NAMES sjis;
SELECT HEX('<27><><EFBFBD><EFBFBD><EFBFBD>@<40>\') FROM DUAL; SELECT HEX('<27><><EFBFBD><EFBFBD><EFBFBD>@<40>\') FROM DUAL;
HEX('<27><><EFBFBD><EFBFBD><EFBFBD>@<40>\') HEX('<27><><EFBFBD><EFBFBD><EFBFBD>@<40>\')

View File

@@ -70,11 +70,13 @@ SET collation_connection='sjis_japanese_ci';
-- source include/ctype_like_escape.inc -- source include/ctype_like_escape.inc
-- source include/ctype_like_range_f1f2.inc -- source include/ctype_like_range_f1f2.inc
-- source include/ctype_str_to_date.inc -- source include/ctype_str_to_date.inc
-- source include/ctype_ascii_order.inc
SET collation_connection='sjis_bin'; SET collation_connection='sjis_bin';
-- source include/ctype_filesort.inc -- source include/ctype_filesort.inc
-- source include/ctype_innodb_like.inc -- source include/ctype_innodb_like.inc
-- source include/ctype_like_escape.inc -- source include/ctype_like_escape.inc
-- source include/ctype_like_range_f1f2.inc -- source include/ctype_like_range_f1f2.inc
-- source include/ctype_ascii_order.inc
# Check parsing of string literals in SJIS with multibyte characters that # Check parsing of string literals in SJIS with multibyte characters that
# have an embedded \ in them. (Bug #8303) # have an embedded \ in them. (Bug #8303)

View File

@@ -3042,15 +3042,54 @@ SELECT '\%b' LIKE '%\%';
drop table if exists t1; drop table if exists t1;
create table t1 select repeat('a',10) as c1; create table t1 select repeat('a',10) as c1;
delete from t1; delete from t1;
insert into t1 values (0x00),(0x01),(0x02),(0x03),(0x04),(0x05),(0x06),(0x07),(0x08),(0x09),(0x0A),(0x0B),(0x0C),(0x0D),(0x0E),(0x0F);
insert into t1 values (0x10),(0x11),(0x12),(0x13),(0x14),(0x15),(0x16),(0x17),(0x18),(0x19),(0x1A),(0x1B),(0x1C),(0x1D),(0x1E),(0x1F);
insert into t1 values (0x20),(0x21),(0x22),(0x23),(0x24),(0x25),(0x26),(0x27),(0x28),(0x29),(0x2A),(0x2B),(0x2C),(0x2D),(0x2E),(0x2F); insert into t1 values (0x20),(0x21),(0x22),(0x23),(0x24),(0x25),(0x26),(0x27),(0x28),(0x29),(0x2A),(0x2B),(0x2C),(0x2D),(0x2E),(0x2F);
insert into t1 values (0x30),(0x31),(0x32),(0x33),(0x34),(0x35),(0x36),(0x37),(0x38),(0x39),(0x3A),(0x3B),(0x3C),(0x3D),(0x3E),(0x3F); insert into t1 values (0x30),(0x31),(0x32),(0x33),(0x34),(0x35),(0x36),(0x37),(0x38),(0x39),(0x3A),(0x3B),(0x3C),(0x3D),(0x3E),(0x3F);
insert into t1 values (0x40),(0x41),(0x42),(0x43),(0x44),(0x45),(0x46),(0x47),(0x48),(0x49),(0x4A),(0x4B),(0x4C),(0x4D),(0x4E),(0x4F); insert into t1 values (0x40),(0x41),(0x42),(0x43),(0x44),(0x45),(0x46),(0x47),(0x48),(0x49),(0x4A),(0x4B),(0x4C),(0x4D),(0x4E),(0x4F);
insert into t1 values (0x50),(0x51),(0x52),(0x53),(0x54),(0x55),(0x56),(0x57),(0x58),(0x59),(0x5A),(0x5B),(0x5C),(0x5D),(0x5E),(0x5F); insert into t1 values (0x50),(0x51),(0x52),(0x53),(0x54),(0x55),(0x56),(0x57),(0x58),(0x59),(0x5A),(0x5B),(0x5C),(0x5D),(0x5E),(0x5F);
insert into t1 values (0x60),(0x61),(0x62),(0x63),(0x64),(0x65),(0x66),(0x67),(0x68),(0x69),(0x6A),(0x6B),(0x6C),(0x6D),(0x6E),(0x6F); insert into t1 values (0x60),(0x61),(0x62),(0x63),(0x64),(0x65),(0x66),(0x67),(0x68),(0x69),(0x6A),(0x6B),(0x6C),(0x6D),(0x6E),(0x6F);
insert into t1 values (0x70),(0x71),(0x72),(0x73),(0x74),(0x75),(0x76),(0x77),(0x78),(0x79),(0x7A),(0x7B),(0x7C),(0x7D),(0x7E),(0x7F); insert into t1 values (0x70),(0x71),(0x72),(0x73),(0x74),(0x75),(0x76),(0x77),(0x78),(0x79),(0x7A),(0x7B),(0x7C),(0x7D),(0x7E),(0x7F);
SELECT GROUP_CONCAT(c1 ORDER BY binary c1 SEPARATOR ''), GROUP_CONCAT(hex(c1) ORDER BY BINARY c1) FROM t1 GROUP BY c1; create view v1 as select c1, if(c1 < 0x20 OR c1=0x7F, concat('<',hex(c1),'>'),c1) as name from t1;
GROUP_CONCAT(c1 ORDER BY binary c1 SEPARATOR '') GROUP_CONCAT(hex(c1) ORDER BY BINARY c1) select column_name, collation_name from information_schema.columns where table_schema=database() and table_name='v1';
column_name collation_name
c1 tis620_thai_ci
name tis620_thai_ci
SELECT GROUP_CONCAT(name ORDER BY binary c1 SEPARATOR ''), GROUP_CONCAT(hex(c1) ORDER BY BINARY c1) FROM v1 GROUP BY c1;
GROUP_CONCAT(name ORDER BY binary c1 SEPARATOR '') GROUP_CONCAT(hex(c1) ORDER BY BINARY c1)
<01> 01
<02> 02
<03> 03
<04> 04
<05> 05
<06> 06
<07> 07
<08> 08
<09> 09
<0A> 0A
<0B> 0B
<0C> 0C
<0D> 0D
<0E> 0E
<0F> 0F
<10> 10
<11> 11
<12> 12
<13> 13
<14> 14
<15> 15
<16> 16
<17> 17
<18> 18
<19> 19
<1A> 1A
<1B> 1B
<1C> 1C
<1D> 1D
<1E> 1E
<1F> 1F
20 20
<00> 00
! 21 ! 21
" 22 " 22
# 23 # 23
@@ -3119,8 +3158,9 @@ Zz 5A,7A
| 7C | 7C
} 7D } 7D
~ 7E ~ 7E
 7F <7F> 7F
drop table t1; drop table t1;
drop view v1;
# #
# MDEV-7149 Constant condition propagation erroneously applied for LIKE # MDEV-7149 Constant condition propagation erroneously applied for LIKE
# #

View File

@@ -1,5 +1,281 @@
drop table if exists t1; drop table if exists t1;
set names ujis; set names ujis;
#
# General tests
#
SET NAMES ujis;
drop table if exists t1;
create table t1 select repeat('a',10) as c1;
delete from t1;
insert into t1 values (0x00),(0x01),(0x02),(0x03),(0x04),(0x05),(0x06),(0x07),(0x08),(0x09),(0x0A),(0x0B),(0x0C),(0x0D),(0x0E),(0x0F);
insert into t1 values (0x10),(0x11),(0x12),(0x13),(0x14),(0x15),(0x16),(0x17),(0x18),(0x19),(0x1A),(0x1B),(0x1C),(0x1D),(0x1E),(0x1F);
insert into t1 values (0x20),(0x21),(0x22),(0x23),(0x24),(0x25),(0x26),(0x27),(0x28),(0x29),(0x2A),(0x2B),(0x2C),(0x2D),(0x2E),(0x2F);
insert into t1 values (0x30),(0x31),(0x32),(0x33),(0x34),(0x35),(0x36),(0x37),(0x38),(0x39),(0x3A),(0x3B),(0x3C),(0x3D),(0x3E),(0x3F);
insert into t1 values (0x40),(0x41),(0x42),(0x43),(0x44),(0x45),(0x46),(0x47),(0x48),(0x49),(0x4A),(0x4B),(0x4C),(0x4D),(0x4E),(0x4F);
insert into t1 values (0x50),(0x51),(0x52),(0x53),(0x54),(0x55),(0x56),(0x57),(0x58),(0x59),(0x5A),(0x5B),(0x5C),(0x5D),(0x5E),(0x5F);
insert into t1 values (0x60),(0x61),(0x62),(0x63),(0x64),(0x65),(0x66),(0x67),(0x68),(0x69),(0x6A),(0x6B),(0x6C),(0x6D),(0x6E),(0x6F);
insert into t1 values (0x70),(0x71),(0x72),(0x73),(0x74),(0x75),(0x76),(0x77),(0x78),(0x79),(0x7A),(0x7B),(0x7C),(0x7D),(0x7E),(0x7F);
create view v1 as select c1, if(c1 < 0x20 OR c1=0x7F, concat('<',hex(c1),'>'),c1) as name from t1;
select column_name, collation_name from information_schema.columns where table_schema=database() and table_name='v1';
column_name collation_name
c1 ujis_japanese_ci
name ujis_japanese_ci
SELECT GROUP_CONCAT(name ORDER BY binary c1 SEPARATOR ''), GROUP_CONCAT(hex(c1) ORDER BY BINARY c1) FROM v1 GROUP BY c1;
GROUP_CONCAT(name ORDER BY binary c1 SEPARATOR '') GROUP_CONCAT(hex(c1) ORDER BY BINARY c1)
<00> 00
<01> 01
<02> 02
<03> 03
<04> 04
<05> 05
<06> 06
<07> 07
<08> 08
<09> 09
<0A> 0A
<0B> 0B
<0C> 0C
<0D> 0D
<0E> 0E
<0F> 0F
<10> 10
<11> 11
<12> 12
<13> 13
<14> 14
<15> 15
<16> 16
<17> 17
<18> 18
<19> 19
<1A> 1A
<1B> 1B
<1C> 1C
<1D> 1D
<1E> 1E
<1F> 1F
20
! 21
" 22
# 23
$ 24
% 25
& 26
' 27
( 28
) 29
* 2A
+ 2B
, 2C
- 2D
. 2E
/ 2F
0 30
1 31
2 32
3 33
4 34
5 35
6 36
7 37
8 38
9 39
: 3A
; 3B
< 3C
= 3D
> 3E
? 3F
@ 40
Aa 41,61
Bb 42,62
Cc 43,63
Dd 44,64
Ee 45,65
Ff 46,66
Gg 47,67
Hh 48,68
Ii 49,69
Jj 4A,6A
Kk 4B,6B
Ll 4C,6C
Mm 4D,6D
Nn 4E,6E
Oo 4F,6F
Pp 50,70
Qq 51,71
Rr 52,72
Ss 53,73
Tt 54,74
Uu 55,75
Vv 56,76
Ww 57,77
Xx 58,78
Yy 59,79
Zz 5A,7A
[ 5B
\ 5C
] 5D
^ 5E
_ 5F
` 60
{ 7B
| 7C
} 7D
~ 7E
<7F> 7F
drop table t1;
drop view v1;
SET NAMES ujis COLLATE ujis_bin;
drop table if exists t1;
create table t1 select repeat('a',10) as c1;
delete from t1;
insert into t1 values (0x00),(0x01),(0x02),(0x03),(0x04),(0x05),(0x06),(0x07),(0x08),(0x09),(0x0A),(0x0B),(0x0C),(0x0D),(0x0E),(0x0F);
insert into t1 values (0x10),(0x11),(0x12),(0x13),(0x14),(0x15),(0x16),(0x17),(0x18),(0x19),(0x1A),(0x1B),(0x1C),(0x1D),(0x1E),(0x1F);
insert into t1 values (0x20),(0x21),(0x22),(0x23),(0x24),(0x25),(0x26),(0x27),(0x28),(0x29),(0x2A),(0x2B),(0x2C),(0x2D),(0x2E),(0x2F);
insert into t1 values (0x30),(0x31),(0x32),(0x33),(0x34),(0x35),(0x36),(0x37),(0x38),(0x39),(0x3A),(0x3B),(0x3C),(0x3D),(0x3E),(0x3F);
insert into t1 values (0x40),(0x41),(0x42),(0x43),(0x44),(0x45),(0x46),(0x47),(0x48),(0x49),(0x4A),(0x4B),(0x4C),(0x4D),(0x4E),(0x4F);
insert into t1 values (0x50),(0x51),(0x52),(0x53),(0x54),(0x55),(0x56),(0x57),(0x58),(0x59),(0x5A),(0x5B),(0x5C),(0x5D),(0x5E),(0x5F);
insert into t1 values (0x60),(0x61),(0x62),(0x63),(0x64),(0x65),(0x66),(0x67),(0x68),(0x69),(0x6A),(0x6B),(0x6C),(0x6D),(0x6E),(0x6F);
insert into t1 values (0x70),(0x71),(0x72),(0x73),(0x74),(0x75),(0x76),(0x77),(0x78),(0x79),(0x7A),(0x7B),(0x7C),(0x7D),(0x7E),(0x7F);
create view v1 as select c1, if(c1 < 0x20 OR c1=0x7F, concat('<',hex(c1),'>'),c1) as name from t1;
select column_name, collation_name from information_schema.columns where table_schema=database() and table_name='v1';
column_name collation_name
c1 ujis_bin
name ujis_bin
SELECT GROUP_CONCAT(name ORDER BY binary c1 SEPARATOR ''), GROUP_CONCAT(hex(c1) ORDER BY BINARY c1) FROM v1 GROUP BY c1;
GROUP_CONCAT(name ORDER BY binary c1 SEPARATOR '') GROUP_CONCAT(hex(c1) ORDER BY BINARY c1)
<00> 00
<01> 01
<02> 02
<03> 03
<04> 04
<05> 05
<06> 06
<07> 07
<08> 08
<09> 09
<0A> 0A
<0B> 0B
<0C> 0C
<0D> 0D
<0E> 0E
<0F> 0F
<10> 10
<11> 11
<12> 12
<13> 13
<14> 14
<15> 15
<16> 16
<17> 17
<18> 18
<19> 19
<1A> 1A
<1B> 1B
<1C> 1C
<1D> 1D
<1E> 1E
<1F> 1F
20
! 21
" 22
# 23
$ 24
% 25
& 26
' 27
( 28
) 29
* 2A
+ 2B
, 2C
- 2D
. 2E
/ 2F
0 30
1 31
2 32
3 33
4 34
5 35
6 36
7 37
8 38
9 39
: 3A
; 3B
< 3C
= 3D
> 3E
? 3F
@ 40
A 41
B 42
C 43
D 44
E 45
F 46
G 47
H 48
I 49
J 4A
K 4B
L 4C
M 4D
N 4E
O 4F
P 50
Q 51
R 52
S 53
T 54
U 55
V 56
W 57
X 58
Y 59
Z 5A
[ 5B
\ 5C
] 5D
^ 5E
_ 5F
` 60
a 61
b 62
c 63
d 64
e 65
f 66
g 67
h 68
i 69
j 6A
k 6B
l 6C
m 6D
n 6E
o 6F
p 70
q 71
r 72
s 73
t 74
u 75
v 76
w 77
x 78
y 79
z 7A
{ 7B
| 7C
} 7D
~ 7E
<7F> 7F
drop table t1;
drop view v1;
SET NAMES ujis;
create table t1 (c text character set ujis); create table t1 (c text character set ujis);
insert into t1 values (0xa4a2),(0xa4a3); insert into t1 values (0xa4a2),(0xa4a3);
select hex(left(c,1)) from t1 group by c; select hex(left(c,1)) from t1 group by c;

View File

@@ -9,10 +9,20 @@ drop table if exists t1;
set names ujis; set names ujis;
--echo #
--echo # General tests
--echo #
SET NAMES ujis;
-- source include/ctype_ascii_order.inc
SET NAMES ujis COLLATE ujis_bin;
-- source include/ctype_ascii_order.inc
# #
# Test problem with LEFT() # Test problem with LEFT()
# #
SET NAMES ujis;
create table t1 (c text character set ujis); create table t1 (c text character set ujis);
insert into t1 values (0xa4a2),(0xa4a3); insert into t1 values (0xa4a2),(0xa4a3);
select hex(left(c,1)) from t1 group by c; select hex(left(c,1)) from t1 group by c;

189
strings/ctype-ascii.h Normal file
View File

@@ -0,0 +1,189 @@
#ifndef CTYPE_ASCII_INCLUDED
#define CTYPE_ASCII_INCLUDED
#include "myisampack.h"
/*
Magic expression. It uses the fact that for any byte value X in
the range 0..31 (0x00..0x1F) the expression (X+31)*5 returns
the 7th bit (0x80) set only for the following six (out of 32) values:
0x00, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F.
These values correspond to offsets of non-letter characters
in the ASCII table:
The following macro sets the bit 0x20 for the following characters:
---------------- --------------------------------
Magic bit 10000000000000000000000000011111
ASCII 0x00..0x1F ................................ Control
ASCII 0x20..0x3F ................................ Punctuation, digits
ASCII 0x40..0x5F @ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_
ASCII 0x60..0x7F `abcdefghijklmnopqrstuvwxyz{|}~.
---------------- --------------------------------
We shift the magic bit 0x80 right twice to make it 0x20.
So on the ranges [40..5F] and [60..7F] the expression
has the bit 0x20 set for all non-letter characters.
Note, other bits contain garbage.
Requirements:
All bytes must be in the range [00..7F],
to avoid overflow and carry to the next byte.
*/
#define MY_ASCII_20_IS_SET_IF_NOT_LETTER_MAGIC(i) \
(((((i)+0x1F1F1F1F1F1F1F1FULL) & 0x1F1F1F1F1F1F1F1F) * 5) >> 2)
/*
The following macro returns the bit 0x20 set to:
- 1 for input bytes in the ranges [60..7F] or [E0..FF]
- 0 otherwise
Bytes in the ranges [40..7F] and [C0..FF] have the bit 0x40 set.
Bytes in the ranges [60..7F] and [E0..FF] have the bit 0x20 set.
Hex BinHi BinLo
---- -1-- ----
0x[4C]X .10. ....
0x[5D]X .10. ....
0x[6E]X .11. ....
0x[7F]X .11. ....
*/
#define MY_ASCII_20_IS_SET_IF_RANGE_60_7F_OR_E0_FF(i) (((i) >> 1) & ((i)))
/*
The following macro evaluates to exactly 0x20 for all
lower case ASCII letters [a-z], and to 0x00 otherwise:
Value Range Character range Subrange
-------- -------- -------------------------------- -------
00000000 0x00..0x3F Control, punctuation, digits
00100000 0x40..0x5F @ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_ letters A-Z
00000000 0x40..0x5F @ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_ non-letters
00100000 0x60..0x7F `abcdefghijklmnopqrstuvwxyz{|}~. letters a-z
00000000 0x60..0x7F `abcdefghijklmnopqrstuvwxyz{|}~. non-letters
Requirements:
All bytes must be in the range [00..7F].
See the comments in MY_ASCII_20_IS_SET_IF_NOT_LETTER_MAGIC().
*/
#define MY_ASCII_20_IF_IS_LOWER_LETTER(i) \
(MY_ASCII_20_IS_SET_IF_RANGE_60_7F_OR_E0_FF(i) & \
~MY_ASCII_20_IS_SET_IF_NOT_LETTER_MAGIC(i) & \
0x2020202020202020)
/*
Convert lower case ASCII letters to upper case by unsetting
the bit 0x20 with help of the magic expression.
Requirements:
All bytes must be in the range [00..7F].
See the comments in MY_ASCII_20_IS_SET_IF_NOT_LETTER_MAGIC()
*/
#define MY_ASCII_TOUPPER_MAGIC(i) \
(i ^ MY_ASCII_20_IF_IS_LOWER_LETTER(i))
/*
Convert a string (consisting of 8 bytes stored in uint64)
to upper case algorithmically.
Requirements:
All bytes must be in the range [00..0x7F].
See the comments in MY_ASCII_20_IS_SET_IF_NOT_LETTER_MAGIC().
The result on 8bit data is unpredictable!!!
The caller should make sure not to pass 8bit data.
*/
static inline ulonglong my_ascii_to_upper_magic_uint64(ulonglong i)
{
return MY_ASCII_TOUPPER_MAGIC(i);
}
/*
Check if:
- both strings "a" and "b" have at least 4 bytes, and
- both strings have only 7bit data.
*/
static inline int
my_strcoll_ascii_4bytes_found(const uchar *a, const uchar *ae,
const uchar *b, const uchar *be)
{
return a + 4 <= ae && b + 4 <= be &&
(uint4korr(b) & 0x80808080) == 0 &&
(uint4korr(a) & 0x80808080) == 0;
}
/*
Compare the leading four 7bit ASCII bytes in two strings case insensitively
by converting letters [a-z] to upper case [A-Z].
Requirements:
- The input strings must have at least four bytes, and
- The leading four bytes in both strings must be 7bit ASCII.
The caller must make sure to provide only strings that meet
these requirements. The result on 8-bit data is unpredictable
as 8-bit bytes may cause overflow in my_ascii_to_upper_magic_uint64().
See comments above.
*/
static inline int
my_strcoll_ascii_toupper_4bytes(const uchar *a, const uchar *b)
{
ulonglong abn= (((ulonglong) mi_uint4korr(a)) << 32) | mi_uint4korr(b);
abn= my_ascii_to_upper_magic_uint64(abn);
if ((uint32) (abn >> 32) == (uint32) abn)
return 0;
return ((uint32) (abn >> 32)) < ((uint32) abn) ? -1 : + 1;
}
/*
Compare the leading eight 7bit ASCII bytes in two strings case insensitively
by converting letters [a-z] to upper case [A-Z].
Requirements:
- The input strings must have at least eight bytes, and
- The leading eight bytes in both strings must be 7bit ASCII.
See comments in my_strcoll_ascii_toupper_4bytes().
*/
static inline int
my_strcoll_ascii_toupper_8bytes(const uchar *a, const uchar *b)
{
/*
TODO:
Try to get advantage of SIMD instructions by massive comparison
(16 bytes at a time) of characters against (x>='a' && x<='z') using:
- either explicit intrinsics
- or a loop that can get vectorized automatically by some compilers.
*/
ulonglong an= mi_uint8korr(a);
ulonglong bn= mi_uint8korr(b);
an= my_ascii_to_upper_magic_uint64(an);
bn= my_ascii_to_upper_magic_uint64(bn);
return an == bn ? 0 : an < bn ? -1 : +1;
}
/*
Compare the leading four 7bit ASCII bytes in two strings in binary style.
*/
static inline int
my_strcoll_mb7_bin_4bytes(const uchar *a, const uchar *b)
{
uint32 an= mi_uint4korr(a);
uint32 bn= mi_uint4korr(b);
return an == bn ? 0 : an < bn ? -1 : +1;
}
/*
Compare the leading four 7bit ASCII bytes in two strings in binary style.
*/
static inline int
my_strcoll_mb7_bin_8bytes(const uchar *a, const uchar *b)
{
ulonglong an= mi_uint8korr(a);
ulonglong bn= mi_uint8korr(b);
return an == bn ? 0 : an < bn ? -1 : +1;
}
#endif /* CTYPE_ASCII_INCLUDED */

View File

@@ -6690,6 +6690,7 @@ my_mb_wc_big5(CHARSET_INFO *cs __attribute__((unused)),
#define MY_FUNCTION_NAME(x) my_ ## x ## _big5_bin #define MY_FUNCTION_NAME(x) my_ ## x ## _big5_bin
#define WEIGHT_MB1(x) ((uchar) (x)) #define WEIGHT_MB1(x) ((uchar) (x))
#define WEIGHT_MB2(x,y) (big5code(x, y)) #define WEIGHT_MB2(x,y) (big5code(x, y))
#define STRCOLL_MB7_BIN
#include "strcoll.ic" #include "strcoll.ic"
@@ -6706,6 +6707,7 @@ my_mb_wc_big5(CHARSET_INFO *cs __attribute__((unused)),
#define MY_FUNCTION_NAME(x) my_ ## x ## _big5_nopad_bin #define MY_FUNCTION_NAME(x) my_ ## x ## _big5_nopad_bin
#define WEIGHT_MB1(x) ((uchar) (x)) #define WEIGHT_MB1(x) ((uchar) (x))
#define WEIGHT_MB2(x,y) (big5code(x, y)) #define WEIGHT_MB2(x,y) (big5code(x, y))
#define STRCOLL_MB7_BIN
#include "strcoll.ic" #include "strcoll.ic"

View File

@@ -34638,6 +34638,7 @@ size_t my_numcells_cp932(CHARSET_INFO *cs __attribute__((unused)),
#define WEIGHT_PAD_SPACE (256 * (int) ' ') #define WEIGHT_PAD_SPACE (256 * (int) ' ')
#define WEIGHT_MB1(x) (256 * (int) sort_order_cp932[(uchar) (x)]) #define WEIGHT_MB1(x) (256 * (int) sort_order_cp932[(uchar) (x)])
#define WEIGHT_MB2(x,y) (cp932code(x, y)) #define WEIGHT_MB2(x,y) (cp932code(x, y))
#define STRCOLL_MB7_TOUPPER
#include "strcoll.ic" #include "strcoll.ic"
@@ -34645,6 +34646,7 @@ size_t my_numcells_cp932(CHARSET_INFO *cs __attribute__((unused)),
#define WEIGHT_PAD_SPACE (256 * (int) ' ') #define WEIGHT_PAD_SPACE (256 * (int) ' ')
#define WEIGHT_MB1(x) (256 * (int) (uchar) (x)) #define WEIGHT_MB1(x) (256 * (int) (uchar) (x))
#define WEIGHT_MB2(x,y) (cp932code(x, y)) #define WEIGHT_MB2(x,y) (cp932code(x, y))
#define STRCOLL_MB7_BIN
#include "strcoll.ic" #include "strcoll.ic"
@@ -34653,6 +34655,7 @@ size_t my_numcells_cp932(CHARSET_INFO *cs __attribute__((unused)),
#define WEIGHT_PAD_SPACE (256 * (int) ' ') #define WEIGHT_PAD_SPACE (256 * (int) ' ')
#define WEIGHT_MB1(x) (256 * (int) sort_order_cp932[(uchar) (x)]) #define WEIGHT_MB1(x) (256 * (int) sort_order_cp932[(uchar) (x)])
#define WEIGHT_MB2(x,y) (cp932code(x, y)) #define WEIGHT_MB2(x,y) (cp932code(x, y))
#define STRCOLL_MB7_TOUPPER
#include "strcoll.ic" #include "strcoll.ic"
@@ -34661,6 +34664,7 @@ size_t my_numcells_cp932(CHARSET_INFO *cs __attribute__((unused)),
#define WEIGHT_PAD_SPACE (256 * (int) ' ') #define WEIGHT_PAD_SPACE (256 * (int) ' ')
#define WEIGHT_MB1(x) (256 * (int) (uchar) (x)) #define WEIGHT_MB1(x) (256 * (int) (uchar) (x))
#define WEIGHT_MB2(x,y) (cp932code(x, y)) #define WEIGHT_MB2(x,y) (cp932code(x, y))
#define STRCOLL_MB7_BIN
#include "strcoll.ic" #include "strcoll.ic"

View File

@@ -9931,12 +9931,14 @@ my_mb_wc_euc_kr(CHARSET_INFO *cs __attribute__((unused)),
#define MY_FUNCTION_NAME(x) my_ ## x ## _euckr_korean_ci #define MY_FUNCTION_NAME(x) my_ ## x ## _euckr_korean_ci
#define WEIGHT_MB1(x) (sort_order_euc_kr[(uchar) (x)]) #define WEIGHT_MB1(x) (sort_order_euc_kr[(uchar) (x)])
#define WEIGHT_MB2(x,y) (euckrcode(x, y)) #define WEIGHT_MB2(x,y) (euckrcode(x, y))
#define STRCOLL_MB7_TOUPPER
#include "strcoll.ic" #include "strcoll.ic"
#define MY_FUNCTION_NAME(x) my_ ## x ## _euckr_bin #define MY_FUNCTION_NAME(x) my_ ## x ## _euckr_bin
#define WEIGHT_MB1(x) ((uchar) (x)) #define WEIGHT_MB1(x) ((uchar) (x))
#define WEIGHT_MB2(x,y) (euckrcode(x, y)) #define WEIGHT_MB2(x,y) (euckrcode(x, y))
#define STRCOLL_MB7_BIN
#include "strcoll.ic" #include "strcoll.ic"
@@ -9944,6 +9946,7 @@ my_mb_wc_euc_kr(CHARSET_INFO *cs __attribute__((unused)),
#define MY_FUNCTION_NAME(x) my_ ## x ## _euckr_korean_nopad_ci #define MY_FUNCTION_NAME(x) my_ ## x ## _euckr_korean_nopad_ci
#define WEIGHT_MB1(x) (sort_order_euc_kr[(uchar) (x)]) #define WEIGHT_MB1(x) (sort_order_euc_kr[(uchar) (x)])
#define WEIGHT_MB2(x,y) (euckrcode(x, y)) #define WEIGHT_MB2(x,y) (euckrcode(x, y))
#define STRCOLL_MB7_TOUPPER
#include "strcoll.ic" #include "strcoll.ic"
@@ -9951,6 +9954,7 @@ my_mb_wc_euc_kr(CHARSET_INFO *cs __attribute__((unused)),
#define MY_FUNCTION_NAME(x) my_ ## x ## _euckr_nopad_bin #define MY_FUNCTION_NAME(x) my_ ## x ## _euckr_nopad_bin
#define WEIGHT_MB1(x) ((uchar) (x)) #define WEIGHT_MB1(x) ((uchar) (x))
#define WEIGHT_MB2(x,y) (euckrcode(x, y)) #define WEIGHT_MB2(x,y) (euckrcode(x, y))
#define STRCOLL_MB7_BIN
#include "strcoll.ic" #include "strcoll.ic"

View File

@@ -211,6 +211,7 @@ static const uchar sort_order_eucjpms[]=
#define WEIGHT_MB2(x,y) ((((uint) (uchar)(x)) << 16) | \ #define WEIGHT_MB2(x,y) ((((uint) (uchar)(x)) << 16) | \
(((uint) (uchar) (y)) << 8)) (((uint) (uchar) (y)) << 8))
#define WEIGHT_MB3(x,y,z) (WEIGHT_MB2(x,y) | ((uint) (uchar) z)) #define WEIGHT_MB3(x,y,z) (WEIGHT_MB2(x,y) | ((uint) (uchar) z))
#define STRCOLL_MB7_TOUPPER
#include "strcoll.ic" #include "strcoll.ic"
@@ -220,6 +221,7 @@ static const uchar sort_order_eucjpms[]=
#define WEIGHT_MB2(x,y) ((((uint) (uchar)(x)) << 16) | \ #define WEIGHT_MB2(x,y) ((((uint) (uchar)(x)) << 16) | \
(((uint) (uchar) (y)) << 8)) (((uint) (uchar) (y)) << 8))
#define WEIGHT_MB3(x,y,z) (WEIGHT_MB2(x,y) | ((uint) (uchar) z)) #define WEIGHT_MB3(x,y,z) (WEIGHT_MB2(x,y) | ((uint) (uchar) z))
#define STRCOLL_MB7_BIN
#include "strcoll.ic" #include "strcoll.ic"
@@ -230,6 +232,7 @@ static const uchar sort_order_eucjpms[]=
#define WEIGHT_MB2(x,y) ((((uint) (uchar)(x)) << 16) | \ #define WEIGHT_MB2(x,y) ((((uint) (uchar)(x)) << 16) | \
(((uint) (uchar) (y)) << 8)) (((uint) (uchar) (y)) << 8))
#define WEIGHT_MB3(x,y,z) (WEIGHT_MB2(x,y) | ((uint) (uchar) z)) #define WEIGHT_MB3(x,y,z) (WEIGHT_MB2(x,y) | ((uint) (uchar) z))
#define STRCOLL_MB7_TOUPPER
#include "strcoll.ic" #include "strcoll.ic"
@@ -240,6 +243,7 @@ static const uchar sort_order_eucjpms[]=
#define WEIGHT_MB2(x,y) ((((uint) (uchar)(x)) << 16) | \ #define WEIGHT_MB2(x,y) ((((uint) (uchar)(x)) << 16) | \
(((uint) (uchar) (y)) << 8)) (((uint) (uchar) (y)) << 8))
#define WEIGHT_MB3(x,y,z) (WEIGHT_MB2(x,y) | ((uint) (uchar) z)) #define WEIGHT_MB3(x,y,z) (WEIGHT_MB2(x,y) | ((uint) (uchar) z))
#define STRCOLL_MB7_BIN
#include "strcoll.ic" #include "strcoll.ic"

View File

@@ -6343,6 +6343,7 @@ my_mb_wc_gb2312(CHARSET_INFO *cs __attribute__((unused)),
#define MY_FUNCTION_NAME(x) my_ ## x ## _gb2312_bin #define MY_FUNCTION_NAME(x) my_ ## x ## _gb2312_bin
#define WEIGHT_MB1(x) ((uchar) (x)) #define WEIGHT_MB1(x) ((uchar) (x))
#define WEIGHT_MB2(x,y) (gb2312code(x, y)) #define WEIGHT_MB2(x,y) (gb2312code(x, y))
#define STRCOLL_MB7_BIN
#include "strcoll.ic" #include "strcoll.ic"
@@ -6357,6 +6358,7 @@ my_mb_wc_gb2312(CHARSET_INFO *cs __attribute__((unused)),
#define MY_FUNCTION_NAME(x) my_ ## x ## _gb2312_nopad_bin #define MY_FUNCTION_NAME(x) my_ ## x ## _gb2312_nopad_bin
#define WEIGHT_MB1(x) ((uchar) (x)) #define WEIGHT_MB1(x) ((uchar) (x))
#define WEIGHT_MB2(x,y) (gb2312code(x, y)) #define WEIGHT_MB2(x,y) (gb2312code(x, y))
#define STRCOLL_MB7_BIN
#include "strcoll.ic" #include "strcoll.ic"

View File

@@ -10624,6 +10624,7 @@ my_mb_wc_gbk(CHARSET_INFO *cs __attribute__((unused)),
#define MY_FUNCTION_NAME(x) my_ ## x ## _gbk_bin #define MY_FUNCTION_NAME(x) my_ ## x ## _gbk_bin
#define WEIGHT_MB1(x) ((uchar) (x)) #define WEIGHT_MB1(x) ((uchar) (x))
#define WEIGHT_MB2(x,y) (gbkcode(x,y)) #define WEIGHT_MB2(x,y) (gbkcode(x,y))
#define STRCOLL_MB7_BIN
#include "strcoll.ic" #include "strcoll.ic"
@@ -10639,6 +10640,7 @@ my_mb_wc_gbk(CHARSET_INFO *cs __attribute__((unused)),
#define MY_FUNCTION_NAME(x) my_ ## x ## _gbk_nopad_bin #define MY_FUNCTION_NAME(x) my_ ## x ## _gbk_nopad_bin
#define WEIGHT_MB1(x) ((uchar) (x)) #define WEIGHT_MB1(x) ((uchar) (x))
#define WEIGHT_MB2(x,y) (gbkcode(x,y)) #define WEIGHT_MB2(x,y) (gbkcode(x,y))
#define STRCOLL_MB7_BIN
#include "strcoll.ic" #include "strcoll.ic"

View File

@@ -34026,6 +34026,7 @@ my_wc_to_printable_sjis(CHARSET_INFO *cs, my_wc_t wc,
#define WEIGHT_PAD_SPACE (256 * (int) ' ') #define WEIGHT_PAD_SPACE (256 * (int) ' ')
#define WEIGHT_MB1(x) (256 * (int) sort_order_sjis[(uchar) (x)]) #define WEIGHT_MB1(x) (256 * (int) sort_order_sjis[(uchar) (x)])
#define WEIGHT_MB2(x,y) (sjiscode(x, y)) #define WEIGHT_MB2(x,y) (sjiscode(x, y))
#define STRCOLL_MB7_TOUPPER
#include "strcoll.ic" #include "strcoll.ic"
@@ -34033,6 +34034,7 @@ my_wc_to_printable_sjis(CHARSET_INFO *cs, my_wc_t wc,
#define WEIGHT_PAD_SPACE (256 * (int) ' ') #define WEIGHT_PAD_SPACE (256 * (int) ' ')
#define WEIGHT_MB1(x) (256 * (int) (uchar) (x)) #define WEIGHT_MB1(x) (256 * (int) (uchar) (x))
#define WEIGHT_MB2(x,y) (sjiscode(x, y)) #define WEIGHT_MB2(x,y) (sjiscode(x, y))
#define STRCOLL_MB7_BIN
#include "strcoll.ic" #include "strcoll.ic"
@@ -34041,6 +34043,7 @@ my_wc_to_printable_sjis(CHARSET_INFO *cs, my_wc_t wc,
#define WEIGHT_PAD_SPACE (256 * (int) ' ') #define WEIGHT_PAD_SPACE (256 * (int) ' ')
#define WEIGHT_MB1(x) (256 * (int) sort_order_sjis[(uchar) (x)]) #define WEIGHT_MB1(x) (256 * (int) sort_order_sjis[(uchar) (x)])
#define WEIGHT_MB2(x,y) (sjiscode(x, y)) #define WEIGHT_MB2(x,y) (sjiscode(x, y))
#define STRCOLL_MB7_TOUPPER
#include "strcoll.ic" #include "strcoll.ic"
@@ -34049,6 +34052,7 @@ my_wc_to_printable_sjis(CHARSET_INFO *cs, my_wc_t wc,
#define WEIGHT_PAD_SPACE (256 * (int) ' ') #define WEIGHT_PAD_SPACE (256 * (int) ' ')
#define WEIGHT_MB1(x) (256 * (int) (uchar) (x)) #define WEIGHT_MB1(x) (256 * (int) (uchar) (x))
#define WEIGHT_MB2(x,y) (sjiscode(x, y)) #define WEIGHT_MB2(x,y) (sjiscode(x, y))
#define STRCOLL_MB7_BIN
#include "strcoll.ic" #include "strcoll.ic"

View File

@@ -210,6 +210,7 @@ static const uchar sort_order_ujis[]=
#define WEIGHT_MB2(x,y) ((((uint) (uchar)(x)) << 16) | \ #define WEIGHT_MB2(x,y) ((((uint) (uchar)(x)) << 16) | \
(((uint) (uchar) (y)) << 8)) (((uint) (uchar) (y)) << 8))
#define WEIGHT_MB3(x,y,z) (WEIGHT_MB2(x,y) | ((uint) (uchar) z)) #define WEIGHT_MB3(x,y,z) (WEIGHT_MB2(x,y) | ((uint) (uchar) z))
#define STRCOLL_MB7_TOUPPER
#include "strcoll.ic" #include "strcoll.ic"
@@ -219,6 +220,7 @@ static const uchar sort_order_ujis[]=
#define WEIGHT_MB2(x,y) ((((uint) (uchar)(x)) << 16) | \ #define WEIGHT_MB2(x,y) ((((uint) (uchar)(x)) << 16) | \
(((uint) (uchar) (y)) << 8)) (((uint) (uchar) (y)) << 8))
#define WEIGHT_MB3(x,y,z) (WEIGHT_MB2(x,y) | ((uint) (uchar) z)) #define WEIGHT_MB3(x,y,z) (WEIGHT_MB2(x,y) | ((uint) (uchar) z))
#define STRCOLL_MB7_BIN
#include "strcoll.ic" #include "strcoll.ic"
@@ -229,6 +231,7 @@ static const uchar sort_order_ujis[]=
#define WEIGHT_MB2(x,y) ((((uint) (uchar)(x)) << 16) | \ #define WEIGHT_MB2(x,y) ((((uint) (uchar)(x)) << 16) | \
(((uint) (uchar) (y)) << 8)) (((uint) (uchar) (y)) << 8))
#define WEIGHT_MB3(x,y,z) (WEIGHT_MB2(x,y) | ((uint) (uchar) z)) #define WEIGHT_MB3(x,y,z) (WEIGHT_MB2(x,y) | ((uint) (uchar) z))
#define STRCOLL_MB7_TOUPPER
#include "strcoll.ic" #include "strcoll.ic"
@@ -239,6 +242,7 @@ static const uchar sort_order_ujis[]=
#define WEIGHT_MB2(x,y) ((((uint) (uchar)(x)) << 16) | \ #define WEIGHT_MB2(x,y) ((((uint) (uchar)(x)) << 16) | \
(((uint) (uchar) (y)) << 8)) (((uint) (uchar) (y)) << 8))
#define WEIGHT_MB3(x,y,z) (WEIGHT_MB2(x,y) | ((uint) (uchar) z)) #define WEIGHT_MB3(x,y,z) (WEIGHT_MB2(x,y) | ((uint) (uchar) z))
#define STRCOLL_MB7_BIN
#include "strcoll.ic" #include "strcoll.ic"

View File

@@ -1035,6 +1035,268 @@ static MY_UNICASE_CHARACTER plane05[]={
{0x05FE,0x05FE,0x05FE}, {0x05FF,0x05FF,0x05FF} {0x05FE,0x05FE,0x05FE}, {0x05FF,0x05FF,0x05FF}
}; };
static MY_UNICASE_CHARACTER plane06[]={ /* This page is dummy */
{0x0600,0x0600,0x0600}, {0x0601,0x0601,0x0601}, /* 0600 */
{0x0602,0x0602,0x0602}, {0x0603,0x0603,0x0603}, /* 0602 */
{0x0604,0x0604,0x0604}, {0x0605,0x0605,0x0605}, /* 0604 */
{0x0606,0x0606,0x0606}, {0x0607,0x0607,0x0607}, /* 0606 */
{0x0608,0x0608,0x0608}, {0x0609,0x0609,0x0609}, /* 0608 */
{0x060A,0x060A,0x060A}, {0x060B,0x060B,0x060B}, /* 060A */
{0x060C,0x060C,0x060C}, {0x060D,0x060D,0x060D}, /* 060C */
{0x060E,0x060E,0x060E}, {0x060F,0x060F,0x060F}, /* 060E */
{0x0610,0x0610,0x0610}, {0x0611,0x0611,0x0611}, /* 0610 */
{0x0612,0x0612,0x0612}, {0x0613,0x0613,0x0613}, /* 0612 */
{0x0614,0x0614,0x0614}, {0x0615,0x0615,0x0615}, /* 0614 */
{0x0616,0x0616,0x0616}, {0x0617,0x0617,0x0617}, /* 0616 */
{0x0618,0x0618,0x0618}, {0x0619,0x0619,0x0619}, /* 0618 */
{0x061A,0x061A,0x061A}, {0x061B,0x061B,0x061B}, /* 061A */
{0x061C,0x061C,0x061C}, {0x061D,0x061D,0x061D}, /* 061C */
{0x061E,0x061E,0x061E}, {0x061F,0x061F,0x061F}, /* 061E */
{0x0620,0x0620,0x0620}, {0x0621,0x0621,0x0621}, /* 0620 */
{0x0622,0x0622,0x0622}, {0x0623,0x0623,0x0623}, /* 0622 */
{0x0624,0x0624,0x0624}, {0x0625,0x0625,0x0625}, /* 0624 */
{0x0626,0x0626,0x0626}, {0x0627,0x0627,0x0627}, /* 0626 */
{0x0628,0x0628,0x0628}, {0x0629,0x0629,0x0629}, /* 0628 */
{0x062A,0x062A,0x062A}, {0x062B,0x062B,0x062B}, /* 062A */
{0x062C,0x062C,0x062C}, {0x062D,0x062D,0x062D}, /* 062C */
{0x062E,0x062E,0x062E}, {0x062F,0x062F,0x062F}, /* 062E */
{0x0630,0x0630,0x0630}, {0x0631,0x0631,0x0631}, /* 0630 */
{0x0632,0x0632,0x0632}, {0x0633,0x0633,0x0633}, /* 0632 */
{0x0634,0x0634,0x0634}, {0x0635,0x0635,0x0635}, /* 0634 */
{0x0636,0x0636,0x0636}, {0x0637,0x0637,0x0637}, /* 0636 */
{0x0638,0x0638,0x0638}, {0x0639,0x0639,0x0639}, /* 0638 */
{0x063A,0x063A,0x063A}, {0x063B,0x063B,0x063B}, /* 063A */
{0x063C,0x063C,0x063C}, {0x063D,0x063D,0x063D}, /* 063C */
{0x063E,0x063E,0x063E}, {0x063F,0x063F,0x063F}, /* 063E */
{0x0640,0x0640,0x0640}, {0x0641,0x0641,0x0641}, /* 0640 */
{0x0642,0x0642,0x0642}, {0x0643,0x0643,0x0643}, /* 0642 */
{0x0644,0x0644,0x0644}, {0x0645,0x0645,0x0645}, /* 0644 */
{0x0646,0x0646,0x0646}, {0x0647,0x0647,0x0647}, /* 0646 */
{0x0648,0x0648,0x0648}, {0x0649,0x0649,0x0649}, /* 0648 */
{0x064A,0x064A,0x064A}, {0x064B,0x064B,0x064B}, /* 064A */
{0x064C,0x064C,0x064C}, {0x064D,0x064D,0x064D}, /* 064C */
{0x064E,0x064E,0x064E}, {0x064F,0x064F,0x064F}, /* 064E */
{0x0650,0x0650,0x0650}, {0x0651,0x0651,0x0651}, /* 0650 */
{0x0652,0x0652,0x0652}, {0x0653,0x0653,0x0653}, /* 0652 */
{0x0654,0x0654,0x0654}, {0x0655,0x0655,0x0655}, /* 0654 */
{0x0656,0x0656,0x0656}, {0x0657,0x0657,0x0657}, /* 0656 */
{0x0658,0x0658,0x0658}, {0x0659,0x0659,0x0659}, /* 0658 */
{0x065A,0x065A,0x065A}, {0x065B,0x065B,0x065B}, /* 065A */
{0x065C,0x065C,0x065C}, {0x065D,0x065D,0x065D}, /* 065C */
{0x065E,0x065E,0x065E}, {0x065F,0x065F,0x065F}, /* 065E */
{0x0660,0x0660,0x0660}, {0x0661,0x0661,0x0661}, /* 0660 */
{0x0662,0x0662,0x0662}, {0x0663,0x0663,0x0663}, /* 0662 */
{0x0664,0x0664,0x0664}, {0x0665,0x0665,0x0665}, /* 0664 */
{0x0666,0x0666,0x0666}, {0x0667,0x0667,0x0667}, /* 0666 */
{0x0668,0x0668,0x0668}, {0x0669,0x0669,0x0669}, /* 0668 */
{0x066A,0x066A,0x066A}, {0x066B,0x066B,0x066B}, /* 066A */
{0x066C,0x066C,0x066C}, {0x066D,0x066D,0x066D}, /* 066C */
{0x066E,0x066E,0x066E}, {0x066F,0x066F,0x066F}, /* 066E */
{0x0670,0x0670,0x0670}, {0x0671,0x0671,0x0671}, /* 0670 */
{0x0672,0x0672,0x0672}, {0x0673,0x0673,0x0673}, /* 0672 */
{0x0674,0x0674,0x0674}, {0x0675,0x0675,0x0675}, /* 0674 */
{0x0676,0x0676,0x0676}, {0x0677,0x0677,0x0677}, /* 0676 */
{0x0678,0x0678,0x0678}, {0x0679,0x0679,0x0679}, /* 0678 */
{0x067A,0x067A,0x067A}, {0x067B,0x067B,0x067B}, /* 067A */
{0x067C,0x067C,0x067C}, {0x067D,0x067D,0x067D}, /* 067C */
{0x067E,0x067E,0x067E}, {0x067F,0x067F,0x067F}, /* 067E */
{0x0680,0x0680,0x0680}, {0x0681,0x0681,0x0681}, /* 0680 */
{0x0682,0x0682,0x0682}, {0x0683,0x0683,0x0683}, /* 0682 */
{0x0684,0x0684,0x0684}, {0x0685,0x0685,0x0685}, /* 0684 */
{0x0686,0x0686,0x0686}, {0x0687,0x0687,0x0687}, /* 0686 */
{0x0688,0x0688,0x0688}, {0x0689,0x0689,0x0689}, /* 0688 */
{0x068A,0x068A,0x068A}, {0x068B,0x068B,0x068B}, /* 068A */
{0x068C,0x068C,0x068C}, {0x068D,0x068D,0x068D}, /* 068C */
{0x068E,0x068E,0x068E}, {0x068F,0x068F,0x068F}, /* 068E */
{0x0690,0x0690,0x0690}, {0x0691,0x0691,0x0691}, /* 0690 */
{0x0692,0x0692,0x0692}, {0x0693,0x0693,0x0693}, /* 0692 */
{0x0694,0x0694,0x0694}, {0x0695,0x0695,0x0695}, /* 0694 */
{0x0696,0x0696,0x0696}, {0x0697,0x0697,0x0697}, /* 0696 */
{0x0698,0x0698,0x0698}, {0x0699,0x0699,0x0699}, /* 0698 */
{0x069A,0x069A,0x069A}, {0x069B,0x069B,0x069B}, /* 069A */
{0x069C,0x069C,0x069C}, {0x069D,0x069D,0x069D}, /* 069C */
{0x069E,0x069E,0x069E}, {0x069F,0x069F,0x069F}, /* 069E */
{0x06A0,0x06A0,0x06A0}, {0x06A1,0x06A1,0x06A1}, /* 06A0 */
{0x06A2,0x06A2,0x06A2}, {0x06A3,0x06A3,0x06A3}, /* 06A2 */
{0x06A4,0x06A4,0x06A4}, {0x06A5,0x06A5,0x06A5}, /* 06A4 */
{0x06A6,0x06A6,0x06A6}, {0x06A7,0x06A7,0x06A7}, /* 06A6 */
{0x06A8,0x06A8,0x06A8}, {0x06A9,0x06A9,0x06A9}, /* 06A8 */
{0x06AA,0x06AA,0x06AA}, {0x06AB,0x06AB,0x06AB}, /* 06AA */
{0x06AC,0x06AC,0x06AC}, {0x06AD,0x06AD,0x06AD}, /* 06AC */
{0x06AE,0x06AE,0x06AE}, {0x06AF,0x06AF,0x06AF}, /* 06AE */
{0x06B0,0x06B0,0x06B0}, {0x06B1,0x06B1,0x06B1}, /* 06B0 */
{0x06B2,0x06B2,0x06B2}, {0x06B3,0x06B3,0x06B3}, /* 06B2 */
{0x06B4,0x06B4,0x06B4}, {0x06B5,0x06B5,0x06B5}, /* 06B4 */
{0x06B6,0x06B6,0x06B6}, {0x06B7,0x06B7,0x06B7}, /* 06B6 */
{0x06B8,0x06B8,0x06B8}, {0x06B9,0x06B9,0x06B9}, /* 06B8 */
{0x06BA,0x06BA,0x06BA}, {0x06BB,0x06BB,0x06BB}, /* 06BA */
{0x06BC,0x06BC,0x06BC}, {0x06BD,0x06BD,0x06BD}, /* 06BC */
{0x06BE,0x06BE,0x06BE}, {0x06BF,0x06BF,0x06BF}, /* 06BE */
{0x06C0,0x06C0,0x06C0}, {0x06C1,0x06C1,0x06C1}, /* 06C0 */
{0x06C2,0x06C2,0x06C2}, {0x06C3,0x06C3,0x06C3}, /* 06C2 */
{0x06C4,0x06C4,0x06C4}, {0x06C5,0x06C5,0x06C5}, /* 06C4 */
{0x06C6,0x06C6,0x06C6}, {0x06C7,0x06C7,0x06C7}, /* 06C6 */
{0x06C8,0x06C8,0x06C8}, {0x06C9,0x06C9,0x06C9}, /* 06C8 */
{0x06CA,0x06CA,0x06CA}, {0x06CB,0x06CB,0x06CB}, /* 06CA */
{0x06CC,0x06CC,0x06CC}, {0x06CD,0x06CD,0x06CD}, /* 06CC */
{0x06CE,0x06CE,0x06CE}, {0x06CF,0x06CF,0x06CF}, /* 06CE */
{0x06D0,0x06D0,0x06D0}, {0x06D1,0x06D1,0x06D1}, /* 06D0 */
{0x06D2,0x06D2,0x06D2}, {0x06D3,0x06D3,0x06D3}, /* 06D2 */
{0x06D4,0x06D4,0x06D4}, {0x06D5,0x06D5,0x06D5}, /* 06D4 */
{0x06D6,0x06D6,0x06D6}, {0x06D7,0x06D7,0x06D7}, /* 06D6 */
{0x06D8,0x06D8,0x06D8}, {0x06D9,0x06D9,0x06D9}, /* 06D8 */
{0x06DA,0x06DA,0x06DA}, {0x06DB,0x06DB,0x06DB}, /* 06DA */
{0x06DC,0x06DC,0x06DC}, {0x06DD,0x06DD,0x06DD}, /* 06DC */
{0x06DE,0x06DE,0x06DE}, {0x06DF,0x06DF,0x06DF}, /* 06DE */
{0x06E0,0x06E0,0x06E0}, {0x06E1,0x06E1,0x06E1}, /* 06E0 */
{0x06E2,0x06E2,0x06E2}, {0x06E3,0x06E3,0x06E3}, /* 06E2 */
{0x06E4,0x06E4,0x06E4}, {0x06E5,0x06E5,0x06E5}, /* 06E4 */
{0x06E6,0x06E6,0x06E6}, {0x06E7,0x06E7,0x06E7}, /* 06E6 */
{0x06E8,0x06E8,0x06E8}, {0x06E9,0x06E9,0x06E9}, /* 06E8 */
{0x06EA,0x06EA,0x06EA}, {0x06EB,0x06EB,0x06EB}, /* 06EA */
{0x06EC,0x06EC,0x06EC}, {0x06ED,0x06ED,0x06ED}, /* 06EC */
{0x06EE,0x06EE,0x06EE}, {0x06EF,0x06EF,0x06EF}, /* 06EE */
{0x06F0,0x06F0,0x06F0}, {0x06F1,0x06F1,0x06F1}, /* 06F0 */
{0x06F2,0x06F2,0x06F2}, {0x06F3,0x06F3,0x06F3}, /* 06F2 */
{0x06F4,0x06F4,0x06F4}, {0x06F5,0x06F5,0x06F5}, /* 06F4 */
{0x06F6,0x06F6,0x06F6}, {0x06F7,0x06F7,0x06F7}, /* 06F6 */
{0x06F8,0x06F8,0x06F8}, {0x06F9,0x06F9,0x06F9}, /* 06F8 */
{0x06FA,0x06FA,0x06FA}, {0x06FB,0x06FB,0x06FB}, /* 06FA */
{0x06FC,0x06FC,0x06FC}, {0x06FD,0x06FD,0x06FD}, /* 06FC */
{0x06FE,0x06FE,0x06FE}, {0x06FF,0x06FF,0x06FF} /* 06FE */
};
static MY_UNICASE_CHARACTER plane07[]={ /* This page is dummy */
{0x0700,0x0700,0x0700}, {0x0701,0x0701,0x0701}, /* 0700 */
{0x0702,0x0702,0x0702}, {0x0703,0x0703,0x0703}, /* 0702 */
{0x0704,0x0704,0x0704}, {0x0705,0x0705,0x0705}, /* 0704 */
{0x0706,0x0706,0x0706}, {0x0707,0x0707,0x0707}, /* 0706 */
{0x0708,0x0708,0x0708}, {0x0709,0x0709,0x0709}, /* 0708 */
{0x070A,0x070A,0x070A}, {0x070B,0x070B,0x070B}, /* 070A */
{0x070C,0x070C,0x070C}, {0x070D,0x070D,0x070D}, /* 070C */
{0x070E,0x070E,0x070E}, {0x070F,0x070F,0x070F}, /* 070E */
{0x0710,0x0710,0x0710}, {0x0711,0x0711,0x0711}, /* 0710 */
{0x0712,0x0712,0x0712}, {0x0713,0x0713,0x0713}, /* 0712 */
{0x0714,0x0714,0x0714}, {0x0715,0x0715,0x0715}, /* 0714 */
{0x0716,0x0716,0x0716}, {0x0717,0x0717,0x0717}, /* 0716 */
{0x0718,0x0718,0x0718}, {0x0719,0x0719,0x0719}, /* 0718 */
{0x071A,0x071A,0x071A}, {0x071B,0x071B,0x071B}, /* 071A */
{0x071C,0x071C,0x071C}, {0x071D,0x071D,0x071D}, /* 071C */
{0x071E,0x071E,0x071E}, {0x071F,0x071F,0x071F}, /* 071E */
{0x0720,0x0720,0x0720}, {0x0721,0x0721,0x0721}, /* 0720 */
{0x0722,0x0722,0x0722}, {0x0723,0x0723,0x0723}, /* 0722 */
{0x0724,0x0724,0x0724}, {0x0725,0x0725,0x0725}, /* 0724 */
{0x0726,0x0726,0x0726}, {0x0727,0x0727,0x0727}, /* 0726 */
{0x0728,0x0728,0x0728}, {0x0729,0x0729,0x0729}, /* 0728 */
{0x072A,0x072A,0x072A}, {0x072B,0x072B,0x072B}, /* 072A */
{0x072C,0x072C,0x072C}, {0x072D,0x072D,0x072D}, /* 072C */
{0x072E,0x072E,0x072E}, {0x072F,0x072F,0x072F}, /* 072E */
{0x0730,0x0730,0x0730}, {0x0731,0x0731,0x0731}, /* 0730 */
{0x0732,0x0732,0x0732}, {0x0733,0x0733,0x0733}, /* 0732 */
{0x0734,0x0734,0x0734}, {0x0735,0x0735,0x0735}, /* 0734 */
{0x0736,0x0736,0x0736}, {0x0737,0x0737,0x0737}, /* 0736 */
{0x0738,0x0738,0x0738}, {0x0739,0x0739,0x0739}, /* 0738 */
{0x073A,0x073A,0x073A}, {0x073B,0x073B,0x073B}, /* 073A */
{0x073C,0x073C,0x073C}, {0x073D,0x073D,0x073D}, /* 073C */
{0x073E,0x073E,0x073E}, {0x073F,0x073F,0x073F}, /* 073E */
{0x0740,0x0740,0x0740}, {0x0741,0x0741,0x0741}, /* 0740 */
{0x0742,0x0742,0x0742}, {0x0743,0x0743,0x0743}, /* 0742 */
{0x0744,0x0744,0x0744}, {0x0745,0x0745,0x0745}, /* 0744 */
{0x0746,0x0746,0x0746}, {0x0747,0x0747,0x0747}, /* 0746 */
{0x0748,0x0748,0x0748}, {0x0749,0x0749,0x0749}, /* 0748 */
{0x074A,0x074A,0x074A}, {0x074B,0x074B,0x074B}, /* 074A */
{0x074C,0x074C,0x074C}, {0x074D,0x074D,0x074D}, /* 074C */
{0x074E,0x074E,0x074E}, {0x074F,0x074F,0x074F}, /* 074E */
{0x0750,0x0750,0x0750}, {0x0751,0x0751,0x0751}, /* 0750 */
{0x0752,0x0752,0x0752}, {0x0753,0x0753,0x0753}, /* 0752 */
{0x0754,0x0754,0x0754}, {0x0755,0x0755,0x0755}, /* 0754 */
{0x0756,0x0756,0x0756}, {0x0757,0x0757,0x0757}, /* 0756 */
{0x0758,0x0758,0x0758}, {0x0759,0x0759,0x0759}, /* 0758 */
{0x075A,0x075A,0x075A}, {0x075B,0x075B,0x075B}, /* 075A */
{0x075C,0x075C,0x075C}, {0x075D,0x075D,0x075D}, /* 075C */
{0x075E,0x075E,0x075E}, {0x075F,0x075F,0x075F}, /* 075E */
{0x0760,0x0760,0x0760}, {0x0761,0x0761,0x0761}, /* 0760 */
{0x0762,0x0762,0x0762}, {0x0763,0x0763,0x0763}, /* 0762 */
{0x0764,0x0764,0x0764}, {0x0765,0x0765,0x0765}, /* 0764 */
{0x0766,0x0766,0x0766}, {0x0767,0x0767,0x0767}, /* 0766 */
{0x0768,0x0768,0x0768}, {0x0769,0x0769,0x0769}, /* 0768 */
{0x076A,0x076A,0x076A}, {0x076B,0x076B,0x076B}, /* 076A */
{0x076C,0x076C,0x076C}, {0x076D,0x076D,0x076D}, /* 076C */
{0x076E,0x076E,0x076E}, {0x076F,0x076F,0x076F}, /* 076E */
{0x0770,0x0770,0x0770}, {0x0771,0x0771,0x0771}, /* 0770 */
{0x0772,0x0772,0x0772}, {0x0773,0x0773,0x0773}, /* 0772 */
{0x0774,0x0774,0x0774}, {0x0775,0x0775,0x0775}, /* 0774 */
{0x0776,0x0776,0x0776}, {0x0777,0x0777,0x0777}, /* 0776 */
{0x0778,0x0778,0x0778}, {0x0779,0x0779,0x0779}, /* 0778 */
{0x077A,0x077A,0x077A}, {0x077B,0x077B,0x077B}, /* 077A */
{0x077C,0x077C,0x077C}, {0x077D,0x077D,0x077D}, /* 077C */
{0x077E,0x077E,0x077E}, {0x077F,0x077F,0x077F}, /* 077E */
{0x0780,0x0780,0x0780}, {0x0781,0x0781,0x0781}, /* 0780 */
{0x0782,0x0782,0x0782}, {0x0783,0x0783,0x0783}, /* 0782 */
{0x0784,0x0784,0x0784}, {0x0785,0x0785,0x0785}, /* 0784 */
{0x0786,0x0786,0x0786}, {0x0787,0x0787,0x0787}, /* 0786 */
{0x0788,0x0788,0x0788}, {0x0789,0x0789,0x0789}, /* 0788 */
{0x078A,0x078A,0x078A}, {0x078B,0x078B,0x078B}, /* 078A */
{0x078C,0x078C,0x078C}, {0x078D,0x078D,0x078D}, /* 078C */
{0x078E,0x078E,0x078E}, {0x078F,0x078F,0x078F}, /* 078E */
{0x0790,0x0790,0x0790}, {0x0791,0x0791,0x0791}, /* 0790 */
{0x0792,0x0792,0x0792}, {0x0793,0x0793,0x0793}, /* 0792 */
{0x0794,0x0794,0x0794}, {0x0795,0x0795,0x0795}, /* 0794 */
{0x0796,0x0796,0x0796}, {0x0797,0x0797,0x0797}, /* 0796 */
{0x0798,0x0798,0x0798}, {0x0799,0x0799,0x0799}, /* 0798 */
{0x079A,0x079A,0x079A}, {0x079B,0x079B,0x079B}, /* 079A */
{0x079C,0x079C,0x079C}, {0x079D,0x079D,0x079D}, /* 079C */
{0x079E,0x079E,0x079E}, {0x079F,0x079F,0x079F}, /* 079E */
{0x07A0,0x07A0,0x07A0}, {0x07A1,0x07A1,0x07A1}, /* 07A0 */
{0x07A2,0x07A2,0x07A2}, {0x07A3,0x07A3,0x07A3}, /* 07A2 */
{0x07A4,0x07A4,0x07A4}, {0x07A5,0x07A5,0x07A5}, /* 07A4 */
{0x07A6,0x07A6,0x07A6}, {0x07A7,0x07A7,0x07A7}, /* 07A6 */
{0x07A8,0x07A8,0x07A8}, {0x07A9,0x07A9,0x07A9}, /* 07A8 */
{0x07AA,0x07AA,0x07AA}, {0x07AB,0x07AB,0x07AB}, /* 07AA */
{0x07AC,0x07AC,0x07AC}, {0x07AD,0x07AD,0x07AD}, /* 07AC */
{0x07AE,0x07AE,0x07AE}, {0x07AF,0x07AF,0x07AF}, /* 07AE */
{0x07B0,0x07B0,0x07B0}, {0x07B1,0x07B1,0x07B1}, /* 07B0 */
{0x07B2,0x07B2,0x07B2}, {0x07B3,0x07B3,0x07B3}, /* 07B2 */
{0x07B4,0x07B4,0x07B4}, {0x07B5,0x07B5,0x07B5}, /* 07B4 */
{0x07B6,0x07B6,0x07B6}, {0x07B7,0x07B7,0x07B7}, /* 07B6 */
{0x07B8,0x07B8,0x07B8}, {0x07B9,0x07B9,0x07B9}, /* 07B8 */
{0x07BA,0x07BA,0x07BA}, {0x07BB,0x07BB,0x07BB}, /* 07BA */
{0x07BC,0x07BC,0x07BC}, {0x07BD,0x07BD,0x07BD}, /* 07BC */
{0x07BE,0x07BE,0x07BE}, {0x07BF,0x07BF,0x07BF}, /* 07BE */
{0x07C0,0x07C0,0x07C0}, {0x07C1,0x07C1,0x07C1}, /* 07C0 */
{0x07C2,0x07C2,0x07C2}, {0x07C3,0x07C3,0x07C3}, /* 07C2 */
{0x07C4,0x07C4,0x07C4}, {0x07C5,0x07C5,0x07C5}, /* 07C4 */
{0x07C6,0x07C6,0x07C6}, {0x07C7,0x07C7,0x07C7}, /* 07C6 */
{0x07C8,0x07C8,0x07C8}, {0x07C9,0x07C9,0x07C9}, /* 07C8 */
{0x07CA,0x07CA,0x07CA}, {0x07CB,0x07CB,0x07CB}, /* 07CA */
{0x07CC,0x07CC,0x07CC}, {0x07CD,0x07CD,0x07CD}, /* 07CC */
{0x07CE,0x07CE,0x07CE}, {0x07CF,0x07CF,0x07CF}, /* 07CE */
{0x07D0,0x07D0,0x07D0}, {0x07D1,0x07D1,0x07D1}, /* 07D0 */
{0x07D2,0x07D2,0x07D2}, {0x07D3,0x07D3,0x07D3}, /* 07D2 */
{0x07D4,0x07D4,0x07D4}, {0x07D5,0x07D5,0x07D5}, /* 07D4 */
{0x07D6,0x07D6,0x07D6}, {0x07D7,0x07D7,0x07D7}, /* 07D6 */
{0x07D8,0x07D8,0x07D8}, {0x07D9,0x07D9,0x07D9}, /* 07D8 */
{0x07DA,0x07DA,0x07DA}, {0x07DB,0x07DB,0x07DB}, /* 07DA */
{0x07DC,0x07DC,0x07DC}, {0x07DD,0x07DD,0x07DD}, /* 07DC */
{0x07DE,0x07DE,0x07DE}, {0x07DF,0x07DF,0x07DF}, /* 07DE */
{0x07E0,0x07E0,0x07E0}, {0x07E1,0x07E1,0x07E1}, /* 07E0 */
{0x07E2,0x07E2,0x07E2}, {0x07E3,0x07E3,0x07E3}, /* 07E2 */
{0x07E4,0x07E4,0x07E4}, {0x07E5,0x07E5,0x07E5}, /* 07E4 */
{0x07E6,0x07E6,0x07E6}, {0x07E7,0x07E7,0x07E7}, /* 07E6 */
{0x07E8,0x07E8,0x07E8}, {0x07E9,0x07E9,0x07E9}, /* 07E8 */
{0x07EA,0x07EA,0x07EA}, {0x07EB,0x07EB,0x07EB}, /* 07EA */
{0x07EC,0x07EC,0x07EC}, {0x07ED,0x07ED,0x07ED}, /* 07EC */
{0x07EE,0x07EE,0x07EE}, {0x07EF,0x07EF,0x07EF}, /* 07EE */
{0x07F0,0x07F0,0x07F0}, {0x07F1,0x07F1,0x07F1}, /* 07F0 */
{0x07F2,0x07F2,0x07F2}, {0x07F3,0x07F3,0x07F3}, /* 07F2 */
{0x07F4,0x07F4,0x07F4}, {0x07F5,0x07F5,0x07F5}, /* 07F4 */
{0x07F6,0x07F6,0x07F6}, {0x07F7,0x07F7,0x07F7}, /* 07F6 */
{0x07F8,0x07F8,0x07F8}, {0x07F9,0x07F9,0x07F9}, /* 07F8 */
{0x07FA,0x07FA,0x07FA}, {0x07FB,0x07FB,0x07FB}, /* 07FA */
{0x07FC,0x07FC,0x07FC}, {0x07FD,0x07FD,0x07FD}, /* 07FC */
{0x07FE,0x07FE,0x07FE}, {0x07FF,0x07FF,0x07FF} /* 07FE */
};
static MY_UNICASE_CHARACTER plane1E[]={ static MY_UNICASE_CHARACTER plane1E[]={
{0x1E00,0x1E01,0x0041}, {0x1E00,0x1E01,0x0041}, {0x1E00,0x1E01,0x0041}, {0x1E00,0x1E01,0x0041},
{0x1E02,0x1E03,0x0042}, {0x1E02,0x1E03,0x0042}, {0x1E02,0x1E03,0x0042}, {0x1E02,0x1E03,0x0042},
@@ -1694,7 +1956,7 @@ static MY_UNICASE_CHARACTER planeFF[]={
MY_UNICASE_CHARACTER *my_unicase_default_pages[256]= MY_UNICASE_CHARACTER *my_unicase_default_pages[256]=
{ {
my_unicase_default_page00, my_unicase_default_page00,
plane01, plane02, plane03, plane04, plane05, NULL, NULL, plane01, plane02, plane03, plane04, plane05, plane06, plane07,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, plane1E, plane1F, NULL, NULL, NULL, NULL, NULL, NULL, plane1E, plane1F,
@@ -1741,7 +2003,7 @@ MY_UNICASE_INFO my_unicase_default=
*/ */
MY_UNICASE_CHARACTER *my_unicase_pages_mysql500[256]={ MY_UNICASE_CHARACTER *my_unicase_pages_mysql500[256]={
plane00_mysql500, plane00_mysql500,
plane01, plane02, plane03, plane04, plane05, NULL, NULL, plane01, plane02, plane03, plane04, plane05, plane06, plane07,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, plane1E, plane1F, NULL, NULL, NULL, NULL, NULL, NULL, plane1E, plane1F,
@@ -1928,7 +2190,7 @@ static MY_UNICASE_CHARACTER turk00[]=
static MY_UNICASE_CHARACTER *my_unicase_pages_turkish[256]= static MY_UNICASE_CHARACTER *my_unicase_pages_turkish[256]=
{ {
turk00, plane01, plane02, plane03, plane04, plane05, NULL, NULL, turk00, plane01, plane02, plane03, plane04, plane05, plane06, plane07,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, plane1E, plane1F, NULL, NULL, NULL, NULL, NULL, NULL, plane1E, plane1F,
@@ -4332,7 +4594,7 @@ static MY_UNICASE_CHARACTER u520p104[]={
MY_UNICASE_CHARACTER *my_unicase_pages_unicode520[4352]= MY_UNICASE_CHARACTER *my_unicase_pages_unicode520[4352]=
{ {
u520p00, u520p01, u520p02, u520p03, u520p04, u520p05, NULL, NULL, u520p00, u520p01, u520p02, u520p03, u520p04, u520p05, plane06, plane06,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
u520p10, NULL, NULL, NULL, NULL, NULL, NULL, NULL, u520p10, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, u520p1D, u520p1E, u520p1F, NULL, NULL, NULL, NULL, NULL, u520p1D, u520p1E, u520p1F,
@@ -5230,7 +5492,17 @@ static inline int my_weight_mb2_utf8mb3_general_ci(uchar b0, uchar b1)
{ {
my_wc_t wc= UTF8MB2_CODE(b0, b1); my_wc_t wc= UTF8MB2_CODE(b0, b1);
MY_UNICASE_CHARACTER *page= my_unicase_default_pages[wc >> 8]; MY_UNICASE_CHARACTER *page= my_unicase_default_pages[wc >> 8];
return (int) (page ? page[wc & 0xFF].sort : wc); /*
2-byte utf8 sequences encode Unicode characters up to U+07FF.
my_unicase_default_pages[N] has non-NULL page pointers
for all N in the range [0..7].
- my_unicase_default_pages[0..5] point to real translation data
- my_unicase_default_pages[6..7] point to dummy pages
(without real translation).
By adding these dummy pages we can avoid testing 'page' against NULL.
This gives up to 20% performance improvement.
*/
return (int) page[wc & 0xFF].sort;
} }
@@ -5254,6 +5526,7 @@ static inline int my_weight_mb3_utf8mb3_general_ci(uchar b0, uchar b1, uchar b2)
#define WEIGHT_MB1(x) my_weight_mb1_utf8mb3_general_ci(x) #define WEIGHT_MB1(x) my_weight_mb1_utf8mb3_general_ci(x)
#define WEIGHT_MB2(x,y) my_weight_mb2_utf8mb3_general_ci(x,y) #define WEIGHT_MB2(x,y) my_weight_mb2_utf8mb3_general_ci(x,y)
#define WEIGHT_MB3(x,y,z) my_weight_mb3_utf8mb3_general_ci(x,y,z) #define WEIGHT_MB3(x,y,z) my_weight_mb3_utf8mb3_general_ci(x,y,z)
#define STRCOLL_MB7_TOUPPER
#include "strcoll.ic" #include "strcoll.ic"
@@ -5263,6 +5536,7 @@ static inline int my_weight_mb3_utf8mb3_general_ci(uchar b0, uchar b1, uchar b2)
#define WEIGHT_MB1(x) my_weight_mb1_utf8mb3_general_ci(x) #define WEIGHT_MB1(x) my_weight_mb1_utf8mb3_general_ci(x)
#define WEIGHT_MB2(x,y) my_weight_mb2_utf8mb3_general_ci(x,y) #define WEIGHT_MB2(x,y) my_weight_mb2_utf8mb3_general_ci(x,y)
#define WEIGHT_MB3(x,y,z) my_weight_mb3_utf8mb3_general_ci(x,y,z) #define WEIGHT_MB3(x,y,z) my_weight_mb3_utf8mb3_general_ci(x,y,z)
#define STRCOLL_MB7_TOUPPER
#include "strcoll.ic" #include "strcoll.ic"
@@ -5276,7 +5550,11 @@ static inline int my_weight_mb2_utf8mb3_general_mysql500_ci(uchar b0, uchar b1)
{ {
my_wc_t wc= UTF8MB2_CODE(b0, b1); my_wc_t wc= UTF8MB2_CODE(b0, b1);
MY_UNICASE_CHARACTER *page= my_unicase_pages_mysql500[wc >> 8]; MY_UNICASE_CHARACTER *page= my_unicase_pages_mysql500[wc >> 8];
return (int) (page ? page[wc & 0xFF].sort : wc); /*
`page` should never be NULL for 2-byte utf8 characters.
See comments in my_weight_mb2_utf8mb3_general_ci().
*/
return (int) page[wc & 0xFF].sort;
} }
@@ -5300,6 +5578,7 @@ my_weight_mb3_utf8mb3_general_mysql500_ci(uchar b0, uchar b1, uchar b2)
#define WEIGHT_MB1(x) my_weight_mb1_utf8mb3_general_mysql500_ci(x) #define WEIGHT_MB1(x) my_weight_mb1_utf8mb3_general_mysql500_ci(x)
#define WEIGHT_MB2(x,y) my_weight_mb2_utf8mb3_general_mysql500_ci(x,y) #define WEIGHT_MB2(x,y) my_weight_mb2_utf8mb3_general_mysql500_ci(x,y)
#define WEIGHT_MB3(x,y,z) my_weight_mb3_utf8mb3_general_mysql500_ci(x,y,z) #define WEIGHT_MB3(x,y,z) my_weight_mb3_utf8mb3_general_mysql500_ci(x,y,z)
#define STRCOLL_MB7_TOUPPER
#include "strcoll.ic" #include "strcoll.ic"
@@ -5311,6 +5590,7 @@ my_weight_mb3_utf8mb3_general_mysql500_ci(uchar b0, uchar b1, uchar b2)
#define WEIGHT_MB1(x) ((int) (uchar) (x)) #define WEIGHT_MB1(x) ((int) (uchar) (x))
#define WEIGHT_MB2(x,y) ((int) UTF8MB2_CODE(x,y)) #define WEIGHT_MB2(x,y) ((int) UTF8MB2_CODE(x,y))
#define WEIGHT_MB3(x,y,z) ((int) UTF8MB3_CODE(x,y,z)) #define WEIGHT_MB3(x,y,z) ((int) UTF8MB3_CODE(x,y,z))
#define STRCOLL_MB7_BIN
#include "strcoll.ic" #include "strcoll.ic"
@@ -5320,6 +5600,7 @@ my_weight_mb3_utf8mb3_general_mysql500_ci(uchar b0, uchar b1, uchar b2)
#define WEIGHT_MB1(x) ((int) (uchar) (x)) #define WEIGHT_MB1(x) ((int) (uchar) (x))
#define WEIGHT_MB2(x,y) ((int) UTF8MB2_CODE(x,y)) #define WEIGHT_MB2(x,y) ((int) UTF8MB2_CODE(x,y))
#define WEIGHT_MB3(x,y,z) ((int) UTF8MB3_CODE(x,y,z)) #define WEIGHT_MB3(x,y,z) ((int) UTF8MB3_CODE(x,y,z))
#define STRCOLL_MB7_BIN
#include "strcoll.ic" #include "strcoll.ic"
/* /*
@@ -7670,6 +7951,7 @@ my_charlen_utf8mb4(CHARSET_INFO *cs __attribute__((unused)),
All non-BMP characters have the same weight. All non-BMP characters have the same weight.
*/ */
#define WEIGHT_MB4(b0,b1,b2,b3) MY_CS_REPLACEMENT_CHARACTER #define WEIGHT_MB4(b0,b1,b2,b3) MY_CS_REPLACEMENT_CHARACTER
#define STRCOLL_MB7_TOUPPER
#include "strcoll.ic" #include "strcoll.ic"
@@ -7679,6 +7961,7 @@ my_charlen_utf8mb4(CHARSET_INFO *cs __attribute__((unused)),
#define WEIGHT_MB2(b0,b1) ((int) UTF8MB2_CODE(b0,b1)) #define WEIGHT_MB2(b0,b1) ((int) UTF8MB2_CODE(b0,b1))
#define WEIGHT_MB3(b0,b1,b2) ((int) UTF8MB3_CODE(b0,b1,b2)) #define WEIGHT_MB3(b0,b1,b2) ((int) UTF8MB3_CODE(b0,b1,b2))
#define WEIGHT_MB4(b0,b1,b2,b3) ((int) UTF8MB4_CODE(b0,b1,b2,b3)) #define WEIGHT_MB4(b0,b1,b2,b3) ((int) UTF8MB4_CODE(b0,b1,b2,b3))
#define STRCOLL_MB7_BIN
#include "strcoll.ic" #include "strcoll.ic"
@@ -7693,6 +7976,7 @@ my_charlen_utf8mb4(CHARSET_INFO *cs __attribute__((unused)),
All non-BMP characters have the same weight. All non-BMP characters have the same weight.
*/ */
#define WEIGHT_MB4(b0,b1,b2,b3) MY_CS_REPLACEMENT_CHARACTER #define WEIGHT_MB4(b0,b1,b2,b3) MY_CS_REPLACEMENT_CHARACTER
#define STRCOLL_MB7_TOUPPER
#include "strcoll.ic" #include "strcoll.ic"
@@ -7703,6 +7987,7 @@ my_charlen_utf8mb4(CHARSET_INFO *cs __attribute__((unused)),
#define WEIGHT_MB2(b0,b1) ((int) UTF8MB2_CODE(b0,b1)) #define WEIGHT_MB2(b0,b1) ((int) UTF8MB2_CODE(b0,b1))
#define WEIGHT_MB3(b0,b1,b2) ((int) UTF8MB3_CODE(b0,b1,b2)) #define WEIGHT_MB3(b0,b1,b2) ((int) UTF8MB3_CODE(b0,b1,b2))
#define WEIGHT_MB4(b0,b1,b2,b3) ((int) UTF8MB4_CODE(b0,b1,b2,b3)) #define WEIGHT_MB4(b0,b1,b2,b3) ((int) UTF8MB4_CODE(b0,b1,b2,b3))
#define STRCOLL_MB7_BIN
#include "strcoll.ic" #include "strcoll.ic"

View File

@@ -16,6 +16,8 @@
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1335 USA Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1335 USA
*/ */
#include "ctype-ascii.h"
#ifndef MY_FUNCTION_NAME #ifndef MY_FUNCTION_NAME
#error MY_FUNCTION_NAME is not defined #error MY_FUNCTION_NAME is not defined
#endif #endif
@@ -39,6 +41,42 @@
#endif #endif
/*
For binary collations:
- on 32bit platforms perform only 4 byte optimization
- on 64bit platforms perform both 4 byte and 8 byte optimization
*/
#if defined(STRCOLL_MB7_BIN)
#define MY_STRCOLL_MB7_4BYTES(a,b) my_strcoll_mb7_bin_4bytes((a),(b))
#if SIZEOF_VOIDP == 8
#define STRCOLL_MB7_8BYTES
#define MY_STRCOLL_MB7_8BYTES(a,b) my_strcoll_mb7_bin_8bytes((a),(b))
#endif /* Architecture test */
#endif /* STRCOLL_MB7_BIN */
/*
For case insensitive collations with trivial mapping from [a-z] to [A-Z]
perform optimization only on 64 bit platforms.
There is no sense to perform my_ascii_to_upper_magic_uint64() based
optimization on 32bit platforms. The idea of this optimization
is that it handles 8bytes at a time, using 64bit CPU registers.
Enabling this optimization on 32bit platform may only slow things down.
*/
#if defined(STRCOLL_MB7_TOUPPER)
#if SIZEOF_VOIDP == 8
#define MY_STRCOLL_MB7_4BYTES(a,b) my_strcoll_ascii_toupper_4bytes((a),(b))
#define MY_STRCOLL_MB7_8BYTES(a,b) my_strcoll_ascii_toupper_8bytes((a),(b))
#endif /* Architecture test */
#endif /* STRCOLL_MB7_TOUPPER */
/*
A helper macro to shift two pointers forward, to the given amount.
*/
#define MY_STRING_SHIFT_PTR_PTR(a,b,len) do { a+= len; b+= len; } while(0)
/* /*
Weight of an illegal byte, must follow these rules: Weight of an illegal byte, must follow these rules:
1. Must be greater than weight of any normal character in the collation. 1. Must be greater than weight of any normal character in the collation.
@@ -182,7 +220,31 @@ MY_FUNCTION_NAME(strnncoll)(CHARSET_INFO *cs __attribute__((unused)),
{ {
int a_weight, b_weight, res; int a_weight, b_weight, res;
uint a_wlen= MY_FUNCTION_NAME(scan_weight)(&a_weight, a, a_end); uint a_wlen= MY_FUNCTION_NAME(scan_weight)(&a_weight, a, a_end);
uint b_wlen= MY_FUNCTION_NAME(scan_weight)(&b_weight, b, b_end); uint b_wlen;
#ifdef MY_STRCOLL_MB7_4BYTES
if (a_wlen == 1 && my_strcoll_ascii_4bytes_found(a, a_end, b, b_end))
{
int res;
#ifdef MY_STRCOLL_MB7_8BYTES
/*TODO: a a loop here >='a' <='z' here, for automatic vectorization*/
if (my_strcoll_ascii_4bytes_found(a + 4, a_end, b + 4, b_end))
{
if ((res= MY_STRCOLL_MB7_8BYTES(a, b)))
return res;
MY_STRING_SHIFT_PTR_PTR(a, b, 8);
continue;
}
#endif
if ((res= MY_STRCOLL_MB7_4BYTES(a, b)))
return res;
MY_STRING_SHIFT_PTR_PTR(a, b, 4);
continue;
}
#endif /* MY_STRCOLL_MB7_4BYTES */
b_wlen= MY_FUNCTION_NAME(scan_weight)(&b_weight, b, b_end);
/* /*
a_wlen b_wlen Comment a_wlen b_wlen Comment
------ ------ ------- ------ ------ -------
@@ -253,7 +315,30 @@ MY_FUNCTION_NAME(strnncollsp)(CHARSET_INFO *cs __attribute__((unused)),
{ {
int a_weight, b_weight, res; int a_weight, b_weight, res;
uint a_wlen= MY_FUNCTION_NAME(scan_weight)(&a_weight, a, a_end); uint a_wlen= MY_FUNCTION_NAME(scan_weight)(&a_weight, a, a_end);
uint b_wlen= MY_FUNCTION_NAME(scan_weight)(&b_weight, b, b_end); uint b_wlen;
#ifdef MY_STRCOLL_MB7_4BYTES
if (a_wlen == 1 && my_strcoll_ascii_4bytes_found(a, a_end, b, b_end))
{
int res;
#ifdef MY_STRCOLL_MB7_8BYTES
if (my_strcoll_ascii_4bytes_found(a + 4, a_end, b + 4, b_end))
{
if ((res= MY_STRCOLL_MB7_8BYTES(a, b)))
return res;
MY_STRING_SHIFT_PTR_PTR(a, b, 8);
continue;
}
#endif
if ((res= MY_STRCOLL_MB7_4BYTES(a, b)))
return res;
MY_STRING_SHIFT_PTR_PTR(a, b, 4);
continue;
}
#endif /* MY_STRCOLL_MB7_4BYTES */
b_wlen= MY_FUNCTION_NAME(scan_weight)(&b_weight, b, b_end);
if ((res= (a_weight - b_weight))) if ((res= (a_weight - b_weight)))
{ {
/* /*
@@ -286,7 +371,7 @@ MY_FUNCTION_NAME(strnncollsp)(CHARSET_INFO *cs __attribute__((unused)),
DBUG_ASSERT(0); DBUG_ASSERT(0);
return 0; return 0;
} }
#endif #endif /* DEFINE_STRNNCOLLSP_NOPAD */
#endif /* DEFINE_STRNNCOLL */ #endif /* DEFINE_STRNNCOLL */
@@ -602,3 +687,8 @@ MY_FUNCTION_NAME(strnxfrm_nopad)(CHARSET_INFO *cs,
#undef DEFINE_STRNXFRM_UNICODE_BIN2 #undef DEFINE_STRNXFRM_UNICODE_BIN2
#undef DEFINE_STRNNCOLL #undef DEFINE_STRNNCOLL
#undef DEFINE_STRNNCOLLSP_NOPAD #undef DEFINE_STRNNCOLLSP_NOPAD
#undef STRCOLL_MB7_TOUPPER
#undef STRCOLL_MB7_BIN
#undef MY_STRCOLL_MB7_4BYTES
#undef MY_STRCOLL_MB7_8BYTES