Skip to content

Commit e78f712

Browse files
committed
fix: Use ~~ as match operator
1 parent cc9a69a commit e78f712

File tree

3 files changed

+209
-60
lines changed

3 files changed

+209
-60
lines changed

sql/016-operators-match.sql

Lines changed: 102 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -2,21 +2,33 @@
22
--
33
-- Support for the following comparisons:
44
--
5-
-- cs_encrypted_v1 @> cs_encrypted_v1
6-
-- cs_encrypted_v1 @> jsonb
7-
-- cs_encrypted_v1 @> cs_match_index_v1
5+
-- cs_encrypted_v1 ~~ cs_encrypted_v1
6+
-- cs_encrypted_v1 ~~ jsonb
7+
-- cs_encrypted_v1 ~~ cs_match_index_v1
88
--
99

10-
DROP OPERATOR IF EXISTS @> (cs_encrypted_v1, cs_encrypted_v1);
11-
DROP FUNCTION IF EXISTS cs_encrypted_contains_v1(a cs_encrypted_v1, b cs_encrypted_v1);
10+
-- The operator ~~ is equivalent to LIKE, and ~~*
1211

13-
CREATE FUNCTION cs_encrypted_contains_v1(a cs_encrypted_v1, b cs_encrypted_v1)
12+
DROP OPERATOR IF EXISTS ~~ (cs_encrypted_v1, cs_encrypted_v1);
13+
DROP FUNCTION IF EXISTS cs_encrypted_match_v1(a cs_encrypted_v1, b cs_encrypted_v1);
14+
15+
CREATE FUNCTION cs_encrypted_match_v1(a cs_encrypted_v1, b cs_encrypted_v1)
1416
RETURNS boolean AS $$
1517
SELECT cs_match_v1(a) @> cs_match_v1(b);
1618
$$ LANGUAGE SQL;
1719

18-
CREATE OPERATOR @>(
19-
PROCEDURE="cs_encrypted_contains_v1",
20+
CREATE OPERATOR ~~(
21+
PROCEDURE="cs_encrypted_match_v1",
22+
LEFTARG=cs_encrypted_v1,
23+
RIGHTARG=cs_encrypted_v1,
24+
RESTRICT = eqsel,
25+
JOIN = eqjoinsel,
26+
HASHES,
27+
MERGES
28+
);
29+
30+
CREATE OPERATOR ~~*(
31+
PROCEDURE="cs_encrypted_match_v1",
2032
LEFTARG=cs_encrypted_v1,
2133
RIGHTARG=cs_encrypted_v1,
2234
RESTRICT = eqsel,
@@ -26,16 +38,26 @@ CREATE OPERATOR @>(
2638
);
2739

2840

29-
DROP OPERATOR IF EXISTS @> (cs_encrypted_v1, cs_match_index_v1);
30-
DROP FUNCTION IF EXISTS cs_encrypted_contains_v1(a cs_encrypted_v1, b cs_match_index_v1);
41+
DROP OPERATOR IF EXISTS ~~ (cs_encrypted_v1, cs_match_index_v1);
42+
DROP FUNCTION IF EXISTS cs_encrypted_match_v1(a cs_encrypted_v1, b cs_match_index_v1);
3143

32-
CREATE FUNCTION cs_encrypted_contains_v1(a cs_encrypted_v1, b cs_match_index_v1)
44+
CREATE FUNCTION cs_encrypted_match_v1(a cs_encrypted_v1, b cs_match_index_v1)
3345
RETURNS boolean AS $$
3446
SELECT cs_match_v1(a) @> b;
3547
$$ LANGUAGE SQL;
3648

37-
CREATE OPERATOR @>(
38-
PROCEDURE="cs_encrypted_contains_v1",
49+
CREATE OPERATOR ~~(
50+
PROCEDURE="cs_encrypted_match_v1",
51+
LEFTARG=cs_encrypted_v1,
52+
RIGHTARG=cs_match_index_v1,
53+
RESTRICT = eqsel,
54+
JOIN = eqjoinsel,
55+
HASHES,
56+
MERGES
57+
);
58+
59+
CREATE OPERATOR ~~*(
60+
PROCEDURE="cs_encrypted_match_v1",
3961
LEFTARG=cs_encrypted_v1,
4062
RIGHTARG=cs_match_index_v1,
4163
RESTRICT = eqsel,
@@ -46,16 +68,16 @@ CREATE OPERATOR @>(
4668

4769

4870

49-
DROP OPERATOR IF EXISTS @> (cs_match_index_v1, cs_encrypted_v1);
50-
DROP FUNCTION IF EXISTS cs_encrypted_contains_v1(a cs_match_index_v1, b cs_encrypted_v1);
71+
DROP OPERATOR IF EXISTS ~~ (cs_match_index_v1, cs_encrypted_v1);
72+
DROP FUNCTION IF EXISTS cs_encrypted_match_v1(a cs_match_index_v1, b cs_encrypted_v1);
5173

52-
CREATE FUNCTION cs_encrypted_contains_v1(a cs_match_index_v1, b cs_encrypted_v1)
74+
CREATE FUNCTION cs_encrypted_match_v1(a cs_match_index_v1, b cs_encrypted_v1)
5375
RETURNS boolean AS $$
5476
SELECT a @> cs_match_v1(b);
5577
$$ LANGUAGE SQL;
5678

57-
CREATE OPERATOR @>(
58-
PROCEDURE="cs_encrypted_contains_v1",
79+
CREATE OPERATOR ~~(
80+
PROCEDURE="cs_encrypted_match_v1",
5981
LEFTARG=cs_match_index_v1,
6082
RIGHTARG=cs_encrypted_v1,
6183
RESTRICT = eqsel,
@@ -64,67 +86,104 @@ CREATE OPERATOR @>(
6486
MERGES
6587
);
6688

67-
68-
-----------------------------------------------------------------------------
89+
CREATE OPERATOR ~~*(
90+
PROCEDURE="cs_encrypted_match_v1",
91+
LEFTARG=cs_match_index_v1,
92+
RIGHTARG=cs_encrypted_v1,
93+
RESTRICT = eqsel,
94+
JOIN = eqjoinsel,
95+
HASHES,
96+
MERGES
97+
);
6998

7099

71-
DROP OPERATOR IF EXISTS <@ (cs_encrypted_v1, cs_encrypted_v1);
72-
DROP FUNCTION IF EXISTS cs_encrypted_contained_v1(a cs_encrypted_v1, b cs_encrypted_v1);
100+
DROP OPERATOR IF EXISTS ~~ (cs_match_index_v1, cs_match_index_v1);
101+
DROP FUNCTION IF EXISTS cs_encrypted_match_v1(a cs_match_index_v1, b cs_match_index_v1);
73102

74-
CREATE FUNCTION cs_encrypted_contained_v1(a cs_encrypted_v1, b cs_encrypted_v1)
103+
CREATE FUNCTION cs_encrypted_match_v1(a cs_match_index_v1, b cs_match_index_v1)
75104
RETURNS boolean AS $$
76-
SELECT cs_match_v1(a) <@ cs_match_v1(b);
105+
SELECT a @> b;
77106
$$ LANGUAGE SQL;
78107

79-
CREATE OPERATOR <@(
80-
PROCEDURE="cs_encrypted_contained_v1",
81-
LEFTARG=cs_encrypted_v1,
82-
RIGHTARG=cs_encrypted_v1,
108+
CREATE OPERATOR ~~(
109+
PROCEDURE="cs_encrypted_match_v1",
110+
LEFTARG=cs_match_index_v1,
111+
RIGHTARG=cs_match_index_v1,
112+
RESTRICT = eqsel,
113+
JOIN = eqjoinsel,
114+
HASHES,
115+
MERGES
116+
);
117+
118+
CREATE OPERATOR ~~*(
119+
PROCEDURE="cs_encrypted_match_v1",
120+
LEFTARG=cs_match_index_v1,
121+
RIGHTARG=cs_match_index_v1,
83122
RESTRICT = eqsel,
84123
JOIN = eqjoinsel,
85124
HASHES,
86125
MERGES
87126
);
88127

89128

90-
DROP OPERATOR IF EXISTS <@ (cs_encrypted_v1, cs_match_index_v1);
91-
DROP FUNCTION IF EXISTS cs_encrypted_contained_v1(a cs_encrypted_v1, b cs_match_index_v1);
129+
DROP OPERATOR IF EXISTS ~~ (cs_encrypted_v1, jsonb);
130+
DROP FUNCTION IF EXISTS cs_encrypted_match_v1(a cs_encrypted_v1, b jsonb);
92131

93-
CREATE FUNCTION cs_encrypted_contained_v1(a cs_encrypted_v1, b cs_match_index_v1)
132+
CREATE FUNCTION cs_encrypted_match_v1(a cs_encrypted_v1, b jsonb)
94133
RETURNS boolean AS $$
95-
SELECT cs_match_v1(a) <@ b;
134+
SELECT cs_match_v1(a) @> cs_match_v1(b);
96135
$$ LANGUAGE SQL;
97136

98-
CREATE OPERATOR <@ (
99-
PROCEDURE="cs_encrypted_contained_v1",
137+
CREATE OPERATOR ~~(
138+
PROCEDURE="cs_encrypted_match_v1",
100139
LEFTARG=cs_encrypted_v1,
101-
RIGHTARG=cs_match_index_v1,
140+
RIGHTARG=jsonb,
141+
RESTRICT = eqsel,
142+
JOIN = eqjoinsel,
143+
HASHES,
144+
MERGES
145+
);
146+
147+
CREATE OPERATOR ~~*(
148+
PROCEDURE="cs_encrypted_match_v1",
149+
LEFTARG=cs_encrypted_v1,
150+
RIGHTARG=jsonb,
102151
RESTRICT = eqsel,
103152
JOIN = eqjoinsel,
104153
HASHES,
105154
MERGES
106155
);
107156

108157

109-
DROP OPERATOR IF EXISTS <@ (cs_match_index_v1, cs_encrypted_v1);
110-
DROP FUNCTION IF EXISTS cs_encrypted_contained_v1(a cs_match_index_v1, b cs_encrypted_v1);
111158

112-
CREATE FUNCTION cs_encrypted_contained_v1(a cs_match_index_v1, b cs_encrypted_v1)
159+
DROP OPERATOR IF EXISTS ~~ (jsonb, cs_encrypted_v1);
160+
DROP FUNCTION IF EXISTS cs_encrypted_match_v1(a jsonb, b cs_encrypted_v1);
161+
162+
CREATE FUNCTION cs_encrypted_match_v1(a jsonb, b cs_encrypted_v1)
113163
RETURNS boolean AS $$
114-
SELECT a <@ cs_match_v1(b);
164+
SELECT cs_match_v1(a) @> cs_match_v1(b);
115165
$$ LANGUAGE SQL;
116166

117-
CREATE OPERATOR <@ (
118-
PROCEDURE="cs_encrypted_contained_v1",
119-
LEFTARG=cs_match_index_v1,
167+
CREATE OPERATOR ~~(
168+
PROCEDURE="cs_encrypted_match_v1",
169+
LEFTARG=jsonb,
120170
RIGHTARG=cs_encrypted_v1,
121171
RESTRICT = eqsel,
122172
JOIN = eqjoinsel,
123173
HASHES,
124174
MERGES
125175
);
126176

177+
CREATE OPERATOR ~~*(
178+
PROCEDURE="cs_encrypted_match_v1",
179+
LEFTARG=jsonb,
180+
RIGHTARG=cs_encrypted_v1,
181+
RESTRICT = eqsel,
182+
JOIN = eqjoinsel,
183+
HASHES,
184+
MERGES
185+
);
127186

128-
-----------------------------------------------------------------------------------------
129187

188+
-- -----------------------------------------------------------------------------
130189

sql/017-operators-ore.sql

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -411,16 +411,23 @@ CREATE FUNCTION cs_encrypted_ore_64_8_compare(a cs_encrypted_v1, b cs_encrypted_
411411
END;
412412
$$ LANGUAGE plpgsql;
413413

414-
DROP FUNCTION IF EXISTS cs_encrypted_ore_64_8_compare(a cs_encrypted_v1, b cs_encrypted_v1);
414+
DROP FUNCTION IF EXISTS cs_encrypted_ore_64_8_compare(a cs_encrypted_v1, b jsonb);
415415

416416
CREATE FUNCTION cs_encrypted_ore_64_8_compare(a cs_encrypted_v1, b jsonb)
417417
RETURNS integer AS $$
418418
BEGIN
419-
RETURN compare_ore_64_8_v1(cs_ore_64_8_v1(a), cs_ore_64_8_v1(jsonb));
419+
RETURN compare_ore_64_8_v1(cs_ore_64_8_v1(a), cs_ore_64_8_v1(b));
420420
END;
421421
$$ LANGUAGE plpgsql;
422422

423423

424+
CREATE FUNCTION cs_encrypted_ore_64_8_compare(a cs_encrypted_v1, b jsonb)
425+
RETURNS integer AS $$
426+
BEGIN
427+
RETURN compare_ore_64_8_v1(cs_ore_64_8_v1(a), cs_ore_64_8_v1(b));
428+
END;
429+
$$ LANGUAGE plpgsql;
430+
424431
-----------------------------------------------------------------------------------------
425432

426433

0 commit comments

Comments
 (0)