Skip to content

Commit 54840cb

Browse files
authored
Merge pull request #120 from cipherstash/jsonb-field-access-with-metadata
jsonb accessors return with metadata
2 parents 6635827 + 8dc413a commit 54840cb

File tree

3 files changed

+33
-2
lines changed

3 files changed

+33
-2
lines changed

src/encrypted/functions.sql

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,3 +85,13 @@ AS $$
8585
END;
8686
$$ LANGUAGE plpgsql;
8787

88+
89+
CREATE FUNCTION eql_v2.meta_data(val eql_v2_encrypted)
90+
RETURNS jsonb
91+
IMMUTABLE STRICT PARALLEL SAFE
92+
AS $$
93+
BEGIN
94+
RETURN eql_v2.meta_data(val.data);
95+
END;
96+
$$ LANGUAGE plpgsql;
97+

src/operators/->.sql

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,14 +25,18 @@ CREATE FUNCTION eql_v2."->"(e eql_v2_encrypted, selector text)
2525
IMMUTABLE STRICT PARALLEL SAFE
2626
AS $$
2727
DECLARE
28+
meta jsonb;
2829
sv eql_v2_encrypted[];
29-
found eql_v2_encrypted;
30+
found jsonb;
3031
BEGIN
3132

3233
IF e IS NULL THEN
3334
RETURN NULL;
3435
END IF;
3536

37+
-- Column identifier and version
38+
meta := eql_v2.meta_data(e);
39+
3640
sv := eql_v2.ste_vec(e);
3741

3842
FOR idx IN 1..array_length(sv, 1) LOOP
@@ -41,7 +45,7 @@ AS $$
4145
END IF;
4246
END LOOP;
4347

44-
RETURN found;
48+
RETURN (meta || found)::eql_v2_encrypted;
4549
END;
4650
$$ LANGUAGE plpgsql;
4751

src/operators/->_test.sql

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,3 +99,20 @@ DO $$
9999
END;
100100
$$ LANGUAGE plpgsql;
101101

102+
103+
--
104+
-- Field accessor returns column metadata
105+
--
106+
DO $$
107+
DECLARE
108+
result jsonb;
109+
BEGIN
110+
PERFORM seed_encrypted_json();
111+
112+
SELECT e->'2517068c0d1f9d4d41d2c666211f785e'::text FROM encrypted LIMIT 1 INTO result;
113+
114+
ASSERT result ? 'i';
115+
ASSERT result ? 'v';
116+
117+
END;
118+
$$ LANGUAGE plpgsql;

0 commit comments

Comments
 (0)