|
1 | 1 | -- REQUIRE: src/schema.sql |
2 | 2 | -- REQUIRE: src/encrypted/types.sql |
| 3 | +-- REQUIRE: src/encrypted/casts.sql |
| 4 | +-- REQUIRE: src/encrypted/functions.sql |
3 | 5 |
|
4 | 6 |
|
5 | 7 | -- |
|
18 | 20 | sv := jsonb_build_array(val); |
19 | 21 | END IF; |
20 | 22 |
|
21 | | - SELECT array_agg(elem::eql_v2_encrypted) |
| 23 | + SELECT array_agg(eql_v2.to_encrypted(elem)) |
22 | 24 | INTO ary |
23 | 25 | FROM jsonb_array_elements(sv) AS elem; |
24 | 26 |
|
|
38 | 40 | END; |
39 | 41 | $$ LANGUAGE plpgsql; |
40 | 42 |
|
| 43 | +-- |
| 44 | +-- Returns true if val is an SteVec with a single array item. |
| 45 | +-- SteVec value items can be treated as regular eql_encrypted |
| 46 | +-- |
| 47 | +CREATE FUNCTION eql_v2.is_ste_vec_value(val jsonb) |
| 48 | + RETURNS boolean |
| 49 | + IMMUTABLE STRICT PARALLEL SAFE |
| 50 | +AS $$ |
| 51 | + BEGIN |
| 52 | + IF val ? 'sv' THEN |
| 53 | + RETURN jsonb_array_length(val->'sv') = 1; |
| 54 | + END IF; |
| 55 | + |
| 56 | + RETURN false; |
| 57 | + END; |
| 58 | +$$ LANGUAGE plpgsql; |
41 | 59 |
|
| 60 | +CREATE FUNCTION eql_v2.is_ste_vec_value(val eql_v2_encrypted) |
| 61 | + RETURNS boolean |
| 62 | + IMMUTABLE STRICT PARALLEL SAFE |
| 63 | +AS $$ |
| 64 | + BEGIN |
| 65 | + RETURN eql_v2.is_ste_vec_value(val.data); |
| 66 | + END; |
| 67 | +$$ LANGUAGE plpgsql; |
| 68 | + |
| 69 | +-- |
| 70 | +-- Returns an SteVec with a single array item as an eql_encrypted |
| 71 | +-- |
| 72 | +CREATE FUNCTION eql_v2.to_ste_vec_value(val jsonb) |
| 73 | + RETURNS eql_v2_encrypted |
| 74 | + IMMUTABLE STRICT PARALLEL SAFE |
| 75 | +AS $$ |
| 76 | + DECLARE |
| 77 | + meta jsonb; |
| 78 | + sv jsonb; |
| 79 | + BEGIN |
| 80 | + |
| 81 | + IF val IS NULL THEN |
| 82 | + RETURN NULL; |
| 83 | + END IF; |
| 84 | + |
| 85 | + IF eql_v2.is_ste_vec_value(val) THEN |
| 86 | + meta := eql_v2.meta_data(val); |
| 87 | + sv := val->'sv'; |
| 88 | + sv := sv[0]; |
| 89 | + |
| 90 | + RETURN eql_v2.to_encrypted(meta || sv); |
| 91 | + END IF; |
| 92 | + |
| 93 | + RETURN eql_v2.to_encrypted(val); |
| 94 | + END; |
| 95 | +$$ LANGUAGE plpgsql; |
| 96 | + |
| 97 | +CREATE FUNCTION eql_v2.to_ste_vec_value(val eql_v2_encrypted) |
| 98 | + RETURNS eql_v2_encrypted |
| 99 | + IMMUTABLE STRICT PARALLEL SAFE |
| 100 | +AS $$ |
| 101 | + BEGIN |
| 102 | + RETURN eql_v2.to_ste_vec_value(val.data); |
| 103 | + END; |
| 104 | +$$ LANGUAGE plpgsql; |
42 | 105 |
|
43 | 106 | CREATE FUNCTION eql_v2.selector(val jsonb) |
44 | 107 | RETURNS text |
@@ -119,7 +182,7 @@ AS $$ |
119 | 182 | $$ LANGUAGE plpgsql; |
120 | 183 |
|
121 | 184 |
|
122 | | --- Returns truy if a contains b |
| 185 | +-- Returns true if a contains b |
123 | 186 | -- All values of b must be in a |
124 | 187 | CREATE FUNCTION eql_v2.ste_vec_contains(a eql_v2_encrypted, b eql_v2_encrypted) |
125 | 188 | RETURNS boolean |
|
0 commit comments