diff --git a/src/encrypted/functions.sql b/src/encrypted/functions.sql index 02398f8..b42ac61 100644 --- a/src/encrypted/functions.sql +++ b/src/encrypted/functions.sql @@ -85,3 +85,13 @@ AS $$ END; $$ LANGUAGE plpgsql; + +CREATE FUNCTION eql_v2.meta_data(val eql_v2_encrypted) + RETURNS jsonb + IMMUTABLE STRICT PARALLEL SAFE +AS $$ + BEGIN + RETURN eql_v2.meta_data(val.data); + END; +$$ LANGUAGE plpgsql; + diff --git a/src/operators/->.sql b/src/operators/->.sql index 5aac8ec..1286970 100644 --- a/src/operators/->.sql +++ b/src/operators/->.sql @@ -25,14 +25,18 @@ CREATE FUNCTION eql_v2."->"(e eql_v2_encrypted, selector text) IMMUTABLE STRICT PARALLEL SAFE AS $$ DECLARE + meta jsonb; sv eql_v2_encrypted[]; - found eql_v2_encrypted; + found jsonb; BEGIN IF e IS NULL THEN RETURN NULL; END IF; + -- Column identifier and version + meta := eql_v2.meta_data(e); + sv := eql_v2.ste_vec(e); FOR idx IN 1..array_length(sv, 1) LOOP @@ -41,7 +45,7 @@ AS $$ END IF; END LOOP; - RETURN found; + RETURN (meta || found)::eql_v2_encrypted; END; $$ LANGUAGE plpgsql; diff --git a/src/operators/->_test.sql b/src/operators/->_test.sql index a04adec..f741e00 100644 --- a/src/operators/->_test.sql +++ b/src/operators/->_test.sql @@ -99,3 +99,20 @@ DO $$ END; $$ LANGUAGE plpgsql; + +-- +-- Field accessor returns column metadata +-- +DO $$ + DECLARE + result jsonb; + BEGIN + PERFORM seed_encrypted_json(); + + SELECT e->'2517068c0d1f9d4d41d2c666211f785e'::text FROM encrypted LIMIT 1 INTO result; + + ASSERT result ? 'i'; + ASSERT result ? 'v'; + + END; +$$ LANGUAGE plpgsql;