File tree 3 files changed +36
-15
lines changed
3 files changed +36
-15
lines changed Original file line number Diff line number Diff line change @@ -156,6 +156,28 @@ DROP CAST IF EXISTS (text AS ore_64_8_v1_term);
156
156
CREATE CAST (text AS ore_64_8_v1_term)
157
157
WITH FUNCTION _cs_text_to_ore_64_8_v1_term_v1_0(text ) AS IMPLICIT;
158
158
159
+ DROP FUNCTION IF EXISTS jsonb_array_to_ore_64_8_v1(val jsonb);
160
+
161
+ -- Casts a jsonb array of hex-encoded strings to the `ore_64_8_v1` composite type.
162
+ -- In other words, this function takes the ORE index format sent through in the
163
+ -- EQL payload from Proxy and decodes it as the composite type that we use for
164
+ -- ORE operations on the Postgres side.
165
+ CREATE FUNCTION jsonb_array_to_ore_64_8_v1 (val jsonb)
166
+ RETURNS ore_64_8_v1 AS $$
167
+ DECLARE
168
+ terms_arr ore_64_8_v1_term[];
169
+ BEGIN
170
+ IF jsonb_typeof(val) = ' null' THEN
171
+ RETURN NULL ;
172
+ END IF;
173
+
174
+ SELECT array_agg(ROW(decode(value::text , ' hex' ))::ore_64_8_v1_term)
175
+ INTO terms_arr
176
+ FROM jsonb_array_elements_text(val) AS value;
177
+
178
+ RETURN ROW(terms_arr)::ore_64_8_v1;
179
+ END;
180
+ $$ LANGUAGE plpgsql;
159
181
160
182
-- extracts ore index from an encrypted column
161
183
DROP FUNCTION IF EXISTS cs_ore_64_8_v1_v0_0(val jsonb);
@@ -166,7 +188,7 @@ CREATE FUNCTION cs_ore_64_8_v1_v0_0(val jsonb)
166
188
AS $$
167
189
BEGIN
168
190
IF val ? ' o' THEN
169
- RETURN (val- >> ' o' )::ore_64_8_v1 ;
191
+ RETURN jsonb_array_to_ore_64_8_v1 (val- > ' o' );
170
192
END IF;
171
193
RAISE ' Expected an ore index (o) value in json: %' , val;
172
194
END;
Original file line number Diff line number Diff line change 6
6
ASSERT (SELECT EXISTS (SELECT cs_unique_v1(' {"u": "u"}' ::jsonb)));
7
7
ASSERT (SELECT EXISTS (SELECT cs_match_v1(' {"m": []}' ::jsonb)));
8
8
ASSERT (SELECT EXISTS (SELECT cs_ste_vec_v1(' {"sv": [[]]}' ::jsonb)));
9
- ASSERT (SELECT EXISTS (SELECT cs_ore_64_8_v1(' {"o": "()" }' ::jsonb)));
9
+ ASSERT (SELECT EXISTS (SELECT cs_ore_64_8_v1(' {"o": [] }' ::jsonb)));
10
10
11
11
END;
12
12
$$ LANGUAGE plpgsql;
13
13
14
14
DO $$
15
15
BEGIN
16
16
-- sanity check
17
- PERFORM cs_ore_64_8_v1(' {"o": "()" }' ::jsonb);
17
+ PERFORM cs_ore_64_8_v1(' {"o": [] }' ::jsonb);
18
18
19
19
BEGIN
20
20
PERFORM cs_ore_64_8_v1(' {}' ::jsonb);
76
76
END;
77
77
END;
78
78
$$ LANGUAGE plpgsql;
79
-
You can’t perform that action at this time.
0 commit comments