LP1573734_Link_to_sibling_metarecord_bibs_in_record_detail_page
[working/Evergreen.git] / Open-ILS / src / sql / Pg / upgrade / XXXX.LP1573734_Link_to_sibling_metarecord_bibs_in_record_detail_page.sql
1
2 BEGIN;
3
4 SELECT evergreen.upgrade_deps_block_check('XXXX', :eg_version);
5
6 CREATE OR REPLACE FUNCTION unapi.mmr_mra (
7     obj_id BIGINT,
8     format TEXT,
9     ename TEXT,
10     includes TEXT[],
11     org TEXT,
12     depth INT DEFAULT NULL,
13     slimit HSTORE DEFAULT NULL,
14     soffset HSTORE DEFAULT NULL,
15     include_xmlns BOOL DEFAULT TRUE,
16     pref_lib INT DEFAULT NULL
17 ) RETURNS XML AS $F$
18     SELECT  XMLELEMENT(
19         name attributes,
20         XMLATTRIBUTES(
21             CASE WHEN $9 THEN 'http://open-ils.org/spec/indexing/v1' ELSE NULL END AS xmlns,
22             'tag:open-ils.org:U2@mmr/' || $1 AS metarecord
23         ),
24         (SELECT XMLAGG(foo.y)
25           FROM (
26             WITH sourcelist AS (
27                 WITH aou AS (SELECT COALESCE(id, (evergreen.org_top()).id) AS id
28                     FROM actor.org_unit WHERE shortname = $5 LIMIT 1)
29                 SELECT source
30                 FROM metabib.metarecord_source_map mmsm, aou
31                 WHERE metarecord = $1 AND (
32                     EXISTS (
33                         SELECT 1 FROM asset.opac_visible_copies
34                         WHERE record = source AND circ_lib IN (
35                             SELECT id FROM actor.org_unit_descendants(aou.id, $6))
36                         LIMIT 1
37                     )
38                     OR EXISTS (SELECT 1 FROM located_uris(source, aou.id, $10) LIMIT 1)
39                     OR EXISTS (SELECT 1 FROM biblio.record_entry b JOIN config.bib_source src ON (b.source = src.id) WHERE src.transcendant AND b.id = mmsm.source LIMIT 1)
40                 )
41             )
42             SELECT  cmra.aid,
43                     XMLELEMENT(
44                         name field,
45                         XMLATTRIBUTES(
46                             cmra.attr AS name,
47                             cmra.value AS "coded-value",
48                             cmra.aid AS "cvmid",
49                             rad.composite,
50                             rad.multi,
51                             rad.filter,
52                             rad.sorter,
53                             cmra.source_list
54                         ),
55                         cmra.value
56                     )
57               FROM  (
58                 SELECT DISTINCT aid, attr, value, STRING_AGG(x.id::TEXT, ',') AS source_list
59                   FROM (
60                     SELECT  v.source AS id,
61                             c.id AS aid,
62                             c.ctype AS attr,
63                             c.code AS value
64                       FROM  metabib.record_attr_vector_list v
65                             JOIN config.coded_value_map c ON ( c.id = ANY( v.vlist ) )
66                     ) AS x
67                     JOIN sourcelist ON (x.id = sourcelist.source)
68                     GROUP BY 1, 2, 3
69                 ) AS cmra
70                 JOIN config.record_attr_definition rad ON (cmra.attr = rad.name)
71                 UNION ALL
72             SELECT  umra.aid,
73                     XMLELEMENT(
74                         name field,
75                         XMLATTRIBUTES(
76                             umra.attr AS name,
77                             rad.composite,
78                             rad.multi,
79                             rad.filter,
80                             rad.sorter
81                         ),
82                         umra.value
83                     )
84               FROM  (
85                 SELECT DISTINCT aid, attr, value
86                   FROM (
87                     SELECT  v.source AS id,
88                             m.id AS aid,
89                             m.attr AS attr,
90                             m.value AS value
91                       FROM  metabib.record_attr_vector_list v
92                             JOIN metabib.uncontrolled_record_attr_value m ON ( m.id = ANY( v.vlist ) )
93                     ) AS x
94                     JOIN sourcelist ON (x.id = sourcelist.source)
95                 ) AS umra
96                 JOIN config.record_attr_definition rad ON (umra.attr = rad.name)
97                 ORDER BY 1
98
99             )foo(id,y)
100         )
101     )
102 $F$ LANGUAGE SQL STABLE;
103   
104 COMMIT;
105