Skip to content

Commit 4b0d27c

Browse files
authored
Merge pull request #96 from cipherstash/match-using-like-operators
fix: Use ~~ as match operator
2 parents cc9a69a + 2bfb348 commit 4b0d27c

File tree

3 files changed

+207
-60
lines changed

3 files changed

+207
-60
lines changed

Diff for: sql/016-operators-match.sql

+100-43
Original file line numberDiff line numberDiff line change
@@ -2,21 +2,21 @@
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+
DROP OPERATOR IF EXISTS ~~ (cs_encrypted_v1, cs_encrypted_v1);
11+
DROP FUNCTION IF EXISTS cs_encrypted_match_v1(a cs_encrypted_v1, b cs_encrypted_v1);
1212

13-
CREATE FUNCTION cs_encrypted_contains_v1(a cs_encrypted_v1, b cs_encrypted_v1)
13+
CREATE FUNCTION cs_encrypted_match_v1(a cs_encrypted_v1, b cs_encrypted_v1)
1414
RETURNS boolean AS $$
1515
SELECT cs_match_v1(a) @> cs_match_v1(b);
1616
$$ LANGUAGE SQL;
1717

18-
CREATE OPERATOR @>(
19-
PROCEDURE="cs_encrypted_contains_v1",
18+
CREATE OPERATOR ~~(
19+
PROCEDURE="cs_encrypted_match_v1",
2020
LEFTARG=cs_encrypted_v1,
2121
RIGHTARG=cs_encrypted_v1,
2222
RESTRICT = eqsel,
@@ -25,17 +25,37 @@ CREATE OPERATOR @>(
2525
MERGES
2626
);
2727

28+
CREATE OPERATOR ~~*(
29+
PROCEDURE="cs_encrypted_match_v1",
30+
LEFTARG=cs_encrypted_v1,
31+
RIGHTARG=cs_encrypted_v1,
32+
RESTRICT = eqsel,
33+
JOIN = eqjoinsel,
34+
HASHES,
35+
MERGES
36+
);
2837

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);
3138

32-
CREATE FUNCTION cs_encrypted_contains_v1(a cs_encrypted_v1, b cs_match_index_v1)
39+
DROP OPERATOR IF EXISTS ~~ (cs_encrypted_v1, cs_match_index_v1);
40+
DROP FUNCTION IF EXISTS cs_encrypted_match_v1(a cs_encrypted_v1, b cs_match_index_v1);
41+
42+
CREATE FUNCTION cs_encrypted_match_v1(a cs_encrypted_v1, b cs_match_index_v1)
3343
RETURNS boolean AS $$
3444
SELECT cs_match_v1(a) @> b;
3545
$$ LANGUAGE SQL;
3646

37-
CREATE OPERATOR @>(
38-
PROCEDURE="cs_encrypted_contains_v1",
47+
CREATE OPERATOR ~~(
48+
PROCEDURE="cs_encrypted_match_v1",
49+
LEFTARG=cs_encrypted_v1,
50+
RIGHTARG=cs_match_index_v1,
51+
RESTRICT = eqsel,
52+
JOIN = eqjoinsel,
53+
HASHES,
54+
MERGES
55+
);
56+
57+
CREATE OPERATOR ~~*(
58+
PROCEDURE="cs_encrypted_match_v1",
3959
LEFTARG=cs_encrypted_v1,
4060
RIGHTARG=cs_match_index_v1,
4161
RESTRICT = eqsel,
@@ -46,16 +66,16 @@ CREATE OPERATOR @>(
4666

4767

4868

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);
69+
DROP OPERATOR IF EXISTS ~~ (cs_match_index_v1, cs_encrypted_v1);
70+
DROP FUNCTION IF EXISTS cs_encrypted_match_v1(a cs_match_index_v1, b cs_encrypted_v1);
5171

52-
CREATE FUNCTION cs_encrypted_contains_v1(a cs_match_index_v1, b cs_encrypted_v1)
72+
CREATE FUNCTION cs_encrypted_match_v1(a cs_match_index_v1, b cs_encrypted_v1)
5373
RETURNS boolean AS $$
5474
SELECT a @> cs_match_v1(b);
5575
$$ LANGUAGE SQL;
5676

57-
CREATE OPERATOR @>(
58-
PROCEDURE="cs_encrypted_contains_v1",
77+
CREATE OPERATOR ~~(
78+
PROCEDURE="cs_encrypted_match_v1",
5979
LEFTARG=cs_match_index_v1,
6080
RIGHTARG=cs_encrypted_v1,
6181
RESTRICT = eqsel,
@@ -64,67 +84,104 @@ CREATE OPERATOR @>(
6484
MERGES
6585
);
6686

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

7097

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);
98+
DROP OPERATOR IF EXISTS ~~ (cs_match_index_v1, cs_match_index_v1);
99+
DROP FUNCTION IF EXISTS cs_encrypted_match_v1(a cs_match_index_v1, b cs_match_index_v1);
73100

74-
CREATE FUNCTION cs_encrypted_contained_v1(a cs_encrypted_v1, b cs_encrypted_v1)
101+
CREATE FUNCTION cs_encrypted_match_v1(a cs_match_index_v1, b cs_match_index_v1)
75102
RETURNS boolean AS $$
76-
SELECT cs_match_v1(a) <@ cs_match_v1(b);
103+
SELECT a @> b;
77104
$$ LANGUAGE SQL;
78105

79-
CREATE OPERATOR <@(
80-
PROCEDURE="cs_encrypted_contained_v1",
81-
LEFTARG=cs_encrypted_v1,
82-
RIGHTARG=cs_encrypted_v1,
106+
CREATE OPERATOR ~~(
107+
PROCEDURE="cs_encrypted_match_v1",
108+
LEFTARG=cs_match_index_v1,
109+
RIGHTARG=cs_match_index_v1,
110+
RESTRICT = eqsel,
111+
JOIN = eqjoinsel,
112+
HASHES,
113+
MERGES
114+
);
115+
116+
CREATE OPERATOR ~~*(
117+
PROCEDURE="cs_encrypted_match_v1",
118+
LEFTARG=cs_match_index_v1,
119+
RIGHTARG=cs_match_index_v1,
83120
RESTRICT = eqsel,
84121
JOIN = eqjoinsel,
85122
HASHES,
86123
MERGES
87124
);
88125

89126

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);
127+
DROP OPERATOR IF EXISTS ~~ (cs_encrypted_v1, jsonb);
128+
DROP FUNCTION IF EXISTS cs_encrypted_match_v1(a cs_encrypted_v1, b jsonb);
92129

93-
CREATE FUNCTION cs_encrypted_contained_v1(a cs_encrypted_v1, b cs_match_index_v1)
130+
CREATE FUNCTION cs_encrypted_match_v1(a cs_encrypted_v1, b jsonb)
94131
RETURNS boolean AS $$
95-
SELECT cs_match_v1(a) <@ b;
132+
SELECT cs_match_v1(a) @> cs_match_v1(b);
96133
$$ LANGUAGE SQL;
97134

98-
CREATE OPERATOR <@ (
99-
PROCEDURE="cs_encrypted_contained_v1",
135+
CREATE OPERATOR ~~(
136+
PROCEDURE="cs_encrypted_match_v1",
100137
LEFTARG=cs_encrypted_v1,
101-
RIGHTARG=cs_match_index_v1,
138+
RIGHTARG=jsonb,
139+
RESTRICT = eqsel,
140+
JOIN = eqjoinsel,
141+
HASHES,
142+
MERGES
143+
);
144+
145+
CREATE OPERATOR ~~*(
146+
PROCEDURE="cs_encrypted_match_v1",
147+
LEFTARG=cs_encrypted_v1,
148+
RIGHTARG=jsonb,
102149
RESTRICT = eqsel,
103150
JOIN = eqjoinsel,
104151
HASHES,
105152
MERGES
106153
);
107154

108155

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);
111156

112-
CREATE FUNCTION cs_encrypted_contained_v1(a cs_match_index_v1, b cs_encrypted_v1)
157+
DROP OPERATOR IF EXISTS ~~ (jsonb, cs_encrypted_v1);
158+
DROP FUNCTION IF EXISTS cs_encrypted_match_v1(a jsonb, b cs_encrypted_v1);
159+
160+
CREATE FUNCTION cs_encrypted_match_v1(a jsonb, b cs_encrypted_v1)
113161
RETURNS boolean AS $$
114-
SELECT a <@ cs_match_v1(b);
162+
SELECT cs_match_v1(a) @> cs_match_v1(b);
115163
$$ LANGUAGE SQL;
116164

117-
CREATE OPERATOR <@ (
118-
PROCEDURE="cs_encrypted_contained_v1",
119-
LEFTARG=cs_match_index_v1,
165+
CREATE OPERATOR ~~(
166+
PROCEDURE="cs_encrypted_match_v1",
167+
LEFTARG=jsonb,
120168
RIGHTARG=cs_encrypted_v1,
121169
RESTRICT = eqsel,
122170
JOIN = eqjoinsel,
123171
HASHES,
124172
MERGES
125173
);
126174

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

128-
-----------------------------------------------------------------------------------------
129185

186+
-- -----------------------------------------------------------------------------
130187

Diff for: sql/017-operators-ore.sql

+9-2
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)