Project

General

Profile

« Previous | Next » 

Revision 48139

integrated (hopefully) all required changes from dnet40

View differences:

materialised_views.sql
1

  
2 1
-- query performed by IIS to bulk load project details
3 2
DROP MATERIALIZED VIEW project_details;
4 3
CREATE MATERIALIZED VIEW project_details AS (
5
		SELECT  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
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 16
);
17 17

  
18 18
-- used to serve queries from api tsv exporter
19 19
DROP MATERIALIZED VIEW projects_tsv;
20 20
CREATE MATERIALIZED VIEW projects_tsv AS (
21
		SELECT
22
			pr.code,
23
			pr.acronym,
24
			pr.title,
25
			pr.call_identifier,
26
			pr.startdate,
27
			pr.enddate,
28
			pr.ec_sc39,
29
			pr.oa_mandate_for_publications,
30
			pr.ec_article29_3,
31
			f.id AS fundingpathid,
32
			f.description,
33
			org.legalname,
34
			org.countryclass,
35
			CASE WHEN po.participantnumber = 1 THEN 'coordinator' ELSE '' END AS role,
36
			pe.firstname,
37
			pe.secondnames,
38
			pe.email
39
		FROM projects pr
40
			LEFT OUTER JOIN project_organization po ON (pr.id = po.project)
41
			LEFT OUTER JOIN persons pe ON (po.contactperson=pe.id)
42
			LEFT OUTER JOIN organizations org ON (po.resporganization = org.id)
43
			LEFT OUTER JOIN project_fundingpath pf ON (pr.id = pf.project)
44
			LEFT OUTER JOIN fundingpaths f ON (pf.funding = f.id)
45
		ORDER BY pr.acronym);
46
CREATE INDEX projects_tsv_fundingpathid_idx ON projects_tsv (fundingpathid);
47
CREATE INDEX projects_tsv_ec_article29_3_idx ON projects_tsv (ec_article29_3);
21
	SELECT
22
		pr.code,
23
		pr.acronym,
24
		pr.title,
25
		pr.call_identifier,
26
		pr.startdate,
27
		pr.enddate,
28
		pr.ec_sc39,
29
		pr.oa_mandate_for_publications,
30
		pr.ec_article29_3,
31
		f.id        AS fundingpathid,
32
		f.description,
33
		org.legalname,
34
		org.countryclass,
35
		CASE WHEN po.participantnumber = 1
36
			THEN 'coordinator'
37
		ELSE '' END AS role,
38
		pe.firstname,
39
		pe.secondnames,
40
		pe.email
41
	FROM projects pr
42
		LEFT OUTER JOIN project_organization po ON (pr.id = po.project)
43
		LEFT OUTER JOIN persons pe ON (po.contactperson = pe.id)
44
		LEFT OUTER JOIN organizations org ON (po.resporganization = org.id)
45
		LEFT OUTER JOIN project_fundingpath pf ON (pr.id = pf.project)
46
		LEFT OUTER JOIN fundingpaths f ON (pf.funding = f.id)
47
	ORDER BY pr.acronym);
48
CREATE INDEX projects_tsv_fundingpathid_idx
49
	ON projects_tsv (fundingpathid);
50
CREATE INDEX projects_tsv_ec_article29_3_idx
51
	ON projects_tsv (ec_article29_3);
48 52

  
49 53
-- used to serve queries from dspace and eprints exporter
50 54
DROP MATERIALIZED VIEW projects_api;
51 55
CREATE MATERIALIZED VIEW projects_api AS (
52
		SELECT
53
			org.legalshortname  AS funder,
54
			fp.jurisdiction     AS jurisdiction,
55
			p.acronym           AS acronym,
56
			p.title             AS title,
57
			p.code              AS code,
58
			p.startdate         AS startdate,
59
			p.enddate           AS enddate,
60
			fp.id               AS fundingpathid
61
		FROM projects p
62
			LEFT OUTER JOIN project_fundingpath pfp  ON (p.id = pfp.project)
63
			LEFT OUTER JOIN fundingpaths fp ON (pfp.funding = fp.id)
64
			LEFT OUTER JOIN organizations org ON (org.id = fp.funder));
65
CREATE INDEX projects_api_fundingpathid_idx ON projects_api (fundingpathid);
66
CREATE INDEX projects_api_startdate_idx ON projects_api (startdate);
67
CREATE INDEX projects_api_enddate_idx ON projects_api (enddate);
56
	SELECT
57
		org.legalshortname AS funder,
58
		fp.jurisdiction    AS jurisdiction,
59
		p.acronym          AS acronym,
60
		p.title            AS title,
61
		p.code             AS code,
62
		p.startdate        AS startdate,
63
		p.enddate          AS enddate,
64
		fp.id              AS fundingpathid
65
	FROM projects p
66
		LEFT OUTER JOIN project_fundingpath pfp ON (p.id = pfp.project)
67
		LEFT OUTER JOIN fundingpaths fp ON (pfp.funding = fp.id)
68
		LEFT OUTER JOIN organizations org ON (org.id = fp.funder));
69
CREATE INDEX projects_api_fundingpathid_idx
70
	ON projects_api (fundingpathid);
71
CREATE INDEX projects_api_startdate_idx
72
	ON projects_api (startdate);
73
CREATE INDEX projects_api_enddate_idx
74
	ON projects_api (enddate);
68 75

  
69 76
-- used to serve queries from the repo admin dashboard
70 77
DROP MATERIALIZED VIEW dashboard_ds;
......
94 101
		ds.issn,
95 102
		ds.eissn,
96 103
		ds.lissn,
97
		(array_agg(o.legalname))[1] as organization,
98
		(array_agg(ccl.code))[1] as countrycode,
99
		(array_agg(ccl.name))[1] as countryname,
100
		array_agg(distinct ag.accessinfopackage) as accessinfopackage,
104
		(array_agg(o.legalname)) [1]             AS organization,
105
		(array_agg(ccl.code)) [1]                AS countrycode,
106
		(array_agg(ccl.name)) [1]                AS countryname,
107
		array_agg(DISTINCT ag.accessinfopackage) AS accessinfopackage,
101 108
		to_char(now(), 'YYYY-MM-DDThh24:mi:ssZ') AS now
102 109

  
103 110
	FROM datasources ds
......
105 112
		LEFT OUTER JOIN organizations o ON dso.organization = o.id
106 113
		LEFT OUTER JOIN class ccl ON ccl.code = o.countryclass
107 114
		LEFT OUTER JOIN (
108
        SELECT
109
	        api.datasource,
110
	        api.contentdescriptionclass,
111
	        api.compatibilityclass,
112
          COALESCE(api.id, '')||'<==1==>'||
113
          COALESCE(api.typologyclass, '')||'<==2==>'||
114
          COALESCE(api.compatibilityclass, '')||'<==3==>'||
115
          COALESCE(api.contentdescriptionclass,'')||'<==4==>'||
116
          COALESCE(api.protocolclass,'')||'<==5==>'||
117
          COALESCE(api.active,false)||'<==6==>'||
118
          COALESCE(api.removable,false)||'<==7==>'||
119
          array_to_string(
120
		          array_agg(distinct
121
		                    COALESCE(ac.accessparam, true)||'###'||
122
		                    COALESCE(ac.param,'')||'###'||
123
		                    COALESCE(ac.value,'')||'###'), '@@@') AS accessinfopackage
124
        FROM api
125
          LEFT OUTER JOIN (
126
                SELECT
127
	                api,
128
	                param,
129
	                accessparam,
130
	                CASE WHEN edited IS NULL THEN original ELSE edited END as value FROM apicollections
131
              ) AS ac ON (ac.api = api.id)
132
        GROUP BY
133
          api.id,
134
          api.datasource,
135
          api.contentdescriptionclass,
136
          api.typologyclass,
137
          api.compatibilityclass,
138
          api.protocolclass,
139
          api.active,
140
          api.removable
141
      ) AS ag on (ag.datasource = ds.id)
142
GROUP BY
143
	ds.id,
144
	ds.officialname,
145
	ds.englishname,
146
	ds.websiteurl,
147
	ds.logourl,
148
	ds.contactemail,
149
	ds.latitude,
150
	ds.longitude,
151
	ds.timezone,
152
	ds.namespaceprefix,
153
	ds.collectedfrom,
154
	ds.dateofvalidation,
155
	ds.registeredby,
156
	ds.datasourceclass,
157
	ds.provenanceactionclass,
158
	ds.dateofcollection,
159
	ds.typology,
160
	ds.activationid,
161
	ds.description,
162
	ds.aggregator,
163
	ds.issn,
164
	ds.eissn,
165
	ds.lissn
115
			                SELECT
116
				                api.datasource,
117
				                api.contentdescriptionclass,
118
				                api.compatibilityclass,
119
				                COALESCE(api.id, '') || '<==1==>' ||
120
				                COALESCE(api.typologyclass, '') || '<==2==>' ||
121
				                COALESCE(api.compatibilityclass, '') || '<==3==>' ||
122
				                COALESCE(api.contentdescriptionclass, '') || '<==4==>' ||
123
				                COALESCE(api.protocolclass, '') || '<==5==>' ||
124
				                COALESCE(api.active, FALSE) || '<==6==>' ||
125
				                COALESCE(api.removable, FALSE) || '<==7==>' ||
126
				                array_to_string(
127
						                array_agg(DISTINCT
128
								                COALESCE(ac.accessparam, TRUE) || '###' ||
129
								                COALESCE(ac.param, '') || '###' ||
130
								                COALESCE(ac.value, '') || '###'), '@@@') AS accessinfopackage
131
			                FROM api
132
				                LEFT OUTER JOIN (
133
					                                SELECT
134
						                                api,
135
						                                param,
136
						                                accessparam,
137
						                                CASE WHEN edited IS NULL
138
							                                THEN original
139
						                                ELSE edited END AS value
140
					                                FROM apicollections
141
				                                ) AS ac ON (ac.api = api.id)
142
			                GROUP BY
143
				                api.id,
144
				                api.datasource,
145
				                api.contentdescriptionclass,
146
				                api.typologyclass,
147
				                api.compatibilityclass,
148
				                api.protocolclass,
149
				                api.active,
150
				                api.removable
151
		                ) AS ag ON (ag.datasource = ds.id)
152
	GROUP BY
153
		ds.id,
154
		ds.officialname,
155
		ds.englishname,
156
		ds.websiteurl,
157
		ds.logourl,
158
		ds.contactemail,
159
		ds.latitude,
160
		ds.longitude,
161
		ds.timezone,
162
		ds.namespaceprefix,
163
		ds.collectedfrom,
164
		ds.dateofvalidation,
165
		ds.registeredby,
166
		ds.datasourceclass,
167
		ds.provenanceactionclass,
168
		ds.dateofcollection,
169
		ds.typology,
170
		ds.activationid,
171
		ds.description,
172
		ds.aggregator,
173
		ds.issn,
174
		ds.eissn,
175
		ds.lissn
166 176
);
167
CREATE INDEX dashboard_ds_id_idx ON dashboard_ds (id);
177
CREATE INDEX dashboard_ds_id_idx
178
	ON dashboard_ds (id);
168 179

  
180
DROP MATERIALIZED VIEW projects_mv;
181
CREATE MATERIALIZED VIEW projects_mv AS (
182
	SELECT
183
		p.id                                                                                                       AS projectid,
184
		p.code                                                                                                     AS code,
185
		p.websiteurl                                                                                               AS websiteurl,
186
		p.acronym                                                                                                  AS acronym,
187
		p.title                                                                                                    AS title,
188
		p.startdate                                                                                                AS startdate,
189
		p.enddate                                                                                                  AS enddate,
190
		p.call_identifier                                                                                          AS callidentifier,
191
		p.keywords                                                                                                 AS keywords,
192
		p.duration                                                                                                 AS duration,
193
		p.ec_sc39                                                                                                  AS ecsc39,
194
		p.oa_mandate_for_publications                                                                              AS oamandatepublications,
195
		p.ec_article29_3                                                                                           AS ecarticle29_3,
196
		p.dateofcollection                                                                                         AS dateofcollection,
197
		p.inferred                                                                                                 AS inferred,
198
		p.deletedbyinference                                                                                       AS deletedbyinference,
199
		p.trust                                                                                                    AS trust,
200
		p.inferenceprovenance                                                                                      AS inferenceprovenance,
201
		p.optional1                                                                                                AS optional1,
202
		p.optional2                                                                                                AS optional2,
203
		p.jsonextrainfo                                                                                            AS jsonextrainfo,
204
		dc.id                                                                                                      AS collectedfromid,
205
		dc.officialname                                                                                            AS collectedfromname,
206

  
207
		cc.code || '@@@' || cc.name || '@@@' || cs.code || '@@@' || cs.name                                        AS contracttype,
208
		pac.code || '@@@' || pac.name || '@@@' || pas.code || '@@@' || pas.name                                    AS provenanceaction,
209

  
210
		array_agg(DISTINCT i.pid || '###' || i.issuertypeclass)                                                    AS pid,
211
		array_agg(DISTINCT s.name || '###' || sc.code || '@@@' || sc.name || '@@@' || ss.code || '@@@' || ss.name) AS subjects,
212

  
213
		array_agg(fp.path)                                                                                         AS fundingtree
214

  
215
	FROM projects p
216
		LEFT OUTER JOIN class cc ON (cc.code = p.contracttypeclass)
217
		LEFT OUTER JOIN scheme cs ON (cs.code = p.contracttypescheme)
218

  
219
		LEFT OUTER JOIN class pac ON (pac.code = p.provenanceactionclass)
220
		LEFT OUTER JOIN scheme pas ON (pas.code = p.provenanceactionscheme)
221

  
222
		LEFT OUTER JOIN projectpids pp ON (pp.project = p.id)
223
		LEFT OUTER JOIN identities i ON (i.pid = pp.pid)
224

  
225
		LEFT OUTER JOIN datasources dc ON (dc.id = p.collectedfrom)
226

  
227
		LEFT OUTER JOIN project_fundingpath pf ON (pf.project = p.id)
228
		LEFT OUTER JOIN fundingpaths fp ON (fp.id = pf.funding)
229

  
230
		LEFT OUTER JOIN project_subject ps ON (ps.project = p.id)
231
		LEFT OUTER JOIN subjects s ON (s.id = ps.subject)
232

  
233
		LEFT OUTER JOIN class sc ON (sc.code = s.semanticclass)
234
		LEFT OUTER JOIN scheme ss ON (ss.code = s.semanticscheme)
235

  
236
	GROUP BY
237
		p.id,
238
		p.code,
239
		p.websiteurl,
240
		p.acronym,
241
		p.title,
242
		p.startdate,
243
		p.enddate,
244
		p.call_identifier,
245
		p.keywords,
246
		p.duration,
247
		p.ec_sc39,
248
		p.oa_mandate_for_publications,
249
		p.ec_article29_3,
250
		p.dateofcollection,
251
		p.inferred,
252
		p.deletedbyinference,
253
		p.trust,
254
		p.inferenceprovenance,
255
		dc.id,
256
		dc.officialname,
257
		cc.code, cc.name, cs.code, cs.name,
258
		pac.code, pac.name, pas.code, pas.name
259
);
260
CREATE INDEX projects_mv_id_idx
261
	ON projects_mv (projectid);
262

  
169 263
GRANT SELECT ON projects_api TO dnetapi;
170 264
GRANT SELECT ON projects_tsv TO dnetapi;
171 265
GRANT SELECT ON project_details TO dnetapi;

Also available in: Unified diff