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(DISTINCT 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
|
|