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