]> git.evergreen-ils.org Git - Evergreen.git/blob - Open-ILS/src/sql/Pg/t/regress/lp1629108_metarecord_constituent_result_reroute.pg
LP1629108 metarecord_constituent_result_reroute
[Evergreen.git] / Open-ILS / src / sql / Pg / t / regress / lp1629108_metarecord_constituent_result_reroute.pg
1 -- Format the output for nice TAP.
2 \pset format unaligned
3 \pset tuples_only true
4 \pset pager
5
6 -- Revert all changes on failure.
7 \set ON_ERROR_ROLLBACK 1
8 \set ON_ERROR_STOP true
9 \set QUIET 1
10
11 -- Load the TAP functions.
12 BEGIN;
13
14 -- Plan the tests.
15 SELECT plan(2);
16
17 -- Replace the function
18 CREATE OR REPLACE FUNCTION unapi.mmr_mra (
19     obj_id BIGINT,
20     format TEXT,
21     ename TEXT,
22     includes TEXT[],
23     org TEXT,
24     depth INT DEFAULT NULL,
25     slimit HSTORE DEFAULT NULL,
26     soffset HSTORE DEFAULT NULL,
27     include_xmlns BOOL DEFAULT TRUE,
28     pref_lib INT DEFAULT NULL
29 ) RETURNS XML AS $F$
30     SELECT  XMLELEMENT(
31         name attributes,
32         XMLATTRIBUTES(
33             CASE WHEN $9 THEN 'http://open-ils.org/spec/indexing/v1' ELSE NULL END AS xmlns,
34             'tag:open-ils.org:U2@mmr/' || $1 AS metarecord
35         ),
36         (SELECT XMLAGG(foo.y)
37           FROM (
38             WITH sourcelist AS (
39                 WITH aou AS (SELECT COALESCE(id, (evergreen.org_top()).id) AS id
40                     FROM actor.org_unit WHERE shortname = $5 LIMIT 1)
41                 SELECT source
42                 FROM metabib.metarecord_source_map, aou
43                 WHERE metarecord = $1 AND (
44                     EXISTS (
45                         SELECT 1 FROM asset.opac_visible_copies
46                         WHERE record = source AND circ_lib IN (
47                             SELECT id FROM actor.org_unit_descendants(aou.id, $6))
48                         LIMIT 1
49                     )
50                     OR EXISTS (SELECT 1 FROM located_uris(source, aou.id, $10) LIMIT 1)
51                 )
52             )
53             SELECT  cmra.aid,
54                     XMLELEMENT(
55                         name field,
56                         XMLATTRIBUTES(
57                             cmra.attr AS name,
58                             cmra.value AS "coded-value",
59                             cmra.aid AS "cvmid",
60                             rad.composite,
61                             rad.multi,
62                             rad.filter,
63                             rad.sorter,
64                             cmra.source_list
65                         ),
66                         cmra.value
67                     )
68               FROM  (
69                 SELECT DISTINCT aid, attr, value, STRING_AGG(x.id::TEXT, ',') AS source_list
70                   FROM (
71                     SELECT  v.source AS id,
72                             c.id AS aid,
73                             c.ctype AS attr,
74                             c.code AS value
75                       FROM  metabib.record_attr_vector_list v
76                             JOIN config.coded_value_map c ON ( c.id = ANY( v.vlist ) )
77                     ) AS x
78                     JOIN sourcelist ON (x.id = sourcelist.source)
79                     GROUP BY 1, 2, 3 
80                 ) AS cmra
81                 JOIN config.record_attr_definition rad ON (cmra.attr = rad.name)
82                 UNION ALL
83             SELECT  umra.aid,
84                     XMLELEMENT(
85                         name field,
86                         XMLATTRIBUTES(
87                             umra.attr AS name,
88                             rad.composite,
89                             rad.multi,
90                             rad.filter,
91                             rad.sorter
92                         ),
93                         umra.value
94                     )
95               FROM  (
96                 SELECT DISTINCT aid, attr, value
97                   FROM (
98                     SELECT  v.source AS id,
99                             m.id AS aid,
100                             m.attr AS attr,
101                             m.value AS value
102                       FROM  metabib.record_attr_vector_list v
103                             JOIN metabib.uncontrolled_record_attr_value m ON ( m.id = ANY( v.vlist ) )
104                     ) AS x
105                     JOIN sourcelist ON (x.id = sourcelist.source)
106                 ) AS umra
107                 JOIN config.record_attr_definition rad ON (umra.attr = rad.name)
108                 ORDER BY 1
109
110             )foo(id,y)
111         )
112     )
113 $F$ LANGUAGE SQL STABLE;
114
115 -- Now make sure that the a query against it doesn't break
116 PREPARE thrower AS select mmr_mra::varchar from unapi.mmr_mra
117 (15,'','',null::text[],'CONS',0,null::HSTORE,null::HSTORE,true,1);
118
119 SELECT performs_ok( 'thrower',250,'Generic check for unapi.mmr_mra breakage' ); 
120
121 -- Make sure that the function returns the new XML property source_list
122 SELECT is(  
123 (
124 select mmr_mra::varchar ~ 'source_list="15,16,17"' from unapi.mmr_mra
125 (15,'','',null::text[],'CONS',0,null::HSTORE,null::HSTORE,true,1)
126 ), true, 'unapi.mmr_mra results have source_list="15,16,17sfaf"' );
127
128
129 -- Finish the tests and clean up.
130 SELECT * FROM finish();
131 ROLLBACK;