From e7c16d55d456ab3856a9102cf96def06e39347cf Mon Sep 17 00:00:00 2001 From: Sonia Zorba <sonia.zorba@inaf.it> Date: Tue, 13 Apr 2021 11:25:19 +0200 Subject: [PATCH] Added function for merging arrays for task #3892 --- 08-update_array.sql | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 08-update_array.sql diff --git a/08-update_array.sql b/08-update_array.sql new file mode 100644 index 0000000..d1f2ffa --- /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; -- GitLab