1
/* Copyright (C) 2000 MySQL AB
3
This program is free software; you can redistribute it and/or modify
4
it under the terms of the GNU General Public License as published by
5
the Free Software Foundation; version 2 of the License.
7
This program is distributed in the hope that it will be useful,
8
but WITHOUT ANY WARRANTY; without even the implied warranty of
9
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
10
GNU General Public License for more details.
12
You should have received a copy of the GNU General Public License
13
along with this program; if not, write to the Free Software
14
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
16
#include <my_global.h>
20
static uchar ctype_latin1[] = {
22
32, 32, 32, 32, 32, 32, 32, 32, 32, 40, 40, 40, 40, 40, 32, 32,
23
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
24
72, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
25
132,132,132,132,132,132,132,132,132,132, 16, 16, 16, 16, 16, 16,
26
16,129,129,129,129,129,129, 1, 1, 1, 1, 1, 1, 1, 1, 1,
27
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 16, 16, 16, 16,
28
16,130,130,130,130,130,130, 2, 2, 2, 2, 2, 2, 2, 2, 2,
29
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 16, 16, 16, 16, 32,
30
16, 0, 16, 2, 16, 16, 16, 16, 16, 16, 1, 16, 1, 0, 1, 0,
31
0, 16, 16, 16, 16, 16, 16, 16, 16, 16, 2, 16, 2, 0, 2, 1,
32
72, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
33
16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
34
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
35
1, 1, 1, 1, 1, 1, 1, 16, 1, 1, 1, 1, 1, 1, 1, 2,
36
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
37
2, 2, 2, 2, 2, 2, 2, 16, 2, 2, 2, 2, 2, 2, 2, 2
40
static uchar to_lower_latin1[] = {
41
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
42
16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
43
32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
44
48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,
45
64, 97, 98, 99,100,101,102,103,104,105,106,107,108,109,110,111,
46
112,113,114,115,116,117,118,119,120,121,122, 91, 92, 93, 94, 95,
47
96, 97, 98, 99,100,101,102,103,104,105,106,107,108,109,110,111,
48
112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,
49
128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,
50
144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,
51
160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,
52
176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,
53
224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,
54
240,241,242,243,244,245,246,215,248,249,250,251,252,253,254,223,
55
224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,
56
240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255
59
static uchar to_upper_latin1[] = {
60
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
61
16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
62
32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
63
48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,
64
64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79,
65
80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95,
66
96, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79,
67
80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90,123,124,125,126,127,
68
128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,
69
144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,
70
160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,
71
176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,
72
192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,
73
208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,
74
192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,
75
208,209,210,211,212,213,214,247,216,217,218,219,220,221,222,255
78
static uchar sort_order_latin1[] = {
79
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
80
16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
81
32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
82
48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,
83
64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79,
84
80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95,
85
96, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79,
86
80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90,123,124,125,126,127,
87
128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,
88
144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,
89
160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,
90
176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,
91
65, 65, 65, 65, 92, 91, 92, 67, 69, 69, 69, 69, 73, 73, 73, 73,
92
68, 78, 79, 79, 79, 79, 93,215,216, 85, 85, 85, 89, 89,222,223,
93
65, 65, 65, 65, 92, 91, 92, 67, 69, 69, 69, 69, 73, 73, 73, 73,
94
68, 78, 79, 79, 79, 79, 93,247,216, 85, 85, 85, 89, 89,222,255
100
We'll use cp1252 instead of iso-8859-1.
101
cp1252 contains printable characters in the range 0x80-0x9F.
102
In ISO 8859-1, these code points have no associated printable
103
characters. Therefore, by converting from CP1252 to ISO 8859-1,
104
one would lose the euro (for instance). Since most people are
105
unaware of the difference, and since we don't really want a
106
"Windows ANSI" to differ from a "Unix ANSI", we will:
108
- continue to pretend the latin1 character set is ISO 8859-1
109
- actually allow the storage of euro etc. so it's actually cp1252
111
Also we'll map these five undefined cp1252 character:
112
0x81, 0x8D, 0x8F, 0x90, 0x9D
113
into corresponding control characters:
114
U+0081, U+008D, U+008F, U+0090, U+009D.
115
like ISO-8859-1 does. Otherwise, loading "mysqldump"
116
output doesn't reproduce these undefined characters.
119
unsigned short cs_to_uni[256]={
120
0x0000,0x0001,0x0002,0x0003,0x0004,0x0005,0x0006,0x0007,
121
0x0008,0x0009,0x000A,0x000B,0x000C,0x000D,0x000E,0x000F,
122
0x0010,0x0011,0x0012,0x0013,0x0014,0x0015,0x0016,0x0017,
123
0x0018,0x0019,0x001A,0x001B,0x001C,0x001D,0x001E,0x001F,
124
0x0020,0x0021,0x0022,0x0023,0x0024,0x0025,0x0026,0x0027,
125
0x0028,0x0029,0x002A,0x002B,0x002C,0x002D,0x002E,0x002F,
126
0x0030,0x0031,0x0032,0x0033,0x0034,0x0035,0x0036,0x0037,
127
0x0038,0x0039,0x003A,0x003B,0x003C,0x003D,0x003E,0x003F,
128
0x0040,0x0041,0x0042,0x0043,0x0044,0x0045,0x0046,0x0047,
129
0x0048,0x0049,0x004A,0x004B,0x004C,0x004D,0x004E,0x004F,
130
0x0050,0x0051,0x0052,0x0053,0x0054,0x0055,0x0056,0x0057,
131
0x0058,0x0059,0x005A,0x005B,0x005C,0x005D,0x005E,0x005F,
132
0x0060,0x0061,0x0062,0x0063,0x0064,0x0065,0x0066,0x0067,
133
0x0068,0x0069,0x006A,0x006B,0x006C,0x006D,0x006E,0x006F,
134
0x0070,0x0071,0x0072,0x0073,0x0074,0x0075,0x0076,0x0077,
135
0x0078,0x0079,0x007A,0x007B,0x007C,0x007D,0x007E,0x007F,
136
0x20AC,0x0081,0x201A,0x0192,0x201E,0x2026,0x2020,0x2021,
137
0x02C6,0x2030,0x0160,0x2039,0x0152,0x008D,0x017D,0x008F,
138
0x0090,0x2018,0x2019,0x201C,0x201D,0x2022,0x2013,0x2014,
139
0x02DC,0x2122,0x0161,0x203A,0x0153,0x009D,0x017E,0x0178,
140
0x00A0,0x00A1,0x00A2,0x00A3,0x00A4,0x00A5,0x00A6,0x00A7,
141
0x00A8,0x00A9,0x00AA,0x00AB,0x00AC,0x00AD,0x00AE,0x00AF,
142
0x00B0,0x00B1,0x00B2,0x00B3,0x00B4,0x00B5,0x00B6,0x00B7,
143
0x00B8,0x00B9,0x00BA,0x00BB,0x00BC,0x00BD,0x00BE,0x00BF,
144
0x00C0,0x00C1,0x00C2,0x00C3,0x00C4,0x00C5,0x00C6,0x00C7,
145
0x00C8,0x00C9,0x00CA,0x00CB,0x00CC,0x00CD,0x00CE,0x00CF,
146
0x00D0,0x00D1,0x00D2,0x00D3,0x00D4,0x00D5,0x00D6,0x00D7,
147
0x00D8,0x00D9,0x00DA,0x00DB,0x00DC,0x00DD,0x00DE,0x00DF,
148
0x00E0,0x00E1,0x00E2,0x00E3,0x00E4,0x00E5,0x00E6,0x00E7,
149
0x00E8,0x00E9,0x00EA,0x00EB,0x00EC,0x00ED,0x00EE,0x00EF,
150
0x00F0,0x00F1,0x00F2,0x00F3,0x00F4,0x00F5,0x00F6,0x00F7,
151
0x00F8,0x00F9,0x00FA,0x00FB,0x00FC,0x00FD,0x00FE,0x00FF
154
0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,
155
0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F,
156
0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,
157
0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F,
158
0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,
159
0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F,
160
0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,
161
0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F,
162
0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,
163
0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F,
164
0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,
165
0x58,0x59,0x5A,0x5B,0x5C,0x5D,0x5E,0x5F,
166
0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67,
167
0x68,0x69,0x6A,0x6B,0x6C,0x6D,0x6E,0x6F,
168
0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,
169
0x78,0x79,0x7A,0x7B,0x7C,0x7D,0x7E,0x7F,
170
0x00,0x81,0x00,0x00,0x00,0x00,0x00,0x00,
171
0x00,0x00,0x00,0x00,0x00,0x8D,0x00,0x8F,
172
0x90,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
173
0x00,0x00,0x00,0x00,0x00,0x9D,0x00,0x00,
174
0xA0,0xA1,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,
175
0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF,
176
0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,
177
0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF,
178
0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,
179
0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,
180
0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,
181
0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF,
182
0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,
183
0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF,
184
0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,
185
0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF
188
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
189
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
190
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
191
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
192
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
193
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
194
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
195
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
196
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
197
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
198
0x00,0x00,0x8C,0x9C,0x00,0x00,0x00,0x00,
199
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
200
0x8A,0x9A,0x00,0x00,0x00,0x00,0x00,0x00,
201
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
202
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
203
0x9F,0x00,0x00,0x00,0x00,0x8E,0x9E,0x00,
204
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
205
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
206
0x00,0x00,0x83,0x00,0x00,0x00,0x00,0x00,
207
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
208
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
209
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
210
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
211
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
212
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
213
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
214
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
215
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
216
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
217
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
218
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
219
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
222
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
223
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
224
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
225
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
226
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
227
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
228
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
229
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
230
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
231
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
232
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
233
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
234
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
235
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
236
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
237
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
238
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
239
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
240
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
241
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
242
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
243
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
244
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
245
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
246
0x00,0x00,0x00,0x00,0x00,0x00,0x88,0x00,
247
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
248
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
249
0x00,0x00,0x00,0x00,0x98,0x00,0x00,0x00,
250
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
251
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
252
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
253
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
256
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
257
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
258
0x00,0x00,0x00,0x96,0x97,0x00,0x00,0x00,
259
0x91,0x92,0x82,0x00,0x93,0x94,0x84,0x00,
260
0x86,0x87,0x95,0x00,0x00,0x00,0x85,0x00,
261
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
262
0x89,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
263
0x00,0x8B,0x9B,0x00,0x00,0x00,0x00,0x00,
264
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
265
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
266
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
267
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
268
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
269
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
270
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
271
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
272
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
273
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
274
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
275
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
276
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
277
0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,
278
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
279
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
280
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
281
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
282
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
283
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
284
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
285
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
286
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
287
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
290
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
291
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
292
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
293
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
294
0x00,0x00,0x99,0x00,0x00,0x00,0x00,0x00,
295
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
296
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
297
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
298
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
299
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
300
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
301
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
302
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
303
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
304
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
305
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
306
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
307
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
308
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
309
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
310
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
311
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
312
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
313
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
314
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
315
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
316
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
317
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
318
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
319
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
320
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
321
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
323
uchar *uni_to_cs[256]={
324
pl00,pl01,pl02,NULL,NULL,NULL,NULL,NULL,
325
NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
326
NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
327
NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
328
pl20,pl21,NULL,NULL,NULL,NULL,NULL,NULL,
329
NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
330
NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
331
NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
332
NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
333
NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
334
NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
335
NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
336
NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
337
NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
338
NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
339
NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
340
NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
341
NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
342
NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
343
NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
344
NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
345
NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
346
NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
347
NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
348
NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
349
NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
350
NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
351
NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
352
NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
353
NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
354
NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
355
NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL
359
int my_mb_wc_latin1(CHARSET_INFO *cs __attribute__((unused)),
362
const uchar *end __attribute__((unused)))
365
return MY_CS_TOOSMALL;
368
return (!wc[0] && str[0]) ? -1 : 1;
372
int my_wc_mb_latin1(CHARSET_INFO *cs __attribute__((unused)),
375
uchar *end __attribute__((unused)))
380
return MY_CS_TOOSMALL;
382
pl= uni_to_cs[(wc>>8) & 0xFF];
383
str[0]= pl ? pl[wc & 0xFF] : '\0';
384
return (!str[0] && wc) ? MY_CS_ILUNI : 1;
387
static MY_CHARSET_HANDLER my_charset_handler=
394
my_well_formed_len_8bit,
405
my_long10_to_str_8bit,
406
my_longlong10_to_str_8bit,
414
my_strntoull10rnd_8bit,
419
CHARSET_INFO my_charset_latin1=
422
MY_CS_COMPILED | MY_CS_PRIMARY, /* state */
423
"latin1", /* cs name */
424
"latin1_swedish_ci", /* name */
426
NULL, /* tailoring */
431
NULL, /* contractions */
432
NULL, /* sort_order_big*/
433
cs_to_uni, /* tab_to_uni */
434
NULL, /* tab_from_uni */
435
my_unicase_default, /* caseinfo */
436
NULL, /* state_map */
437
NULL, /* ident_map */
438
1, /* strxfrm_multiply */
439
1, /* caseup_multiply */
440
1, /* casedn_multiply */
443
0, /* min_sort_char */
444
255, /* max_sort_char */
446
0, /* escape_with_backslash_is_dangerous */
448
&my_collation_8bit_simple_ci_handler
455
* This file is the latin1 character set with German sorting
457
* The modern sort order is used, where:
467
* This is a simple latin1 mapping table, which maps all accented
468
* characters to their non-accented equivalents. Note: in this
469
* table, '�' is mapped to 'A', '�' is mapped to 'Y', etc. - all
470
* accented characters except the following are treated the same way.
474
static uchar sort_order_latin1_de[] = {
475
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
476
16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
477
32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
478
48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,
479
64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79,
480
80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95,
481
96, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79,
482
80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90,123,124,125,126,127,
483
128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,
484
144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,
485
160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,
486
176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,
487
65, 65, 65, 65,196, 65, 92, 67, 69, 69, 69, 69, 73, 73, 73, 73,
488
68, 78, 79, 79, 79, 79,214,215,216, 85, 85, 85,220, 89,222,223,
489
65, 65, 65, 65,196, 65, 92, 67, 69, 69, 69, 69, 73, 73, 73, 73,
490
68, 78, 79, 79, 79, 79,214,247,216, 85, 85, 85,220, 89,222, 89
495
same as sort_order_latin_de, but maps ALL accented chars to unaccented ones
499
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
500
16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
501
32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
502
48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,
503
64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79,
504
80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95,
505
96, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79,
506
80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90,123,124,125,126,127,
507
128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,
508
144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,
509
160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,
510
176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,
511
65, 65, 65, 65, 65, 65, 92, 67, 69, 69, 69, 69, 73, 73, 73, 73,
512
68, 78, 79, 79, 79, 79, 79,215,216, 85, 85, 85, 85, 89,222, 83,
513
65, 65, 65, 65, 65, 65, 92, 67, 69, 69, 69, 69, 73, 73, 73, 73,
514
68, 78, 79, 79, 79, 79, 79,247,216, 85, 85, 85, 85, 89,222, 89
518
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
519
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
520
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
521
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
522
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
523
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
524
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
525
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
526
0, 0, 0, 0, 0, 0,69, 0, 0, 0, 0, 0,69, 0, 0,83, 0, 0, 0, 0,69, 0, 0, 0, 0, 0,
527
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,69, 0, 0, 0, 0, 0,69, 0, 0, 0, 0
532
Some notes about the following comparison rules:
533
By definition, my_strnncoll_latin_de must works exactly as if had called
534
my_strnxfrm_latin_de() on both strings and compared the result strings.
537
� must also matches �E and A�, because my_strxn_frm_latin_de() will convert
540
The other option would be to not do any accent removal in
541
sort_order_latin_de[] at all
545
static int my_strnncoll_latin1_de(CHARSET_INFO *cs __attribute__((unused)),
546
const uchar *a, size_t a_length,
547
const uchar *b, size_t b_length,
550
const uchar *a_end= a + a_length;
551
const uchar *b_end= b + b_length;
552
uchar a_char, a_extend= 0, b_char, b_extend= 0;
554
while ((a < a_end || a_extend) && (b < b_end || b_extend))
558
a_char=a_extend; a_extend=0;
562
a_extend=combo2map[*a];
563
a_char=combo1map[*a++];
567
b_char=b_extend; b_extend=0;
571
b_extend=combo2map[*b];
572
b_char=combo1map[*b++];
574
if (a_char != b_char)
575
return (int) a_char - (int) b_char;
578
A simple test of string lengths won't work -- we test to see
579
which string ran out first
581
return ((a < a_end || a_extend) ? (b_is_prefix ? 0 : 1) :
582
(b < b_end || b_extend) ? -1 : 0);
586
static int my_strnncollsp_latin1_de(CHARSET_INFO *cs __attribute__((unused)),
587
const uchar *a, size_t a_length,
588
const uchar *b, size_t b_length,
589
my_bool diff_if_only_endspace_difference)
591
const uchar *a_end= a + a_length, *b_end= b + b_length;
592
uchar a_char, a_extend= 0, b_char, b_extend= 0;
595
#ifndef VARCHAR_WITH_DIFF_ENDSPACE_ARE_DIFFERENT_FOR_UNIQUE
596
diff_if_only_endspace_difference= 0;
599
while ((a < a_end || a_extend) && (b < b_end || b_extend))
608
a_extend= combo2map[*a];
609
a_char= combo1map[*a++];
618
b_extend= combo2map[*b];
619
b_char= combo1map[*b++];
621
if (a_char != b_char)
622
return (int) a_char - (int) b_char;
624
/* Check if double character last */
631
if (a != a_end || b != b_end)
634
if (diff_if_only_endspace_difference)
635
res= 1; /* Assume 'a' is bigger */
637
Check the next not space character of the longer key. If it's < ' ',
638
then it's smaller than the other key.
642
/* put shorter key in a */
645
swap= -1; /* swap sign of result */
648
for ( ; a < a_end ; a++)
651
return (*a < ' ') ? -swap : swap;
658
static size_t my_strnxfrm_latin1_de(CHARSET_INFO *cs __attribute__((unused)),
659
uchar *dest, size_t len,
660
const uchar *src, size_t srclen)
662
const uchar *de = dest + len;
663
const uchar *se = src + srclen;
664
for ( ; src < se && dest < de ; src++)
666
uchar chr=combo1map[*src];
668
if ((chr=combo2map[*src]) && dest < de)
672
bfill(dest, de - dest, ' ');
677
void my_hash_sort_latin1_de(CHARSET_INFO *cs __attribute__((unused)),
678
const uchar *key, size_t len,
679
ulong *nr1, ulong *nr2)
681
const uchar *end= key+len;
683
Remove end space. We have to do this to be able to compare
684
'AE' and '�' as identical
686
while (end > key && end[-1] == ' ')
689
for (; key < end ; key++)
691
uint X= (uint) combo1map[(uint) *key];
692
nr1[0]^=(ulong) ((((uint) nr1[0] & 63)+nr2[0]) * X) + (nr1[0] << 8);
694
if ((X= combo2map[*key]))
696
nr1[0]^=(ulong) ((((uint) nr1[0] & 63)+nr2[0]) * X) + (nr1[0] << 8);
703
static MY_COLLATION_HANDLER my_collation_german2_ci_handler=
706
my_strnncoll_latin1_de,
707
my_strnncollsp_latin1_de,
708
my_strnxfrm_latin1_de,
709
my_strnxfrmlen_simple,
710
my_like_range_simple,
714
my_hash_sort_latin1_de,
719
CHARSET_INFO my_charset_latin1_german2_ci=
722
MY_CS_COMPILED|MY_CS_STRNXFRM, /* state */
723
"latin1", /* cs name */
724
"latin1_german2_ci", /* name */
726
NULL, /* tailoring */
730
sort_order_latin1_de,
731
NULL, /* contractions */
732
NULL, /* sort_order_big*/
733
cs_to_uni, /* tab_to_uni */
734
NULL, /* tab_from_uni */
735
my_unicase_default, /* caseinfo */
736
NULL, /* state_map */
737
NULL, /* ident_map */
738
2, /* strxfrm_multiply */
739
1, /* caseup_multiply */
740
1, /* casedn_multiply */
743
0, /* min_sort_char */
744
247, /* max_sort_char */
746
0, /* escape_with_backslash_is_dangerous */
748
&my_collation_german2_ci_handler
752
CHARSET_INFO my_charset_latin1_bin=
755
MY_CS_COMPILED|MY_CS_BINSORT, /* state */
756
"latin1", /* cs name */
757
"latin1_bin", /* name */
759
NULL, /* tailoring */
763
NULL, /* sort_order */
764
NULL, /* contractions */
765
NULL, /* sort_order_big*/
766
cs_to_uni, /* tab_to_uni */
767
NULL, /* tab_from_uni */
768
my_unicase_default, /* caseinfo */
769
NULL, /* state_map */
770
NULL, /* ident_map */
771
1, /* strxfrm_multiply */
772
1, /* caseup_multiply */
773
1, /* casedn_multiply */
776
0, /* min_sort_char */
777
255, /* max_sort_char */
779
0, /* escape_with_backslash_is_dangerous */
781
&my_collation_8bit_bin_handler