diff --git a/08-update_array.sql b/08-update_array.sql new file mode 100644 index 0000000000000000000000000000000000000000..d1f2ffadc294a73b74200dfbe3841fa64ba91533 --- /dev/null +++ b/08-update_array.sql @@ -0,0 +1,14 @@ + +-- This function returns an array adding some elements and removing others +-- It is used to update recursively groupread and groupwrite properties + +CREATE OR REPLACE FUNCTION update_array(input_array VARCHAR[], elements_to_add VARCHAR[], elements_to_remove VARCHAR[]) RETURNS VARCHAR[] AS +$func$ +SELECT array_agg(elements) FROM ( + SELECT DISTINCT UNNEST(input_array) + UNION SELECT DISTINCT UNNEST(elements_to_add) + EXCEPT SELECT DISTINCT UNNEST(elements_to_remove) +) AS output_values(elements) +$func$ LANGUAGE sql; + +SELECT update_array('{"group1","group2"}'::VARCHAR[],'{"group2","group3"}'::VARCHAR[],'{"group1"}'::VARCHAR[]) = '{"group2","group3"}' AS test_passed;