Skip to content

Commit 2b7ba74

Browse files
authored
Merge pull request collectionspace#236 from lkvoong/CC-1492
CC-1492: Add new functions for Repatriation and NAGPRA Compliance report
2 parents 0ddd9d5 + ff11650 commit 2b7ba74

3 files changed

Lines changed: 145 additions & 0 deletions

File tree

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
/* utils.aggRepDateField(coid varchar, tname varchar, cname varchar, sepval varchar)
2+
* -- aggregates values of a repeating date field
3+
* -- requires:
4+
* -- coid = collectionobjects_common.id of the parent Collection Object
5+
* -- tname = table name of the repeating group
6+
* -- cname = column name of the date field in structuredDateGroup
7+
* -- sepval = separator/delimiter character
8+
*/
9+
10+
CREATE SCHEMA IF NOT EXISTS utils AUTHORIZATION nuxeo_pahma;
11+
12+
-- DROP FUNCTION utils.aggRepDateField(coid varchar, tname varchar, cname varchar, sep varchar);
13+
14+
CREATE OR REPLACE FUNCTION utils.aggRepDateField(
15+
coid VARCHAR,
16+
tname VARCHAR,
17+
cname VARCHAR,
18+
sepval VARCHAR)
19+
RETURNS VARCHAR
20+
AS $$
21+
DECLARE
22+
ctype VARCHAR;
23+
cstr VARCHAR := cname::text;
24+
aggstr VARCHAR;
25+
BEGIN
26+
27+
EXECUTE 'SELECT STRING_AGG(CASE WHEN s.' || cname || ' IS NULL THEN ''%NULLVALUE%'''
28+
|| ' ELSE s.' || cstr || ' END, ''' || sepval || ''' ORDER BY h.pos)'
29+
|| ' FROM hierarchy h'
30+
|| ' JOIN ' || tname || ' n ON (h.id = n.id)'
31+
|| ' JOIN hierarchy hn on (n.id = hn.parentid AND hn.primarytype = ''structuredDateGroup'')'
32+
|| ' JOIN structureddategroup s ON (hn.id = s.id)'
33+
|| ' WHERE h.parentid = $2'
34+
|| ' GROUP BY h.parentid'
35+
INTO aggstr
36+
USING tname, coid;
37+
38+
RETURN aggstr;
39+
40+
END;
41+
$$
42+
LANGUAGE plpgsql;
43+
44+
GRANT EXECUTE ON FUNCTION utils.aggRepDateField(coid varchar, tname varchar, cname varchar, sepval varchar) to reporters_pahma;
45+
46+
-- SELECT proacl FROM pg_proc WHERE proname = 'aggrepdatefield';
47+
48+
-- SELECT utils.aggRepDateField('2dbcbf18-4966-4178-9880-e81258568921', 'nagprareportfiledgroup', 'datedisplaydate', '|');
49+
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
/* aggRepField(coid varchar, tname varchar, sepval varchar)
2+
* -- aggregates values of a repeating field
3+
* -- requires:
4+
* -- coid = collectionobjects_common.id of the parent Collection Object
5+
* -- tname = table name of the repeating field
6+
* -- sepval = separator/delimiter character
7+
*/
8+
9+
CREATE SCHEMA IF NOT EXISTS utils AUTHORIZATION nuxeo_pahma;
10+
11+
-- DROP FUNCTION utils.aggRepField(coid varchar, tname varchar, sepval varchar);
12+
13+
CREATE OR REPLACE FUNCTION utils.aggRepField(
14+
coid VARCHAR,
15+
tname VARCHAR,
16+
sepval VARCHAR)
17+
RETURNS VARCHAR
18+
AS $$
19+
DECLARE
20+
aggstr VARCHAr;
21+
BEGIN
22+
EXECUTE 'SELECT STRING_AGG(CASE WHEN item IS NULL THEN ''%NULLVALUE%'''
23+
|| ' ELSE regexp_replace(item, E''[\\n\\r]+'', ''\n'', ''g'') END, ''' || sepval || ''' ORDER BY pos)'
24+
|| ' FROM ' || tname
25+
|| ' WHERE id = $1'
26+
|| ' GROUP BY id'
27+
INTO aggstr
28+
USING coid;
29+
30+
RETURN aggstr;
31+
END;
32+
$$
33+
LANGUAGE plpgsql;
34+
35+
GRANT EXECUTE ON FUNCTION utils.aggRepField(coid varchar, tname varchar, sepval varchar) to reporters_pahma;
36+
37+
-- SELECT proacl FROM pg_proc WHERE proname = 'aggrepfield';
38+
39+
-- SELECT aggRepField('2dbcbf18-4966-4178-9880-e81258568921', 'collectionobjects_nagpra_nagpracategories', '|');
40+
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
/* utils.aggRepGroupField(coid varchar, tname varchar, cname varchar, sepval varchar)
2+
* -- aggregates values of a repeating group of fields
3+
* -- requires:
4+
* -- coid = collectionobjects_common.id of the parent Collection Object
5+
* -- tname = table name of the repeating group
6+
* -- cname = column name of the repeating group field
7+
* -- sepval = separator/delimiter character
8+
*/
9+
10+
CREATE SCHEMA IF NOT EXISTS utils AUTHORIZATION nuxeo_pahma;
11+
12+
-- DROP FUNCTION utils.aggRepGroupField(coid varchar, tname varchar, cname varchar, sepval varchar);
13+
14+
CREATE OR REPLACE FUNCTION utils.aggRepGroupField(
15+
coid VARCHAR,
16+
tname VARCHAR,
17+
cname VARCHAR,
18+
sepval VARCHAR)
19+
RETURNS VARCHAR
20+
AS $$
21+
DECLARE
22+
ctype VARCHAR;
23+
cstr VARCHAR;
24+
aggstr VARCHAR;
25+
BEGIN
26+
SELECT data_type INTO ctype FROM information_schema.columns WHERE table_name = tname AND column_name = cname;
27+
28+
IF ctype IN ('text', 'character varying') THEN
29+
cstr := cname;
30+
ELSE
31+
cstr := cname || '::text';
32+
END IF;
33+
34+
EXECUTE 'SELECT STRING_AGG(CASE WHEN n.' || cname || ' IS NULL THEN ''%NULLVALUE%'''
35+
|| ' ELSE regexp_replace(n.' || cstr || ', E''[\\n\\r]+'', ''\n'', ''g'') END, ''' || sepval || ''' ORDER BY h.pos)'
36+
|| ' FROM hierarchy h'
37+
|| ' JOIN ' || tname || ' n ON (h.id = n.id AND lower(h.primarytype) = $1)'
38+
|| ' WHERE h.parentid = $2'
39+
|| ' GROUP BY h.parentid'
40+
INTO aggstr
41+
USING tname, coid;
42+
43+
RETURN aggstr;
44+
45+
END;
46+
$$
47+
LANGUAGE plpgsql;
48+
49+
GRANT EXECUTE ON FUNCTION utils.aggRepGroupField(coid varchar, tname varchar, cname varchar, sepval varchar) to reporters_pahma;
50+
51+
-- SELECT proacl FROM pg_proc WHERE proname = 'aggrepgroupfield';
52+
53+
-- SELECT utils.aggRepGroupField('2dbcbf18-4966-4178-9880-e81258568921', 'referencegroup', 'reference', '|');
54+
55+
-- SELECT utils.aggRepGroupField('2dbcbf18-4966-4178-9880-e81258568921', 'nagprareportfiledgroup', 'nagprareportfiled', '|');
56+

0 commit comments

Comments
 (0)