1-- source include/have_gb2312.inc
2
3#
4# Tests with the gb2312 character set
5#
6--disable_warnings
7drop table if exists t1;
8--enable_warnings
9
10SET @test_character_set= 'gb2312';
11SET @test_collation= 'gb2312_chinese_ci';
12-- source include/ctype_common.inc
13
14SET NAMES gb2312;
15SET collation_connection='gb2312_chinese_ci';
16-- source include/ctype_filesort.inc
17-- source include/ctype_innodb_like.inc
18-- source include/ctype_like_escape.inc
19-- source include/ctype_like_range_f1f2.inc
20-- source include/ctype_ascii_order.inc
21SET collation_connection='gb2312_bin';
22-- source include/ctype_filesort.inc
23-- source include/ctype_innodb_like.inc
24-- source include/ctype_like_escape.inc
25-- source include/ctype_like_range_f1f2.inc
26
27#
28# Bug#15377 Valid multibyte sequences are truncated on INSERT
29#
30SET NAMES gb2312;
31CREATE TABLE t1 (a text) character set gb2312;
32INSERT INTO t1 VALUES (0xA2A1),(0xD7FE);
33SELECT hex(a) FROM t1 ORDER BY a;
34DROP TABLE t1;
35
36# End of 4.1 tests
37
38
39--echo #
40--echo # Start of 5.5 tests
41--echo #
42
43--echo #
44--echo # Testing WL#4583 Case conversion in Asian character sets
45--echo #
46#
47# Populate t1 with all hex digits
48#
49SET NAMES utf8;
50SET collation_connection=gb2312_chinese_ci;
51CREATE TABLE t1 (b VARCHAR(2));
52INSERT INTO t1 VALUES ('0'),('1'),('2'),('3'),('4'),('5'),('6'),('7');
53INSERT INTO t1 VALUES ('8'),('9'),('A'),('B'),('C'),('D'),('E'),('F');
54#
55# Populate tables head and tail with values '00'-'FF'
56#
57CREATE TEMPORARY TABLE head AS SELECT concat(b1.b, b2.b) AS head FROM t1 b1, t1 b2;
58CREATE TEMPORARY TABLE tail AS SELECT concat(b1.b, b2.b) AS tail FROM t1 b1, t1 b2;
59DROP TABLE t1;
60#
61# Populate table t1 with all codes [80..FF][20..FF]
62# Expected valid gb2312 codes [A1..F7][A1..FE]
63#
64CREATE TABLE t1 AS
65SELECT concat(head, tail) AS code, ' ' AS a
66FROM head, tail
67WHERE (head BETWEEN '80' AND 'FF') AND (tail BETWEEN '20' AND 'FF')
68ORDER BY head, tail;
69DROP TEMPORARY TABLE head, tail;
70SHOW CREATE TABLE t1;
71UPDATE IGNORE t1 SET a=unhex(code) ORDER BY code;
72SELECT COUNT(*) FROM t1 WHERE a<>'?';
73#
74# Display all characters that have upper or lower case mapping.
75#
76SELECT code, hex(upper(a)), hex(lower(a)),a, upper(a), lower(a) FROM t1 WHERE hex(a)<>hex(upper(a)) OR hex(a)<>hex(lower(a));
77#
78# Make sure all possible conversion happened
79#
80# Expect U+2160 to U+216B ROMAN NUMERAL ONE to ROMAN NUMERAL TWELVE
81#
82SELECT * FROM t1
83WHERE HEX(CAST(LOWER(a) AS CHAR CHARACTER SET utf8)) <>
84      HEX(LOWER(CAST(a AS CHAR CHARACTER SET utf8))) ORDER BY code;
85#
86# Expect
87#       U+00E0 LATIN SMALL LETTER A WITH GRAVE
88#       U+00E1 LATIN SMALL LETTER A WITH ACUTE
89#       U+00E8 LATIN SMALL LETTER E WITH GRAVE
90#       U+00E9 LATIN SMALL LETTER E WITH ACUTE
91#       U+00EA LATIN SMALL LETTER E WITH CIRCUMFLEX
92#       U+00EC LATIN SMALL LETTER I WITH GRAVE
93#       U+00ED LATIN SMALL LETTER I WITH ACUTE
94#       U+00F2 LATIN SMALL LETTER O WITH GRAVE
95#       U+00F3 LATIN SMALL LETTER O WITH ACUTE
96#       U+00F9 LATIN SMALL LETTER U WITH GRAVE
97#       U+00FA LATIN SMALL LETTER U WITH ACUTE
98#       U+00FC LATIN SMALL LETTER U WITH DIAERESIS
99#       U+0101 LATIN SMALL LETTER A WITH MACRON
100#       U+0113 LATIN SMALL LETTER E WITH MACRON
101#       U+011B LATIN SMALL LETTER E WITH CARON
102#       U+012B LATIN SMALL LETTER I WITH MACRON
103#       U+0144 LATIN SMALL LETTER N WITH ACUTE
104#       U+0148 LATIN SMALL LETTER N WITH CARON
105#       U+014D LATIN SMALL LETTER O WITH MACRON
106#       U+016B LATIN SMALL LETTER U WITH MACRON
107#       U+01CE LATIN SMALL LETTER A WITH CARON
108#       U+01D0 LATIN SMALL LETTER I WITH CARON
109#       U+01D2 LATIN SMALL LETTER O WITH CARON
110#       U+01D4 LATIN SMALL LETTER U WITH CARON
111#       U+01D6 LATIN SMALL LETTER U WITH DIAERESIS AND MACRON
112#       U+01D8 LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE
113#       U+01DA LATIN SMALL LETTER U WITH DIAERESIS AND CARON
114#       U+01DC LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE
115#
116SELECT * FROM t1
117WHERE HEX(CAST(UPPER(a) AS CHAR CHARACTER SET utf8)) <>
118      HEX(UPPER(CAST(a AS CHAR CHARACTER SET utf8))) ORDER BY code;
119
120DROP TABLE t1;
121
122
123
124
125--echo #
126--echo # End of 5.5 tests
127--echo #
128
129
130
131--echo #
132--echo # Start of 5.6 tests
133--echo #
134
135--echo #
136--echo # WL#3664 WEIGHT_STRING
137--echo #
138
139set names gb2312;
140--source include/weight_string.inc
141--source include/weight_string_l1.inc
142--source include/weight_string_A1A1.inc
143
144set collation_connection=gb2312_bin;
145--source include/weight_string.inc
146--source include/weight_string_l1.inc
147--source include/weight_string_A1A1.inc
148
149--echo #
150--echo # End of 5.6 tests
151--echo #
152
153--echo #
154--echo # Start of 10.0 tests
155--echo #
156
157let $ctype_unescape_combinations=selected;
158--source include/ctype_unescape.inc
159
160--echo #
161--echo # End of 10.0 tests
162--echo #
163
164
165--echo #
166--echo # Start of 10.2 tests
167--echo #
168--echo #
169--echo # MDEV-9711 NO PAD Collatons
170--echo #
171SET character_set_connection=gb2312;
172let $coll='gb2312_chinese_nopad_ci';
173let $coll_pad='gb2312_chinese_ci';
174--source include/ctype_pad_all_engines.inc
175
176let $coll='gb2312_nopad_bin';
177let $coll_pad='gb2312_bin';
178--source include/ctype_pad_all_engines.inc
179
180--echo #
181--echo # End of 10.2 tests
182--echo #
183
184
185--echo #
186--echo # Start of 10.5 tests
187--echo #
188
189--echo #
190--echo # MDEV-22625 SIGSEGV in intern_find_sys_var (optimized builds)
191--echo #
192
193SET NAMES gb2312;
194SET @seq=_gb2312 0xA2A1;
195--source include/ctype_ident_sys.inc
196
197--echo #
198--echo # End of 10.5 tests
199--echo #
200