Skip to content

Commit ffe8041

Browse files
author
Alexander Barkov
committed
Back-porting tasks from mysql-6.0:
WL#3664 strnxfrm() changes for prefix keys and NOPAD WL#3716 WEIGHT_STRING function WL#4013 Unicode german2 collation
1 parent feb9835 commit ffe8041

File tree

98 files changed

+14022
-633
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

98 files changed

+14022
-633
lines changed

include/m_ctype.h

Lines changed: 58 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,39 @@ extern MY_UNI_CTYPE my_uni_ctype[256];
114114
#define MY_REPERTOIRE_EXTENDED 2 /* Extended characters: U+0080..U+FFFF */
115115
#define MY_REPERTOIRE_UNICODE30 3 /* ASCII | EXTENDED: U+0000..U+FFFF */
116116

117+
/* Flags for strxfrm */
118+
#define MY_STRXFRM_LEVEL1 0x00000001 /* for primary weights */
119+
#define MY_STRXFRM_LEVEL2 0x00000002 /* for secondary weights */
120+
#define MY_STRXFRM_LEVEL3 0x00000004 /* for tertiary weights */
121+
#define MY_STRXFRM_LEVEL4 0x00000008 /* fourth level weights */
122+
#define MY_STRXFRM_LEVEL5 0x00000010 /* fifth level weights */
123+
#define MY_STRXFRM_LEVEL6 0x00000020 /* sixth level weights */
124+
#define MY_STRXFRM_LEVEL_ALL 0x0000003F /* Bit OR for the above six */
125+
#define MY_STRXFRM_NLEVELS 6 /* Number of possible levels*/
126+
127+
#define MY_STRXFRM_PAD_WITH_SPACE 0x00000040 /* if pad result with spaces */
128+
#define MY_STRXFRM_PAD_TO_MAXLEN 0x00000080 /* if pad tail(for filesort) */
129+
130+
#define MY_STRXFRM_DESC_LEVEL1 0x00000100 /* if desc order for level1 */
131+
#define MY_STRXFRM_DESC_LEVEL2 0x00000200 /* if desc order for level2 */
132+
#define MY_STRXFRM_DESC_LEVEL3 0x00000300 /* if desc order for level3 */
133+
#define MY_STRXFRM_DESC_LEVEL4 0x00000800 /* if desc order for level4 */
134+
#define MY_STRXFRM_DESC_LEVEL5 0x00001000 /* if desc order for level5 */
135+
#define MY_STRXFRM_DESC_LEVEL6 0x00002000 /* if desc order for level6 */
136+
#define MY_STRXFRM_DESC_SHIFT 8
137+
138+
#define MY_STRXFRM_UNUSED_00004000 0x00004000 /* for future extensions */
139+
#define MY_STRXFRM_UNUSED_00008000 0x00008000 /* for future extensions */
140+
141+
#define MY_STRXFRM_REVERSE_LEVEL1 0x00010000 /* if reverse order for level1 */
142+
#define MY_STRXFRM_REVERSE_LEVEL2 0x00020000 /* if reverse order for level2 */
143+
#define MY_STRXFRM_REVERSE_LEVEL3 0x00040000 /* if reverse order for level3 */
144+
#define MY_STRXFRM_REVERSE_LEVEL4 0x00080000 /* if reverse order for level4 */
145+
#define MY_STRXFRM_REVERSE_LEVEL5 0x00100000 /* if reverse order for level5 */
146+
#define MY_STRXFRM_REVERSE_LEVEL6 0x00200000 /* if reverse order for level6 */
147+
#define MY_STRXFRM_REVERSE_SHIFT 16
148+
149+
117150
typedef struct my_uni_idx_st
118151
{
119152
uint16 from;
@@ -157,9 +190,10 @@ typedef struct my_collation_handler_st
157190
int (*strnncollsp)(struct charset_info_st *,
158191
const uchar *, size_t, const uchar *, size_t,
159192
my_bool diff_if_only_endspace_difference);
160-
size_t (*strnxfrm)(struct charset_info_st *,
161-
uchar *, size_t, const uchar *, size_t);
162-
size_t (*strnxfrmlen)(struct charset_info_st *, size_t);
193+
size_t (*strnxfrm)(struct charset_info_st *,
194+
uchar *dst, size_t dstlen, uint nweights,
195+
const uchar *src, size_t srclen, uint flags);
196+
size_t (*strnxfrmlen)(struct charset_info_st *, size_t);
163197
my_bool (*like_range)(struct charset_info_st *,
164198
const char *s, size_t s_length,
165199
pchar w_prefix, pchar w_one, pchar w_many,
@@ -296,6 +330,8 @@ typedef struct charset_info_st
296330
uint16 max_sort_char; /* For LIKE optimization */
297331
uchar pad_char;
298332
my_bool escape_with_backslash_is_dangerous;
333+
uchar levels_for_compare;
334+
uchar levels_for_order;
299335

300336
MY_CHARSET_HANDLER *cset;
301337
MY_COLLATION_HANDLER *coll;
@@ -351,8 +387,9 @@ extern CHARSET_INFO my_charset_utf8mb4_unicode_ci;
351387

352388

353389
/* declarations for simple charsets */
354-
extern size_t my_strnxfrm_simple(CHARSET_INFO *, uchar *, size_t,
355-
const uchar *, size_t);
390+
extern size_t my_strnxfrm_simple(CHARSET_INFO *,
391+
uchar *dst, size_t dstlen, uint nweights,
392+
const uchar *src, size_t srclen, uint flags);
356393
size_t my_strnxfrmlen_simple(CHARSET_INFO *, size_t);
357394
extern int my_strnncoll_simple(CHARSET_INFO *, const uchar *, size_t,
358395
const uchar *, size_t, my_bool);
@@ -529,9 +566,13 @@ int my_strcasecmp_mb_bin(CHARSET_INFO * cs __attribute__((unused)),
529566
void my_hash_sort_mb_bin(CHARSET_INFO *cs __attribute__((unused)),
530567
const uchar *key, size_t len,ulong *nr1, ulong *nr2);
531568

569+
size_t my_strnxfrm_mb(CHARSET_INFO *,
570+
uchar *dst, size_t dstlen, uint nweights,
571+
const uchar *src, size_t srclen, uint flags);
572+
532573
size_t my_strnxfrm_unicode(CHARSET_INFO *,
533-
uchar *dst, size_t dstlen,
534-
const uchar *src, size_t srclen);
574+
uchar *dst, size_t dstlen, uint nweights,
575+
const uchar *src, size_t srclen, uint flags);
535576

536577
int my_wildcmp_unicode(CHARSET_INFO *cs,
537578
const char *str, const char *str_end,
@@ -553,6 +594,14 @@ my_bool my_charset_is_ascii_based(CHARSET_INFO *cs);
553594
my_bool my_charset_is_8bit_pure_ascii(CHARSET_INFO *cs);
554595
uint my_charset_repertoire(CHARSET_INFO *cs);
555596

597+
598+
uint my_strxfrm_flag_normalize(uint flags, uint nlevels);
599+
void my_strxfrm_desc_and_reverse(uchar *str, uchar *strend,
600+
uint flags, uint level);
601+
size_t my_strxfrm_pad_desc_and_reverse(CHARSET_INFO *cs,
602+
uchar *str, uchar *frmend, uchar *strend,
603+
uint nweights, uint flags, uint level);
604+
556605
my_bool my_charset_is_ascii_compatible(CHARSET_INFO *cs);
557606

558607
extern size_t my_vsnprintf_ex(CHARSET_INFO *cs, char *to, size_t n,
@@ -592,7 +641,8 @@ extern size_t my_vsnprintf_ex(CHARSET_INFO *cs, char *to, size_t n,
592641

593642
#define my_binary_compare(s) ((s)->state & MY_CS_BINSORT)
594643
#define use_strnxfrm(s) ((s)->state & MY_CS_STRNXFRM)
595-
#define my_strnxfrm(s, a, b, c, d) ((s)->coll->strnxfrm((s), (a), (b), (c), (d)))
644+
#define my_strnxfrm(cs, d, dl, s, sl) \
645+
((cs)->coll->strnxfrm((cs), (d), (dl), (dl), (s), (sl), MY_STRXFRM_PAD_WITH_SPACE))
596646
#define my_strnncoll(s, a, b, c, d) ((s)->coll->strnncoll((s), (a), (b), (c), (d), 0))
597647
#define my_like_range(s, a, b, c, d, e, f, g, h, i, j) \
598648
((s)->coll->like_range((s), (a), (b), (c), (d), (e), (f), (g), (h), (i), (j)))
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
--disable_warnings
2+
drop table if exists t1;
3+
--enable_warnings
4+
5+
create table t1 select repeat('a',10) as c1;
6+
delete from t1;
7+
insert into t1 values (0x20),(0x21),(0x22),(0x23),(0x24),(0x25),(0x26),(0x27),(0x28),(0x29),(0x2A),(0x2B),(0x2C),(0x2D),(0x2E),(0x2F);
8+
insert into t1 values (0x30),(0x31),(0x32),(0x33),(0x34),(0x35),(0x36),(0x37),(0x38),(0x39),(0x3A),(0x3B),(0x3C),(0x3D),(0x3E),(0x3F);
9+
insert into t1 values (0x40),(0x41),(0x42),(0x43),(0x44),(0x45),(0x46),(0x47),(0x48),(0x49),(0x4A),(0x4B),(0x4C),(0x4D),(0x4E),(0x4F);
10+
insert into t1 values (0x50),(0x51),(0x52),(0x53),(0x54),(0x55),(0x56),(0x57),(0x58),(0x59),(0x5A),(0x5B),(0x5C),(0x5D),(0x5E),(0x5F);
11+
insert into t1 values (0x60),(0x61),(0x62),(0x63),(0x64),(0x65),(0x66),(0x67),(0x68),(0x69),(0x6A),(0x6B),(0x6C),(0x6D),(0x6E),(0x6F);
12+
insert into t1 values (0x70),(0x71),(0x72),(0x73),(0x74),(0x75),(0x76),(0x77),(0x78),(0x79),(0x7A),(0x7B),(0x7C),(0x7D),(0x7E),(0x7F);
13+
SELECT GROUP_CONCAT(c1 ORDER BY binary c1 SEPARATOR ''), GROUP_CONCAT(hex(c1) ORDER BY BINARY c1) FROM t1 GROUP BY c1;
14+
drop table t1;

mysql-test/include/ctype_german.inc

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
--echo "BEGIN ctype_german.inc"
12
#
23
# Bug #27877 incorrect german order in utf8_general_ci
34
#
@@ -27,6 +28,11 @@ delete from t1;
2728
# Populate data
2829
#
2930

31+
INSERT INTO t1 VALUES ('ud'),('uf');
32+
INSERT INTO t1 VALUES ('od'),('of');
33+
INSERT INTO t1 VALUES ('e');
34+
INSERT INTO t1 VALUES ('ad'),('af');
35+
3036
insert into t1 values ('a'),('ae'),(_latin1 0xE4);
3137
insert into t1 values ('o'),('oe'),(_latin1 0xF6);
3238
insert into t1 values ('s'),('ss'),(_latin1 0xDF);
@@ -37,4 +43,10 @@ insert into t1 values ('u'),('ue'),(_latin1 0xFC);
3743
#
3844
select s1, hex(s1) from t1 order by s1, binary s1;
3945
select group_concat(s1 order by binary s1) from t1 group by s1;
46+
47+
SELECT s1, hex(s1), hex(weight_string(s1)) FROM t1 ORDER BY s1, BINARY(s1);
48+
SELECT s1, hex(s1) FROM t1 WHERE s1='ae' ORDER BY s1, BINARY(s1);
49+
4050
drop table t1;
51+
52+
--echo "END ctype_german.inc"
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
SELECT strcmp('a','a ');
2+
SELECT strcmp('a\0','a' );
3+
SELECT strcmp('a\0','a ');
4+
SELECT strcmp('a\t','a' );
5+
SELECT strcmp('a\t','a ');

mysql-test/include/weight_string.inc

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
select @@collation_connection;
2+
select hex(weight_string('a'));
3+
select hex(weight_string('A'));
4+
select hex(weight_string('abc'));
5+
select hex(weight_string('abc' as char(2)));
6+
select hex(weight_string('abc' as char(3)));
7+
select hex(weight_string('abc' as char(5)));
8+
9+
# Read 2 characters from the source string (the last character is not used).
10+
select hex(weight_string('abc', 1, 2, 0xC0));
11+
select hex(weight_string('abc', 2, 2, 0xC0));
12+
select hex(weight_string('abc', 3, 2, 0xC0));
13+
select hex(weight_string('abc', 4, 2, 0xC0));
14+
select hex(weight_string('abc', 5, 2, 0xC0));
15+
select hex(weight_string('abc',25, 2, 0xC0));
16+
17+
# Read 3 characters from the source string (the entire string is used).
18+
select hex(weight_string('abc', 1, 3, 0xC0));
19+
select hex(weight_string('abc', 2, 3, 0xC0));
20+
select hex(weight_string('abc', 3, 3, 0xC0));
21+
select hex(weight_string('abc', 4, 3, 0xC0));
22+
select hex(weight_string('abc', 5, 3, 0xC0));
23+
select hex(weight_string('abc',25, 3, 0xC0));
24+
25+
# Read 4 characters from the source string (extra space is added)
26+
select hex(weight_string('abc', 1, 4, 0xC0));
27+
select hex(weight_string('abc', 2, 4, 0xC0));
28+
select hex(weight_string('abc', 3, 4, 0xC0));
29+
select hex(weight_string('abc', 4, 4, 0xC0));
30+
select hex(weight_string('abc', 5, 4, 0xC0));
31+
select hex(weight_string('abc',25, 4, 0xC0));
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
select collation(cast(0x8140 as char));
2+
select hex(weight_string(cast(0x6141 as char)));
3+
select hex(weight_string(cast(0x8140 as char)));
4+
select hex(weight_string(cast(0x8140 as char) as char(1)));
5+
select hex(weight_string(cast(0x81408140 as char) as char(1)));
6+
select hex(weight_string(cast(0x8140 as char) as char(3)));
7+
select hex(weight_string(cast(0x81408140 as char) as char(3)));
8+
select hex(weight_string(cast(0x408140 as char) as char(3)));
9+
select hex(weight_string(cast(0x4081408140 as char) as char(3)));
10+
select hex(weight_string(cast(0x40814081408140 as char) as char(3)));
11+
select hex(weight_string(cast(0x4040814081408140 as char) as char(3)));
12+
13+
# Read 2 characters from the source string (the last character is not used)
14+
select hex(weight_string(cast(0x814081408140 as char), 1, 2, 0xC0));
15+
select hex(weight_string(cast(0x814081408140 as char), 2, 2, 0xC0));
16+
select hex(weight_string(cast(0x814081408140 as char), 3, 2, 0xC0));
17+
select hex(weight_string(cast(0x814081408140 as char), 4, 2, 0xC0));
18+
select hex(weight_string(cast(0x814081408140 as char), 5, 2, 0xC0));
19+
select hex(weight_string(cast(0x814081408140 as char),25, 2, 0xC0));
20+
21+
# Read 3 characters from the source string (the entire string is used)
22+
select hex(weight_string(cast(0x814081408140 as char), 1, 3, 0xC0));
23+
select hex(weight_string(cast(0x814081408140 as char), 2, 3, 0xC0));
24+
select hex(weight_string(cast(0x814081408140 as char), 3, 3, 0xC0));
25+
select hex(weight_string(cast(0x814081408140 as char), 4, 3, 0xC0));
26+
select hex(weight_string(cast(0x814081408140 as char), 5, 3, 0xC0));
27+
select hex(weight_string(cast(0x814081408140 as char),25, 3, 0xC0));
28+
29+
# Read 4 characters from the source string (extra space is added)
30+
select hex(weight_string(cast(0x814081408140 as char), 1, 4, 0xC0));
31+
select hex(weight_string(cast(0x814081408140 as char), 2, 4, 0xC0));
32+
select hex(weight_string(cast(0x814081408140 as char), 3, 4, 0xC0));
33+
select hex(weight_string(cast(0x814081408140 as char), 4, 4, 0xC0));
34+
select hex(weight_string(cast(0x814081408140 as char), 5, 4, 0xC0));
35+
select hex(weight_string(cast(0x814081408140 as char),25, 4, 0xC0));
36+
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
select collation(cast(0xA1A1 as char));
2+
select hex(weight_string(cast(0x6141 as char)));
3+
select hex(weight_string(cast(0x8EA1 as char)));
4+
select hex(weight_string(cast(0x8EA1 as char) as char(1)));
5+
select hex(weight_string(cast(0x8EA18EA1 as char) as char(1)));
6+
select hex(weight_string(cast(0x8EA1 as char) as char(3)));
7+
select hex(weight_string(cast(0x8EA18EA1 as char) as char(3)));
8+
select hex(weight_string(cast(0x408EA1 as char) as char(3)));
9+
select hex(weight_string(cast(0x408EA18EA1 as char) as char(3)));
10+
select hex(weight_string(cast(0x408EA18EA18EA1 as char) as char(3)));
11+
select hex(weight_string(cast(0x40408EA18EA18EA1 as char) as char(3)));
12+
13+
# Read 2 characters from the source string (the last character is not used)
14+
select hex(weight_string(cast(0x8EA18EA18EA1 as char), 1, 2, 0xC0));
15+
select hex(weight_string(cast(0x8EA18EA18EA1 as char), 2, 2, 0xC0));
16+
select hex(weight_string(cast(0x8EA18EA18EA1 as char), 3, 2, 0xC0));
17+
select hex(weight_string(cast(0x8EA18EA18EA1 as char), 4, 2, 0xC0));
18+
select hex(weight_string(cast(0x8EA18EA18EA1 as char), 5, 2, 0xC0));
19+
select hex(weight_string(cast(0x8EA18EA18EA1 as char),25, 2, 0xC0));
20+
21+
# Read 3 characters from the source string (the entire string is used)
22+
select hex(weight_string(cast(0x8EA18EA18EA1 as char), 1, 3, 0xC0));
23+
select hex(weight_string(cast(0x8EA18EA18EA1 as char), 2, 3, 0xC0));
24+
select hex(weight_string(cast(0x8EA18EA18EA1 as char), 3, 3, 0xC0));
25+
select hex(weight_string(cast(0x8EA18EA18EA1 as char), 4, 3, 0xC0));
26+
select hex(weight_string(cast(0x8EA18EA18EA1 as char), 5, 3, 0xC0));
27+
select hex(weight_string(cast(0x8EA18EA18EA1 as char),25, 3, 0xC0));
28+
29+
# Read 4 characters from the source string (extra space is added)
30+
select hex(weight_string(cast(0x8EA18EA18EA1 as char), 1, 4, 0xC0));
31+
select hex(weight_string(cast(0x8EA18EA18EA1 as char), 2, 4, 0xC0));
32+
select hex(weight_string(cast(0x8EA18EA18EA1 as char), 3, 4, 0xC0));
33+
select hex(weight_string(cast(0x8EA18EA18EA1 as char), 4, 4, 0xC0));
34+
select hex(weight_string(cast(0x8EA18EA18EA1 as char), 5, 4, 0xC0));
35+
select hex(weight_string(cast(0x8EA18EA18EA1 as char),25, 4, 0xC0));
36+
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
select collation(cast(0x8FA2C3 as char));
2+
select hex(weight_string(cast(0x6141 as char)));
3+
select hex(weight_string(cast(0x8FA2C3 as char)));
4+
select hex(weight_string(cast(0x8FA2C3 as char) as char(1)));
5+
select hex(weight_string(cast(0x8FA2C38FA2C3 as char) as char(1)));
6+
select hex(weight_string(cast(0x8FA2C3 as char) as char(3)));
7+
select hex(weight_string(cast(0x8FA2C38FA2C3 as char) as char(3)));
8+
select hex(weight_string(cast(0x408FA2C3 as char) as char(3)));
9+
select hex(weight_string(cast(0x408FA2C38FA2C3 as char) as char(3)));
10+
select hex(weight_string(cast(0x408FA2C38FA2C38FA2C3 as char) as char(3)));
11+
select hex(weight_string(cast(0x40408FA2C38FA2C38FA2C3 as char) as char(3)));
12+
13+
# Read 2 characters from the source string (the last character is not used)
14+
select hex(weight_string(cast(0x8FA2C38FA2C38FA2C3 as char), 1, 2, 0xC0));
15+
select hex(weight_string(cast(0x8FA2C38FA2C38FA2C3 as char), 2, 2, 0xC0));
16+
select hex(weight_string(cast(0x8FA2C38FA2C38FA2C3 as char), 3, 2, 0xC0));
17+
select hex(weight_string(cast(0x8FA2C38FA2C38FA2C3 as char), 4, 2, 0xC0));
18+
select hex(weight_string(cast(0x8FA2C38FA2C38FA2C3 as char), 5, 2, 0xC0));
19+
select hex(weight_string(cast(0x8FA2C38FA2C38FA2C3 as char),25, 2, 0xC0));
20+
21+
# Read 3 characters from the source string (the entire string is used)
22+
select hex(weight_string(cast(0x8FA2C38FA2C38FA2C3 as char), 1, 3, 0xC0));
23+
select hex(weight_string(cast(0x8FA2C38FA2C38FA2C3 as char), 2, 3, 0xC0));
24+
select hex(weight_string(cast(0x8FA2C38FA2C38FA2C3 as char), 3, 3, 0xC0));
25+
select hex(weight_string(cast(0x8FA2C38FA2C38FA2C3 as char), 4, 3, 0xC0));
26+
select hex(weight_string(cast(0x8FA2C38FA2C38FA2C3 as char), 5, 3, 0xC0));
27+
select hex(weight_string(cast(0x8FA2C38FA2C38FA2C3 as char),25, 3, 0xC0));
28+
29+
# Read 4 characters from the source string (extra space is added)
30+
select hex(weight_string(cast(0x8FA2C38FA2C38FA2C3 as char), 1, 4, 0xC0));
31+
select hex(weight_string(cast(0x8FA2C38FA2C38FA2C3 as char), 2, 4, 0xC0));
32+
select hex(weight_string(cast(0x8FA2C38FA2C38FA2C3 as char), 3, 4, 0xC0));
33+
select hex(weight_string(cast(0x8FA2C38FA2C38FA2C3 as char), 4, 4, 0xC0));
34+
select hex(weight_string(cast(0x8FA2C38FA2C38FA2C3 as char), 5, 4, 0xC0));
35+
select hex(weight_string(cast(0x8FA2C38FA2C38FA2C3 as char),25, 4, 0xC0));
36+
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
select collation(cast(0xA1A1 as char));
2+
select hex(weight_string(cast(0x6141 as char)));
3+
select hex(weight_string(cast(0xA1A1 as char)));
4+
select hex(weight_string(cast(0xA1A1 as char) as char(1)));
5+
select hex(weight_string(cast(0xA1A1A1A1 as char) as char(1)));
6+
select hex(weight_string(cast(0xA1A1 as char) as char(3)));
7+
select hex(weight_string(cast(0xA1A1A1A1 as char) as char(3)));
8+
select hex(weight_string(cast(0x40A1A1 as char) as char(3)));
9+
select hex(weight_string(cast(0x40A1A1A1A1 as char) as char(3)));
10+
select hex(weight_string(cast(0x40A1A1A1A1A1A1 as char) as char(3)));
11+
select hex(weight_string(cast(0x4040A1A1A1A1A1A1 as char) as char(3)));
12+
13+
# Read 2 characters from the source string (the last character is not used)
14+
select hex(weight_string(cast(0xA1A1A1A1A1A1 as char), 1, 2, 0xC0));
15+
select hex(weight_string(cast(0xA1A1A1A1A1A1 as char), 2, 2, 0xC0));
16+
select hex(weight_string(cast(0xA1A1A1A1A1A1 as char), 3, 2, 0xC0));
17+
select hex(weight_string(cast(0xA1A1A1A1A1A1 as char), 4, 2, 0xC0));
18+
select hex(weight_string(cast(0xA1A1A1A1A1A1 as char), 5, 2, 0xC0));
19+
select hex(weight_string(cast(0xA1A1A1A1A1A1 as char),25, 2, 0xC0));
20+
21+
# Read 3 characters from the source string (the entire string is used)
22+
select hex(weight_string(cast(0xA1A1A1A1A1A1 as char), 1, 3, 0xC0));
23+
select hex(weight_string(cast(0xA1A1A1A1A1A1 as char), 2, 3, 0xC0));
24+
select hex(weight_string(cast(0xA1A1A1A1A1A1 as char), 3, 3, 0xC0));
25+
select hex(weight_string(cast(0xA1A1A1A1A1A1 as char), 4, 3, 0xC0));
26+
select hex(weight_string(cast(0xA1A1A1A1A1A1 as char), 5, 3, 0xC0));
27+
select hex(weight_string(cast(0xA1A1A1A1A1A1 as char),25, 3, 0xC0));
28+
29+
# Read 4 characters from the source string (extra space is added)
30+
select hex(weight_string(cast(0xA1A1A1A1A1A1 as char), 1, 4, 0xC0));
31+
select hex(weight_string(cast(0xA1A1A1A1A1A1 as char), 2, 4, 0xC0));
32+
select hex(weight_string(cast(0xA1A1A1A1A1A1 as char), 3, 4, 0xC0));
33+
select hex(weight_string(cast(0xA1A1A1A1A1A1 as char), 4, 4, 0xC0));
34+
select hex(weight_string(cast(0xA1A1A1A1A1A1 as char), 5, 4, 0xC0));
35+
select hex(weight_string(cast(0xA1A1A1A1A1A1 as char),25, 4, 0xC0));
36+

0 commit comments

Comments
 (0)