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.optional1        AS optional1,
9
		p.optional2        AS optional2,
10
		p.jsonextrainfo    AS jsonextrainfo,
11
		array_agg(fp.path) AS fundingpath
12
	FROM projects p
13
		LEFT OUTER JOIN project_fundingpath pf ON (pf.project = p.id)
14
		LEFT OUTER JOIN fundingpaths fp ON (fp.id = pf.funding)
15
	GROUP BY p.id
16
);
17

    
18
GRANT SELECT ON project_details TO dnetapi;
19

    
20

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

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

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

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

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

    
95
-- used to serve queries from the repo admin dashboard
96
DROP MATERIALIZED VIEW dashboard_ds;
97
CREATE MATERIALIZED VIEW dashboard_ds AS (
98
	SELECT
99
		ds.id,
100
		ds.officialname,
101
		ds.englishname,
102
		ds.websiteurl,
103
		ds.logourl,
104
		ds.contactemail,
105
		ds.latitude,
106
		ds.longitude,
107
		ds.timezone,
108
		ds.namespaceprefix,
109
		ds.collectedfrom,
110
		ds.dateofvalidation,
111
		ds.registeredby,
112
		ds.datasourceclass,
113
		ds.provenanceactionclass,
114
		ds.dateofcollection,
115
		ds.typology,
116
		ds.activationid,
117
		ds.description,
118
		ds.missionstatementurl,
119
		ds.aggregator,
120
		ds.issn,
121
		ds.eissn,
122
		ds.lissn,
123
		(array_agg(o.legalname)) [1]             AS organization,
124
		(array_agg(ccl.code)) [1]                AS countrycode,
125
		(array_agg(ccl.name)) [1]                AS countryname,
126
		array_agg(DISTINCT ag.accessinfopackage) AS accessinfopackage,
127
		to_char(now(), 'YYYY-MM-DDThh24:mi:ssZ') AS now
128

    
129
	FROM datasources ds
130
		LEFT OUTER JOIN datasource_organization dso ON ds.id = dso.datasource
131
		LEFT OUTER JOIN organizations o ON dso.organization = o.id
132
		LEFT OUTER JOIN class ccl ON ccl.code = o.countryclass
133
		LEFT OUTER JOIN (
134
			                SELECT
135
				                api.datasource,
136
				                api.contentdescriptionclass,
137
				                api.compatibilityclass,
138
				                COALESCE(api.id, '') || '<==1==>' ||
139
				                COALESCE(api.typologyclass, '') || '<==2==>' ||
140
				                COALESCE(api.compatibilityclass, '') || '<==3==>' ||
141
				                COALESCE(api.contentdescriptionclass, '') || '<==4==>' ||
142
				                COALESCE(api.protocolclass, '') || '<==5==>' ||
143
				                COALESCE(api.active, FALSE) || '<==6==>' ||
144
				                COALESCE(api.removable, FALSE) || '<==7==>' ||
145
				                array_to_string(
146
						                array_agg(DISTINCT
147
								                COALESCE(ac.accessparam, TRUE) || '###' ||
148
								                COALESCE(ac.param, '') || '###' ||
149
								                COALESCE(ac.value, '') || '###'), '@@@') AS accessinfopackage
150
			                FROM api
151
				                LEFT OUTER JOIN (
152
					                                SELECT
153
						                                api,
154
						                                param,
155
						                                accessparam,
156
						                                CASE WHEN edited IS NULL
157
							                                THEN original
158
						                                ELSE edited END AS value
159
					                                FROM apicollections
160
				                                ) AS ac ON (ac.api = api.id)
161
			                GROUP BY
162
				                api.id,
163
				                api.datasource,
164
				                api.contentdescriptionclass,
165
				                api.typologyclass,
166
				                api.compatibilityclass,
167
				                api.protocolclass,
168
				                api.active,
169
				                api.removable
170
		                ) AS ag ON (ag.datasource = ds.id)
171
	GROUP BY
172
		ds.id,
173
		ds.officialname,
174
		ds.englishname,
175
		ds.websiteurl,
176
		ds.logourl,
177
		ds.contactemail,
178
		ds.latitude,
179
		ds.longitude,
180
		ds.timezone,
181
		ds.namespaceprefix,
182
		ds.collectedfrom,
183
		ds.dateofvalidation,
184
		ds.registeredby,
185
		ds.datasourceclass,
186
		ds.provenanceactionclass,
187
		ds.dateofcollection,
188
		ds.typology,
189
		ds.activationid,
190
		ds.description,
191
		ds.aggregator,
192
		ds.issn,
193
		ds.eissn,
194
		ds.lissn
195
);
196
CREATE INDEX dashboard_ds_id_idx ON dashboard_ds (id);
197

    
198
DROP MATERIALIZED VIEW projects_mv;
199
CREATE MATERIALIZED VIEW projects_mv AS (
200
	SELECT
201
		p.id                                                                                                       AS projectid,
202
		p.code                                                                                                     AS code,
203
		p.websiteurl                                                                                               AS websiteurl,
204
		p.acronym                                                                                                  AS acronym,
205
		p.title                                                                                                    AS title,
206
		p.startdate                                                                                                AS startdate,
207
		p.enddate                                                                                                  AS enddate,
208
		p.call_identifier                                                                                          AS callidentifier,
209
		p.keywords                                                                                                 AS keywords,
210
		p.duration                                                                                                 AS duration,
211
		p.ec_sc39                                                                                                  AS ecsc39,
212
		p.oa_mandate_for_publications                                                                              AS oamandatepublications,
213
		p.ec_article29_3                                                                                           AS ecarticle29_3,
214
		p.dateofcollection                                                                                         AS dateofcollection,
215
		p.inferred                                                                                                 AS inferred,
216
		p.deletedbyinference                                                                                       AS deletedbyinference,
217
		p.trust                                                                                                    AS trust,
218
		p.inferenceprovenance                                                                                      AS inferenceprovenance,
219
		p.optional1                                                                                                AS optional1,
220
		p.optional2                                                                                                AS optional2,
221
		p.jsonextrainfo                                                                                            AS jsonextrainfo,
222
		p.contactfullname                                                                                          AS contactfullname,
223
		p.contactfax                                                                                               AS contactfax,
224
		p.contactphone                                                                                             AS contactphone,
225
		p.contactemail                                                                                             AS contactemail,
226
		dc.id                                                                                                      AS collectedfromid,
227
		dc.officialname                                                                                            AS collectedfromname,
228
		cc.code || '@@@' || cc.name || '@@@' || cs.code || '@@@' || cs.name                                        AS contracttype,
229
		pac.code || '@@@' || pac.name || '@@@' || pas.code || '@@@' || pas.name                                    AS provenanceaction,
230
		array_agg(DISTINCT i.pid || '###' || i.issuertypeclass)                                                    AS pid,
231
		array_agg(DISTINCT s.name || '###' || sc.code || '@@@' || sc.name || '@@@' || ss.code || '@@@' || ss.name) AS subjects,
232
		array_agg(fp.path)                                                                                         AS fundingtree
233
	FROM projects p
234
		LEFT OUTER JOIN class cc ON (cc.code = p.contracttypeclass)
235
		LEFT OUTER JOIN scheme cs ON (cs.code = p.contracttypescheme)
236

    
237
		LEFT OUTER JOIN class pac ON (pac.code = p.provenanceactionclass)
238
		LEFT OUTER JOIN scheme pas ON (pas.code = p.provenanceactionscheme)
239

    
240
		LEFT OUTER JOIN projectpids pp ON (pp.project = p.id)
241
		LEFT OUTER JOIN identities i ON (i.pid = pp.pid)
242

    
243
		LEFT OUTER JOIN datasources dc ON (dc.id = p.collectedfrom)
244

    
245
		LEFT OUTER JOIN project_fundingpath pf ON (pf.project = p.id)
246
		LEFT OUTER JOIN fundingpaths fp ON (fp.id = pf.funding)
247

    
248
		LEFT OUTER JOIN project_subject ps ON (ps.project = p.id)
249
		LEFT OUTER JOIN subjects s ON (s.id = ps.subject)
250

    
251
		LEFT OUTER JOIN class sc ON (sc.code = s.semanticclass)
252
		LEFT OUTER JOIN scheme ss ON (ss.code = s.semanticscheme)
253

    
254
	GROUP BY
255
		p.id,
256
		p.code,
257
		p.websiteurl,
258
		p.acronym,
259
		p.title,
260
		p.startdate,
261
		p.enddate,
262
		p.call_identifier,
263
		p.keywords,
264
		p.duration,
265
		p.ec_sc39,
266
		p.oa_mandate_for_publications,
267
		p.ec_article29_3,
268
		p.dateofcollection,
269
		p.inferred,
270
		p.deletedbyinference,
271
		p.trust,
272
		p.inferenceprovenance,
273
		p.contactfullname,
274
		p.contactfax,
275
		p.contactphone,
276
		p.contactemail,
277
		dc.id,
278
		dc.officialname,
279
		cc.code, cc.name, cs.code, cs.name,
280
		pac.code, pac.name, pas.code, pas.name
281
);
282
CREATE INDEX projects_mv_id_idx	ON projects_mv (projectid);
283

    
284
GRANT SELECT ON dashboard_ds TO dnetapi;
285
GRANT SELECT ON fundingpaths TO dnetapi;
286

    
287
-- used to query from dsm_organizations UNION organizations when loading data to HBase
288
CREATE OR REPLACE VIEW orgs AS (
289
	SELECT
290
		o.id                                                                    AS organizationid,
291
		o.legalshortname                                                        AS legalshortname,
292
		o.legalname                                                             AS legalname,
293
		o.websiteurl                                                            AS websiteurl,
294
		o.logourl                                                               AS logourl,
295
		o.ec_legalbody                                                          AS eclegalbody,
296
		o.ec_legalperson                                                        AS eclegalperson,
297
		o.ec_nonprofit                                                          AS ecnonprofit,
298
		o.ec_researchorganization                                               AS ecresearchorganization,
299
		o.ec_highereducation                                                    AS echighereducation,
300
		o.ec_internationalorganizationeurinterests                              AS ecinternationalorganizationeurinterests,
301
		o.ec_internationalorganization                                          AS ecinternationalorganization,
302
		o.ec_enterprise                                                         AS ecenterprise,
303
		o.ec_smevalidated                                                       AS ecsmevalidated,
304
		o.ec_nutscode                                                           AS ecnutscode,
305
		o.dateofcollection                                                      AS dateofcollection,
306
		o.inferred                                                              AS inferred,
307
		o.deletedbyinference                                                    AS deletedbyinference,
308
		o.trust                                                                 AS trust,
309
		o.inferenceprovenance                                                   AS inferenceprovenance,
310
		dc.id                                                                   AS collectedfromid,
311
		dc.officialname                                                         AS collectedfromname,
312

    
313
		cc.code || '@@@' || cc.name || '@@@' || cs.code || '@@@' || cs.name     AS country,
314
		pac.code || '@@@' || pac.name || '@@@' || pas.code || '@@@' || pas.name AS provenanceaction,
315

    
316
		array_agg(DISTINCT i.pid || '###' || i.issuertypeclass)                 AS pid
317

    
318
	FROM organizations o
319
		LEFT OUTER JOIN class cc ON (cc.code = o.countryclass)
320
		LEFT OUTER JOIN scheme cs ON (cs.code = o.countryscheme)
321

    
322
		LEFT OUTER JOIN class pac ON (pac.code = o.provenanceactionclass)
323
		LEFT OUTER JOIN scheme pas ON (pas.code = o.provenanceactionscheme)
324

    
325
		LEFT OUTER JOIN organizationpids op ON (op.organization = o.id)
326
		LEFT OUTER JOIN identities i ON (i.pid = op.pid)
327

    
328
		LEFT OUTER JOIN datasources dc ON (dc.id = o.collectedfrom)
329

    
330
	GROUP BY
331
		o.id,
332
		o.legalshortname,
333
		o.legalname,
334
		o.websiteurl,
335
		o.logourl,
336
		o.ec_legalbody,
337
		o.ec_legalperson,
338
		o.ec_nonprofit,
339
		o.ec_researchorganization,
340
		o.ec_highereducation,
341
		o.ec_internationalorganizationeurinterests,
342
		o.ec_internationalorganization,
343
		o.ec_enterprise,
344
		o.ec_smevalidated,
345
		o.ec_nutscode,
346
		o.dateofcollection,
347
		o.inferred,
348
		o.deletedbyinference,
349
		o.trust,
350
		o.inferenceprovenance,
351
		dc.id,
352
		dc.officialname,
353
		cc.code, cc.name, cs.code, cs.name,
354
		pac.code, pac.name, pas.code, pas.name
355
);
356

    
(1-1/14)