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 154 155 156
|
/*
* 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
* 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.
*
* Also disable for Windows. It fails similarly, at least in some locales.
*/
SELECT getdatabaseencoding() <> 'UTF8' OR
version() ~ '(Visual C\+\+|mingw32|windows)' 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)
|