1
by brian
clean slate |
1 |
--disable_warnings
|
2 |
drop table if exists t1; |
|
3 |
--enable_warnings
|
|
4 |
||
5 |
#
|
|
6 |
# If it's BLOB or BINARY or VARBINARY, then output = input. |
|
7 |
#
|
|
8 |
select hex(weight_string(0x010203));
|
|
9 |
||
10 |
#
|
|
11 |
# "AS CHAR ( int )" causes padding on the right. The pad
|
|
12 |
# character is always space, that is, 0x20 or 0x0020.
|
|
13 |
# The padding occurs before the conversion to a weight.
|
|
14 |
# The value of "int" is the number of characters, not the number of bytes.
|
|
15 |
#
|
|
16 |
select hex(weight_string('aa' as char(3))); |
|
17 |
||
18 |
#
|
|
19 |
# The minimum value of 'int' is 1. |
|
20 |
#
|
|
21 |
--error 1064
|
|
22 |
select hex(weight_string('a' as char(-1))); |
|
23 |
--error 1064
|
|
24 |
select hex(weight_string('a' as char(0))); |
|
25 |
select hex(weight_string('a' as char(1))); |
|
26 |
||
27 |
#
|
|
28 |
# If 'int' is smaller than the length of 'string', |
|
29 |
# truncation will occur with no warning.
|
|
30 |
#
|
|
31 |
select hex(weight_string('ab' as char(1))); |
|
32 |
||
33 |
#
|
|
34 |
# If "AS CHAR ( int )" is omitted, there is no padding and no truncation.
|
|
35 |
#
|
|
36 |
select hex(weight_string('ab')); |
|
37 |
||
38 |
#
|
|
39 |
# "AS BINARY ( int )" is like CHAR(int) but causes padding of 0x00
|
|
40 |
# so one doesn't have to use "CAST(string AS BINARY(int))". |
|
41 |
#
|
|
42 |
select hex(weight_string('aa' as binary(3))); |
|
43 |
select hex(weight_string(cast('aa' as binary(3)))); |
|
44 |
||
45 |
#
|
|
46 |
# If and only if one specifies "LEVEL numeric-list" (not "range"), |
|
47 |
# one may follow any "number" with [ASC|DESC][REVERSE] |
|
48 |
#
|
|
49 |
--error 1064
|
|
50 |
select hex(weight_string('ab' level 1-1 ASC)); |
|
51 |
--error 1064
|
|
52 |
select hex(weight_string('ab' level 1-1 DESC)); |
|
53 |
--error 1064
|
|
54 |
select hex(weight_string('ab' level 1-1 REVERSE)); |
|
55 |
||
56 |
#
|
|
57 |
# If one says "DESC", then the weights come out NOTed |
|
58 |
# or negated for that level. |
|
59 |
# If one says "REVERSE", then the weights come out in |
|
60 |
# reverse order for that level, that is, starting with |
|
61 |
# the last character and ending with the first character. |
|
62 |
#
|
|
63 |
select hex(weight_string('ab' level 1 ASC)); |
|
64 |
select hex(weight_string('ab' level 1 DESC)); |
|
65 |
select hex(weight_string('ab' level 1 REVERSE)); |
|
66 |
select hex(weight_string('ab' level 1 DESC REVERSE)); |
|
67 |
||
68 |
#
|
|
69 |
# If the result length is less than or equal to the |
|
70 |
# maximum possible length for the VARBINARY data type, |
|
71 |
# then the result data type is VARBINARY. Otherwise |
|
72 |
# the result data type is BLOB. |
|
73 |
#
|
|
74 |
create table t1 select weight_string('test') as w; |
|
75 |
show create table t1; |
|
76 |
drop table t1; |
|
77 |
create table t1 select weight_string(repeat('t',66000)) as w; |
|
78 |
show create table t1; |
|
79 |
drop table t1; |
|
80 |
||
81 |
#
|
|
82 |
# If input is NULL, then output is NULL. |
|
83 |
#
|
|
84 |
select weight_string(NULL); |
|
85 |
||
86 |
#
|
|
87 |
# WEIGHT_STRING and REVERSE will not be a new reserved word. |
|
88 |
#
|
|
89 |
select 1 as weight_string, 2 as reverse; |
|
90 |
||
91 |
#
|
|
92 |
# Check that collation derivation is copied from the argument |
|
93 |
#
|
|
94 |
select coercibility(weight_string('test')); |
|
95 |
||
96 |
#
|
|
97 |
# Bug#33663 Character sets: weight_string function, |
|
98 |
# varchar column, wrong result |
|
99 |
#
|
|
100 |
create table t1 (s1 varchar(5)); |
|
101 |
insert into t1 values ('a'),(null); |
|
102 |
select hex(weight_string(s1)) from t1 order by s1; |
|
103 |
drop table t1; |