]> git.evergreen-ils.org Git - working/Evergreen.git/blob - Open-ILS/src/sql/Pg/002.functions.config.sql
moving xml2 requirement out of the way
[working/Evergreen.git] / Open-ILS / src / sql / Pg / 002.functions.config.sql
1 BEGIN;
2
3 CREATE OR REPLACE FUNCTION oils_xml_transform ( TEXT, TEXT ) RETURNS TEXT AS $_$
4         SELECT  CASE    WHEN (SELECT COUNT(*) FROM config.xml_transform WHERE name = $2 AND xslt = '---') > 0 THEN $1
5                         ELSE xslt_process($1, (SELECT xslt FROM config.xml_transform WHERE name = $2))
6                 END;
7 $_$ LANGUAGE SQL STRICT IMMUTABLE;
8
9
10
11 CREATE TYPE biblio_field_vtype AS ( record BIGINT, field INT, content TEXT );
12 CREATE OR REPLACE FUNCTION biblio_field_table ( record BIGINT, field_list INT[] ) RETURNS SETOF biblio_field_vtype AS $_$
13 DECLARE
14         i INT;
15         rec biblio_field_vtype%ROWTYPE;
16 BEGIN
17         FOR i IN ARRAY_LOWER(field_list,1) .. ARRAY_UPPER(field_list,1) LOOP
18                 FOR rec IN      SELECT  DISTINCT r, field_list[i], BTRIM(REGEXP_REPLACE(REGEXP_REPLACE(f, E'\n', ' ', 'g'), '[ ]+', ' ', 'g'))
19                                   FROM  xpath_table_ns(
20                                                 'id',
21                                                 $$oils_xml_transform(marc,'$$ || (SELECT format FROM config.metabib_field WHERE id = field_list[i]) || $$')$$,
22                                                 'biblio.record_entry',
23                                                 (SELECT xpath FROM config.metabib_field WHERE id = field_list[i]),
24                                                 'id = ' || record,
25                                                 (SELECT x.prefix FROM config.xml_transform x JOIN config.metabib_field m ON (m.format = x.name) WHERE m.id = field_list[i]),
26                                                 (SELECT x.namespace_uri FROM config.xml_transform x JOIN config.metabib_field m ON (m.format = x.name) WHERE m.id = field_list[i])
27                                         ) AS t( r bigint, f text)
28                                   WHERE f IS NOT NULL LOOP
29                         RETURN NEXT rec;
30                 END LOOP;
31         END LOOP;
32 END;
33 $_$ LANGUAGE PLPGSQL;
34
35
36
37 CREATE OR REPLACE FUNCTION biblio_field_table ( record BIGINT, field INT ) RETURNS SETOF biblio_field_vtype AS $_$
38         SELECT * FROM biblio_field_table( $1, ARRAY[$2] )
39 $_$ LANGUAGE SQL;
40
41 COMMIT;
42