3 SELECT evergreen.upgrade_deps_block_check('1110', :eg_version);
5 DROP FUNCTION IF EXISTS unapi.biblio_record_entry_feed (BIGINT[], TEXT, TEXT[], TEXT, INT, HSTORE, HSTORE,
6 BOOL, TEXT, TEXT, TEXT, TEXT, TEXT, XML);
7 DROP FUNCTION IF EXISTS unapi.metabib_virtual_record_feed (BIGINT[], TEXT, TEXT[], TEXT, INT, HSTORE, HSTORE,
8 BOOL, TEXT, TEXT, TEXT, TEXT, TEXT, XML);
10 CREATE OR REPLACE FUNCTION unapi.biblio_record_entry_feed ( id_list BIGINT[], format TEXT, includes TEXT[], org TEXT, depth INT DEFAULT NULL, slimit HSTORE DEFAULT NULL, soffset HSTORE DEFAULT NULL, include_xmlns BOOL DEFAULT TRUE, title TEXT DEFAULT NULL, description TEXT DEFAULT NULL, creator TEXT DEFAULT NULL, update_ts TEXT DEFAULT NULL, unapi_url TEXT DEFAULT NULL, header_xml XML DEFAULT NULL, pref_lib INT DEFAULT NULL ) RETURNS XML AS $F$
12 layout unapi.bre_output_layout%ROWTYPE;
13 transform config.xml_transform%ROWTYPE;
16 xmlns_uri TEXT := 'http://open-ils.org/spec/feed-xml/v1';
21 IF org = '-' OR org IS NULL THEN
22 SELECT shortname INTO org FROM evergreen.org_top();
25 SELECT id INTO ouid FROM actor.org_unit WHERE shortname = org;
26 SELECT * INTO layout FROM unapi.bre_output_layout WHERE name = format;
28 IF layout.name IS NULL THEN
32 SELECT * INTO transform FROM config.xml_transform WHERE name = layout.transform;
33 xmlns_uri := COALESCE(transform.namespace_uri,xmlns_uri);
36 SELECT XMLAGG( unapi.bre(i, format, '', includes, org, depth, slimit, soffset, include_xmlns, pref_lib)) INTO tmp_xml FROM UNNEST( id_list ) i;
38 IF layout.title_element IS NOT NULL THEN
39 EXECUTE 'SELECT XMLCONCAT( XMLELEMENT( name '|| layout.title_element ||', XMLATTRIBUTES( $1 AS xmlns), $3), $2)' INTO tmp_xml USING xmlns_uri, tmp_xml::XML, title;
42 IF layout.description_element IS NOT NULL THEN
43 EXECUTE 'SELECT XMLCONCAT( XMLELEMENT( name '|| layout.description_element ||', XMLATTRIBUTES( $1 AS xmlns), $3), $2)' INTO tmp_xml USING xmlns_uri, tmp_xml::XML, description;
46 IF layout.creator_element IS NOT NULL THEN
47 EXECUTE 'SELECT XMLCONCAT( XMLELEMENT( name '|| layout.creator_element ||', XMLATTRIBUTES( $1 AS xmlns), $3), $2)' INTO tmp_xml USING xmlns_uri, tmp_xml::XML, creator;
50 IF layout.update_ts_element IS NOT NULL THEN
51 EXECUTE 'SELECT XMLCONCAT( XMLELEMENT( name '|| layout.update_ts_element ||', XMLATTRIBUTES( $1 AS xmlns), $3), $2)' INTO tmp_xml USING xmlns_uri, tmp_xml::XML, update_ts;
54 IF unapi_url IS NOT NULL THEN
55 EXECUTE $$SELECT XMLCONCAT( XMLELEMENT( name link, XMLATTRIBUTES( 'http://www.w3.org/1999/xhtml' AS xmlns, 'unapi-server' AS rel, $1 AS href, 'unapi' AS title)), $2)$$ INTO tmp_xml USING unapi_url, tmp_xml::XML;
58 IF header_xml IS NOT NULL THEN tmp_xml := XMLCONCAT(header_xml,tmp_xml::XML); END IF;
60 element_list := regexp_split_to_array(layout.feed_top,E'\\.');
61 FOR i IN REVERSE ARRAY_UPPER(element_list, 1) .. 1 LOOP
62 EXECUTE 'SELECT XMLELEMENT( name '|| quote_ident(element_list[i]) ||', XMLATTRIBUTES( $1 AS xmlns), $2)' INTO tmp_xml USING xmlns_uri, tmp_xml::XML;
67 $F$ LANGUAGE PLPGSQL STABLE;
69 CREATE OR REPLACE FUNCTION unapi.metabib_virtual_record_feed ( id_list BIGINT[], format TEXT, includes TEXT[], org TEXT, depth INT DEFAULT NULL, slimit HSTORE DEFAULT NULL, soffset HSTORE DEFAULT NULL, include_xmlns BOOL DEFAULT TRUE, title TEXT DEFAULT NULL, description TEXT DEFAULT NULL, creator TEXT DEFAULT NULL, update_ts TEXT DEFAULT NULL, unapi_url TEXT DEFAULT NULL, header_xml XML DEFAULT NULL, pref_lib INT DEFAULT NULL ) RETURNS XML AS $F$
71 layout unapi.bre_output_layout%ROWTYPE;
72 transform config.xml_transform%ROWTYPE;
75 xmlns_uri TEXT := 'http://open-ils.org/spec/feed-xml/v1';
80 IF org = '-' OR org IS NULL THEN
81 SELECT shortname INTO org FROM evergreen.org_top();
84 SELECT id INTO ouid FROM actor.org_unit WHERE shortname = org;
85 SELECT * INTO layout FROM unapi.bre_output_layout WHERE name = format;
87 IF layout.name IS NULL THEN
91 SELECT * INTO transform FROM config.xml_transform WHERE name = layout.transform;
92 xmlns_uri := COALESCE(transform.namespace_uri,xmlns_uri);
95 SELECT XMLAGG( unapi.mmr(i, format, '', includes, org, depth, slimit, soffset, include_xmlns, pref_lib)) INTO tmp_xml FROM UNNEST( id_list ) i;
97 IF layout.title_element IS NOT NULL THEN
98 EXECUTE 'SELECT XMLCONCAT( XMLELEMENT( name '|| layout.title_element ||', XMLATTRIBUTES( $1 AS xmlns), $3), $2)' INTO tmp_xml USING xmlns_uri, tmp_xml::XML, title;
101 IF layout.description_element IS NOT NULL THEN
102 EXECUTE 'SELECT XMLCONCAT( XMLELEMENT( name '|| layout.description_element ||', XMLATTRIBUTES( $1 AS xmlns), $3), $2)' INTO tmp_xml USING xmlns_uri, tmp_xml::XML, description;
105 IF layout.creator_element IS NOT NULL THEN
106 EXECUTE 'SELECT XMLCONCAT( XMLELEMENT( name '|| layout.creator_element ||', XMLATTRIBUTES( $1 AS xmlns), $3), $2)' INTO tmp_xml USING xmlns_uri, tmp_xml::XML, creator;
109 IF layout.update_ts_element IS NOT NULL THEN
110 EXECUTE 'SELECT XMLCONCAT( XMLELEMENT( name '|| layout.update_ts_element ||', XMLATTRIBUTES( $1 AS xmlns), $3), $2)' INTO tmp_xml USING xmlns_uri, tmp_xml::XML, update_ts;
113 IF unapi_url IS NOT NULL THEN
114 EXECUTE $$SELECT XMLCONCAT( XMLELEMENT( name link, XMLATTRIBUTES( 'http://www.w3.org/1999/xhtml' AS xmlns, 'unapi-server' AS rel, $1 AS href, 'unapi' AS title)), $2)$$ INTO tmp_xml USING unapi_url, tmp_xml::XML;
117 IF header_xml IS NOT NULL THEN tmp_xml := XMLCONCAT(header_xml,tmp_xml::XML); END IF;
119 element_list := regexp_split_to_array(layout.feed_top,E'\\.');
120 FOR i IN REVERSE ARRAY_UPPER(element_list, 1) .. 1 LOOP
121 EXECUTE 'SELECT XMLELEMENT( name '|| quote_ident(element_list[i]) ||', XMLATTRIBUTES( $1 AS xmlns), $2)' INTO tmp_xml USING xmlns_uri, tmp_xml::XML;
126 $F$ LANGUAGE PLPGSQL STABLE;