Project

General

Profile

1
-- query performed by IIS to bulk load project details
2
DROP TABLE project_details;
3
CREATE TABLE project_details AS (
4
	SELECT
5
		p.id               AS projectid,
6
		p.acronym          AS acronym,
7
		p.code             AS code,
8
		p.jsonextrainfo    AS jsonextrainfo,
9
		array_agg(fp.path) AS fundingpath
10
	FROM projects p
11
		LEFT OUTER JOIN project_fundingpath pf ON (pf.project = p.id)
12
		LEFT OUTER JOIN fundingpaths fp ON (fp.id = pf.funding)
13
	GROUP BY p.id
14
);
15

    
16
GRANT SELECT ON project_details TO dnetapi;
17

    
18

    
19
-- used to serve queries from api tsv exporter
20
DROP TABLE projects_tsv;
21
CREATE TABLE projects_tsv AS (
22
  SELECT
23
     nextval('projects_tsv_ids') AS rowid,
24
    p.code,
25
    p.acronym,
26
    p.title,
27
    p.call_identifier,
28
    p.startdate,
29
    p.enddate,
30
    p.ec_sc39,
31
    p.oa_mandate_for_publications,
32
    p.ec_article29_3 AS oa_mandate_for_datasets,
33
    p.contactfullname AS contactfullname,
34
    p.contactemail AS contactemail,
35
    org.legalname AS legalname,
36
    org.country AS country,
37
    (array_agg(f.id))[1] AS fundingpathid,
38
    (array_agg(f.description))[1] AS description,
39
    (array_agg(CASE WHEN po.participantnumber = 1
40
      THEN 'coordinator'
41
    ELSE '' END))[1] AS role
42

    
43
  FROM projects p
44
    LEFT OUTER JOIN project_organization po ON (p.id = po.project)
45
    LEFT OUTER JOIN dsm_organizations org ON (po.resporganization = org.id)
46
    LEFT OUTER JOIN project_fundingpath pf ON (p.id = pf.project)
47
    LEFT OUTER JOIN fundingpaths f ON (pf.funding = f.id)
48
  GROUP BY
49
  	p.code,
50
  	p.acronym,
51
    p.title,
52
    p.call_identifier,
53
    p.startdate,
54
    p.enddate,
55
    p.ec_sc39,
56
    p.oa_mandate_for_publications,
57
    p.ec_article29_3,
58
    p.contactfullname,
59
    p.contactemail,
60
    org.legalname,
61
    org.country
62
  ORDER BY p.acronym
63
);
64

    
65
CREATE INDEX projects_tsv_fundingpathid_idx ON projects_tsv (fundingpathid);
66
CREATE INDEX projects_tsv_oa_mandate_for_datasets_idx ON projects_tsv (oa_mandate_for_datasets);
67
GRANT SELECT ON projects_tsv TO dnetapi;
68

    
69
-- used to serve queries from dspace and eprints exporter
70
DROP TABLE projects_api;
71
CREATE TABLE projects_api AS (
72
	SELECT
73
		p.id,
74
		p.acronym          AS acronym,
75
		p.title            AS title,
76
		p.code             AS code,
77
		p.startdate        AS startdate,
78
		p.enddate          AS enddate,
79
		(array_agg(org.legalshortname))[1] AS funder,
80
		(array_agg(fp.jurisdiction))[1]    AS jurisdiction,
81
		(array_agg(fp.id))[1]              AS fundingpathid
82
	FROM projects p
83
		LEFT OUTER JOIN project_fundingpath pfp ON (p.id = pfp.project)
84
		LEFT OUTER JOIN fundingpaths fp ON (pfp.funding = fp.id)
85
		LEFT OUTER JOIN dsm_organizations org ON (org.id = fp.funder)
86
	GROUP BY p.id);
87

    
88
CREATE INDEX projects_api_fundingpathid_idx ON projects_api (fundingpathid);
89
CREATE INDEX projects_api_startdate_idx ON projects_api (startdate);
90
CREATE INDEX projects_api_enddate_idx ON projects_api (enddate);
91
GRANT SELECT ON projects_api TO dnetapi;
92

    
93

    
94
DROP MATERIALIZED VIEW projects_mv;
95
CREATE MATERIALIZED VIEW projects_mv AS (
96
	SELECT
97
		p.id                                                                                                       AS projectid,
98
		p.code                                                                                                     AS code,
99
		p.websiteurl                                                                                               AS websiteurl,
100
		p.acronym                                                                                                  AS acronym,
101
		p.title                                                                                                    AS title,
102
		p.startdate                                                                                                AS startdate,
103
		p.enddate                                                                                                  AS enddate,
104
		p.call_identifier                                                                                          AS callidentifier,
105
		p.keywords                                                                                                 AS keywords,
106
		p.duration                                                                                                 AS duration,
107
		p.ec_sc39                                                                                                  AS ecsc39,
108
		p.oa_mandate_for_publications                                                                              AS oamandatepublications,
109
		p.ec_article29_3                                                                                           AS ecarticle29_3,
110
		p.dateofcollection                                                                                         AS dateofcollection,
111
		p.lastupdate                                                                                               AS dateoftransformation,
112
		p.inferred                                                                                                 AS inferred,
113
		p.deletedbyinference                                                                                       AS deletedbyinference,
114
		p.trust                                                                                                    AS trust,
115
		p.inferenceprovenance                                                                                      AS inferenceprovenance,
116
		p.optional1                                                                                                AS optional1,
117
		p.optional2                                                                                                AS optional2,
118
		p.jsonextrainfo                                                                                            AS jsonextrainfo,
119
		p.contactfullname                                                                                          AS contactfullname,
120
		p.contactfax                                                                                               AS contactfax,
121
		p.contactphone                                                                                             AS contactphone,
122
		p.contactemail                                                                                             AS contactemail,
123
		dc.id                                                                                                      AS collectedfromid,
124
		dc.officialname                                                                                            AS collectedfromname,
125
		p.contracttype || '@@@' || p.contracttypename || '@@@' || p.contracttypescheme || '@@@' || p.contracttypescheme     AS contracttype,
126
		pac.code || '@@@' || pac.name || '@@@' || pas.code || '@@@' || pas.name                                    AS provenanceaction,
127
		array_agg(DISTINCT i.pid || '###' || i.issuertype)                                                         AS pid,
128
		array_agg(DISTINCT s.name || '###' || sc.code || '@@@' || sc.name || '@@@' || ss.code || '@@@' || ss.name) AS subjects,
129
		array_agg(DISTINCT fp.path)                                                                                AS fundingtree
130
	FROM projects p
131
		LEFT OUTER JOIN class pac ON (pac.code = p.provenanceactionclass)
132
		LEFT OUTER JOIN scheme pas ON (pas.code = p.provenanceactionscheme)
133

    
134
		LEFT OUTER JOIN projectpids pp ON (pp.project = p.id)
135
		LEFT OUTER JOIN dsm_identities i ON (i.pid = pp.pid)
136

    
137
		LEFT OUTER JOIN dsm_datasources dc ON (dc.id = p.collectedfrom)
138

    
139
		LEFT OUTER JOIN project_fundingpath pf ON (pf.project = p.id)
140
		LEFT OUTER JOIN fundingpaths fp ON (fp.id = pf.funding)
141

    
142
		LEFT OUTER JOIN project_subject ps ON (ps.project = p.id)
143
		LEFT OUTER JOIN subjects s ON (s.id = ps.subject)
144

    
145
		LEFT OUTER JOIN class sc ON (sc.code = s.semanticclass)
146
		LEFT OUTER JOIN scheme ss ON (ss.code = s.semanticscheme)
147

    
148
	GROUP BY
149
		p.id,
150
		p.code,
151
		p.websiteurl,
152
		p.acronym,
153
		p.title,
154
		p.startdate,
155
		p.enddate,
156
		p.call_identifier,
157
		p.keywords,
158
		p.duration,
159
		p.ec_sc39,
160
		p.oa_mandate_for_publications,
161
		p.ec_article29_3,
162
		p.dateofcollection,
163
		p.inferred,
164
		p.deletedbyinference,
165
		p.trust,
166
		p.inferenceprovenance,
167
		p.contactfullname,
168
		p.contactfax,
169
		p.contactphone,
170
		p.contactemail,
171
		p.contracttype,
172
		dc.id,
173
		dc.officialname,
174
		pac.code, pac.name, pas.code, pas.name
175
);
176
CREATE INDEX projects_mv_id_idx	ON projects_mv (projectid);
177

    
178
GRANT SELECT ON fundingpaths TO dnetapi;
179

    
180

    
(3-3/19)