diff --git a/src/encrypted/functions.sql b/src/encrypted/functions.sql index b42ac61..0629754 100644 --- a/src/encrypted/functions.sql +++ b/src/encrypted/functions.sql @@ -18,7 +18,6 @@ AS $$ $$ LANGUAGE plpgsql; - CREATE FUNCTION eql_v2.ciphertext(val eql_v2_encrypted) RETURNS text IMMUTABLE STRICT PARALLEL SAFE @@ -29,7 +28,6 @@ AS $$ $$ LANGUAGE plpgsql; - CREATE FUNCTION eql_v2._first_grouped_value(jsonb, jsonb) RETURNS jsonb AS $$ SELECT COALESCE($1, $2); diff --git a/src/jsonb/functions.sql b/src/jsonb/functions.sql index 31c5b79..a17675f 100644 --- a/src/jsonb/functions.sql +++ b/src/jsonb/functions.sql @@ -246,17 +246,22 @@ CREATE FUNCTION eql_v2.jsonb_array_elements(val jsonb) AS $$ DECLARE sv eql_v2_encrypted[]; - found eql_v2_encrypted[]; + meta jsonb; + item jsonb; BEGIN IF NOT eql_v2.is_ste_vec_array(val) THEN RAISE 'cannot extract elements from non-array'; END IF; + -- Column identifier and version + meta := eql_v2.meta_data(val); + sv := eql_v2.ste_vec(val); FOR idx IN 1..array_length(sv, 1) LOOP - RETURN NEXT sv[idx]; + item = sv[idx]; + RETURN NEXT (meta || item)::eql_v2_encrypted; END LOOP; RETURN; diff --git a/src/jsonb/functions_test.sql b/src/jsonb/functions_test.sql index 651b1fc..861d443 100644 --- a/src/jsonb/functions_test.sql +++ b/src/jsonb/functions_test.sql @@ -208,6 +208,21 @@ $$ LANGUAGE plpgsql; +DO $$ + DECLARE + result jsonb; + BEGIN + PERFORM seed_encrypted_json(); + PERFORM seed_encrypted(get_array_ste_vec()::eql_v2_encrypted); + + SELECT eql_v2.jsonb_array_elements(eql_v2.jsonb_path_query(e, 'f510853730e1c3dbd31b86963f029dd5')::jsonb) FROM encrypted INTO result; + + ASSERT result ? 'i'; + ASSERT result ? 'v'; + END; +$$ LANGUAGE plpgsql; + + DO $$ BEGIN diff --git a/src/operators/->.sql b/src/operators/->.sql index 1286970..dd58e3f 100644 --- a/src/operators/->.sql +++ b/src/operators/->.sql @@ -49,6 +49,7 @@ AS $$ END; $$ LANGUAGE plpgsql; + CREATE OPERATOR ->( FUNCTION=eql_v2."->", LEFTARG=eql_v2_encrypted, diff --git a/src/operators/->>.sql b/src/operators/->>.sql index 6adf0d8..90c41a7 100644 --- a/src/operators/->>.sql +++ b/src/operators/->>.sql @@ -11,8 +11,9 @@ AS $$ DECLARE found eql_v2_encrypted; BEGIN - found = eql_v2."->"(e, selector); - RETURN eql_v2.ciphertext(found); + -- found = eql_v2."->"(e, selector); + -- RETURN eql_v2.ciphertext(found); + RETURN eql_v2."->"(e, selector); END; $$ LANGUAGE plpgsql; diff --git a/src/operators/->>_test.sql b/src/operators/->>_test.sql index df9aa5c..d7b4c88 100644 --- a/src/operators/->>_test.sql +++ b/src/operators/->>_test.sql @@ -34,15 +34,16 @@ $$ LANGUAGE plpgsql; -- -- The ->> operator returns ciphertext matching the selector -DO $$ - BEGIN +-- NOTE: DEPRECATED BEHAVIOUR +-- DO $$ +-- BEGIN - PERFORM assert_result( - 'Selector ->> returns all eql_v2_encrypted', - 'SELECT e->>''bca213de9ccce676fa849ff9c4807963''::text FROM encrypted LIMIT 1;', - 'mBbLGB9xHAGzLvUj-`@Wmf=IhD87n7r3ir3n!Sk6AKir_YawR=0c>pk(OydB;ntIEXK~c>V&4>)rNkf> returns all eql_v2_encrypted', +-- 'SELECT e->>''bca213de9ccce676fa849ff9c4807963''::text FROM encrypted LIMIT 1;', +-- 'mBbLGB9xHAGzLvUj-`@Wmf=IhD87n7r3ir3n!Sk6AKir_YawR=0c>pk(OydB;ntIEXK~c>V&4>)rNkf