1
0
mirror of https://github.com/postgres/postgres.git synced 2025-07-28 23:42:10 +03:00

Add citext_pattern_ops for citext contrib module

This is similar to text_pattern_ops.

Alexey Chernyshov, reviewed by Jacob Champion.
This commit is contained in:
Andrew Dunstan
2017-09-19 08:31:45 -04:00
parent f8e5f156b3
commit f246499764
5 changed files with 1013 additions and 0 deletions

View File

@ -752,3 +752,81 @@ SELECT *
WHERE t.id IS NULL OR m.id IS NULL;
REFRESH MATERIALIZED VIEW CONCURRENTLY citext_matview;
SELECT * FROM citext_matview ORDER BY id;
-- test citext_pattern_cmp() function explicitly.
SELECT citext_pattern_cmp('aardvark'::citext, 'aardvark'::citext) AS zero;
SELECT citext_pattern_cmp('aardvark'::citext, 'aardVark'::citext) AS zero;
SELECT citext_pattern_cmp('AARDVARK'::citext, 'AARDVARK'::citext) AS zero;
SELECT citext_pattern_cmp('B'::citext, 'a'::citext) > 0 AS true;
SELECT citext_pattern_cmp('a'::citext, 'B'::citext) < 0 AS true;
SELECT citext_pattern_cmp('A'::citext, 'b'::citext) < 0 AS true;
SELECT citext_pattern_cmp('ABCD'::citext, 'abc'::citext) > 0 AS true;
SELECT citext_pattern_cmp('ABC'::citext, 'abcd'::citext) < 0 AS true;
-- test operator functions
-- lt
SELECT citext_pattern_lt('a'::citext, 'b'::citext) AS true;
SELECT citext_pattern_lt('A'::citext, 'b'::citext) AS true;
SELECT citext_pattern_lt('a'::citext, 'B'::citext) AS true;
SELECT citext_pattern_lt('b'::citext, 'a'::citext) AS false;
SELECT citext_pattern_lt('B'::citext, 'a'::citext) AS false;
SELECT citext_pattern_lt('b'::citext, 'A'::citext) AS false;
-- le
SELECT citext_pattern_le('a'::citext, 'a'::citext) AS true;
SELECT citext_pattern_le('a'::citext, 'A'::citext) AS true;
SELECT citext_pattern_le('A'::citext, 'a'::citext) AS true;
SELECT citext_pattern_le('A'::citext, 'A'::citext) AS true;
SELECT citext_pattern_le('a'::citext, 'B'::citext) AS true;
SELECT citext_pattern_le('A'::citext, 'b'::citext) AS true;
SELECT citext_pattern_le('a'::citext, 'B'::citext) AS true;
SELECT citext_pattern_le('b'::citext, 'a'::citext) AS false;
SELECT citext_pattern_le('B'::citext, 'a'::citext) AS false;
SELECT citext_pattern_le('b'::citext, 'A'::citext) AS false;
-- gt
SELECT citext_pattern_gt('a'::citext, 'b'::citext) AS false;
SELECT citext_pattern_gt('A'::citext, 'b'::citext) AS false;
SELECT citext_pattern_gt('a'::citext, 'B'::citext) AS false;
SELECT citext_pattern_gt('b'::citext, 'a'::citext) AS true;
SELECT citext_pattern_gt('B'::citext, 'a'::citext) AS true;
SELECT citext_pattern_gt('b'::citext, 'A'::citext) AS true;
-- ge
SELECT citext_pattern_ge('a'::citext, 'a'::citext) AS true;
SELECT citext_pattern_ge('a'::citext, 'A'::citext) AS true;
SELECT citext_pattern_ge('A'::citext, 'a'::citext) AS true;
SELECT citext_pattern_ge('A'::citext, 'A'::citext) AS true;
SELECT citext_pattern_ge('a'::citext, 'B'::citext) AS false;
SELECT citext_pattern_ge('A'::citext, 'b'::citext) AS false;
SELECT citext_pattern_ge('a'::citext, 'B'::citext) AS false;
SELECT citext_pattern_ge('b'::citext, 'a'::citext) AS true;
SELECT citext_pattern_ge('B'::citext, 'a'::citext) AS true;
SELECT citext_pattern_ge('b'::citext, 'A'::citext) AS true;
-- Test ~<~ and ~<=~
SELECT 'a'::citext ~<~ 'B'::citext AS t;
SELECT 'b'::citext ~<~ 'A'::citext AS f;
SELECT 'à'::citext ~<~ 'À'::citext AS f;
SELECT 'a'::citext ~<=~ 'B'::citext AS t;
SELECT 'a'::citext ~<=~ 'A'::citext AS t;
SELECT 'à'::citext ~<=~ 'À'::citext AS t;
-- Test ~>~ and ~>=~
SELECT 'B'::citext ~>~ 'a'::citext AS t;
SELECT 'b'::citext ~>~ 'A'::citext AS t;
SELECT 'à'::citext ~>~ 'À'::citext AS f;
SELECT 'B'::citext ~>~ 'b'::citext AS f;
SELECT 'B'::citext ~>=~ 'b'::citext AS t;
SELECT 'à'::citext ~>=~ 'À'::citext AS t;
-- Test implicit casting. citext casts to text, but not vice-versa.
SELECT 'B'::citext ~<~ 'a'::text AS t; -- text wins.
SELECT 'B'::citext ~<=~ 'a'::text AS t; -- text wins.
SELECT 'a'::citext ~>~ 'B'::text AS t; -- text wins.
SELECT 'a'::citext ~>=~ 'B'::text AS t; -- text wins.
-- Test implicit casting. citext casts to varchar, but not vice-versa.
SELECT 'B'::citext ~<~ 'a'::varchar AS t; -- varchar wins.
SELECT 'B'::citext ~<=~ 'a'::varchar AS t; -- varchar wins.
SELECT 'a'::citext ~>~ 'B'::varchar AS t; -- varchar wins.
SELECT 'a'::citext ~>=~ 'B'::varchar AS t; -- varchar wins.