blob: 6630e09a4de9570b23e0044895acfe89700b5841 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
|
/*
* This test must be run in a database with UTF-8 encoding
* and a Unicode-aware locale.
*
* Also disable this file for ICU, because the test for the the
* Turkish dotted I is not correct for many ICU locales. citext always
* uses the default collation, so it's not easy to restrict the test
* to the "tr-TR-x-icu" collation where it will succeed.
*/
SELECT getdatabaseencoding() <> 'UTF8' OR
(SELECT (datlocprovider = 'c' AND datctype = 'C') OR datlocprovider = 'i'
FROM pg_database
WHERE datname=current_database())
AS skip_test \gset
\if :skip_test
\quit
\endif
set client_encoding = utf8;
-- CREATE EXTENSION IF NOT EXISTS citext;
-- Multibyte sanity tests.
SELECT 'À'::citext = 'À'::citext AS t;
t
---
t
(1 row)
SELECT 'À'::citext = 'à'::citext AS t;
t
---
t
(1 row)
SELECT 'À'::text = 'à'::text AS f; -- text wins.
f
---
f
(1 row)
SELECT 'À'::citext <> 'B'::citext AS t;
t
---
t
(1 row)
-- Test combining characters making up canonically equivalent strings.
SELECT 'Ä'::text <> 'Ä'::text AS t;
t
---
t
(1 row)
SELECT 'Ä'::citext <> 'Ä'::citext AS t;
t
---
t
(1 row)
-- Test the Turkish dotted I. The lowercase is a single byte while the
-- uppercase is multibyte. This is why the comparison code can't be optimized
-- to compare string lengths.
SELECT 'i'::citext = 'İ'::citext AS t;
t
---
t
(1 row)
-- Regression.
SELECT 'láska'::citext <> 'laská'::citext AS t;
t
---
t
(1 row)
SELECT 'Ask Bjørn Hansen'::citext = 'Ask Bjørn Hansen'::citext AS t;
t
---
t
(1 row)
SELECT 'Ask Bjørn Hansen'::citext = 'ASK BJØRN HANSEN'::citext AS t;
t
---
t
(1 row)
SELECT 'Ask Bjørn Hansen'::citext <> 'Ask Bjorn Hansen'::citext AS t;
t
---
t
(1 row)
SELECT 'Ask Bjørn Hansen'::citext <> 'ASK BJORN HANSEN'::citext AS t;
t
---
t
(1 row)
SELECT citext_cmp('Ask Bjørn Hansen'::citext, 'Ask Bjørn Hansen'::citext) = 0 AS t;
t
---
t
(1 row)
SELECT citext_cmp('Ask Bjørn Hansen'::citext, 'ask bjørn hansen'::citext) = 0 AS t;
t
---
t
(1 row)
SELECT citext_cmp('Ask Bjørn Hansen'::citext, 'ASK BJØRN HANSEN'::citext) = 0 AS t;
t
---
t
(1 row)
SELECT citext_cmp('Ask Bjørn Hansen'::citext, 'Ask Bjorn Hansen'::citext) > 0 AS t;
t
---
t
(1 row)
SELECT citext_cmp('Ask Bjorn Hansen'::citext, 'Ask Bjørn Hansen'::citext) < 0 AS t;
t
---
t
(1 row)
-- Test ~<~ and ~<=~
SELECT 'à'::citext ~<~ 'À'::citext AS f;
f
---
f
(1 row)
SELECT 'à'::citext ~<=~ 'À'::citext AS t;
t
---
t
(1 row)
-- Test ~>~ and ~>=~
SELECT 'à'::citext ~>~ 'À'::citext AS f;
f
---
f
(1 row)
SELECT 'à'::citext ~>=~ 'À'::citext AS t;
t
---
t
(1 row)
|