From 413ed741b1471231bf80dc5ccdbb0f43bcd90b02 Mon Sep 17 00:00:00 2001 From: miker Date: Thu, 8 Mar 2007 19:34:31 +0000 Subject: [PATCH] moving xml2 requirement out of the way git-svn-id: svn://svn.open-ils.org/ILS/trunk@7045 dcc99617-32d9-48b4-a31d-7c20da2025e4 --- Open-ILS/src/sql/Pg/002.functions.config.sql | 42 ++++++++++++++++++++++++++++ Open-ILS/src/sql/Pg/002.schema.config.sql | 42 ---------------------------- 2 files changed, 42 insertions(+), 42 deletions(-) create mode 100644 Open-ILS/src/sql/Pg/002.functions.config.sql diff --git a/Open-ILS/src/sql/Pg/002.functions.config.sql b/Open-ILS/src/sql/Pg/002.functions.config.sql new file mode 100644 index 0000000000..b5d326c4b9 --- /dev/null +++ b/Open-ILS/src/sql/Pg/002.functions.config.sql @@ -0,0 +1,42 @@ +BEGIN; + +CREATE OR REPLACE FUNCTION oils_xml_transform ( TEXT, TEXT ) RETURNS TEXT AS $_$ + SELECT CASE WHEN (SELECT COUNT(*) FROM config.xml_transform WHERE name = $2 AND xslt = '---') > 0 THEN $1 + ELSE xslt_process($1, (SELECT xslt FROM config.xml_transform WHERE name = $2)) + END; +$_$ LANGUAGE SQL STRICT IMMUTABLE; + + + +CREATE TYPE biblio_field_vtype AS ( record BIGINT, field INT, content TEXT ); +CREATE OR REPLACE FUNCTION biblio_field_table ( record BIGINT, field_list INT[] ) RETURNS SETOF biblio_field_vtype AS $_$ +DECLARE + i INT; + rec biblio_field_vtype%ROWTYPE; +BEGIN + FOR i IN ARRAY_LOWER(field_list,1) .. ARRAY_UPPER(field_list,1) LOOP + FOR rec IN SELECT DISTINCT r, field_list[i], BTRIM(REGEXP_REPLACE(REGEXP_REPLACE(f, E'\n', ' ', 'g'), '[ ]+', ' ', 'g')) + FROM xpath_table_ns( + 'id', + $$oils_xml_transform(marc,'$$ || (SELECT format FROM config.metabib_field WHERE id = field_list[i]) || $$')$$, + 'biblio.record_entry', + (SELECT xpath FROM config.metabib_field WHERE id = field_list[i]), + 'id = ' || record, + (SELECT x.prefix FROM config.xml_transform x JOIN config.metabib_field m ON (m.format = x.name) WHERE m.id = field_list[i]), + (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]) + ) AS t( r bigint, f text) + WHERE f IS NOT NULL LOOP + RETURN NEXT rec; + END LOOP; + END LOOP; +END; +$_$ LANGUAGE PLPGSQL; + + + +CREATE OR REPLACE FUNCTION biblio_field_table ( record BIGINT, field INT ) RETURNS SETOF biblio_field_vtype AS $_$ + SELECT * FROM biblio_field_table( $1, ARRAY[$2] ) +$_$ LANGUAGE SQL; + +COMMIT; + diff --git a/Open-ILS/src/sql/Pg/002.schema.config.sql b/Open-ILS/src/sql/Pg/002.schema.config.sql index fc0703048e..618f0ba847 100644 --- a/Open-ILS/src/sql/Pg/002.schema.config.sql +++ b/Open-ILS/src/sql/Pg/002.schema.config.sql @@ -162,48 +162,6 @@ INSERT INTO config.metabib_field ( field_class, name, xpath ) VALUES ( 'subject' -- INSERT INTO config.metabib_field ( field_class, name, xpath ) VALUES ( 'subject', 'genre', $$//mods:mods/mods:genre$$ ); INSERT INTO config.metabib_field ( field_class, name, xpath ) VALUES ( 'keyword', 'keyword', $$//mods:mods/*[not(local-name()='originInfo')]$$ ); -- /* to fool vim */ - - -CREATE OR REPLACE FUNCTION oils_xml_transform ( TEXT, TEXT ) RETURNS TEXT AS $_$ - SELECT CASE WHEN (SELECT COUNT(*) FROM config.xml_transform WHERE name = $2 AND xslt = '---') > 0 THEN $1 - ELSE xslt_process($1, (SELECT xslt FROM config.xml_transform WHERE name = $2)) - END; -$_$ LANGUAGE SQL STRICT IMMUTABLE; - - - -CREATE TYPE biblio_field_vtype AS ( record BIGINT, field INT, content TEXT ); -CREATE OR REPLACE FUNCTION biblio_field_table ( record BIGINT, field_list INT[] ) RETURNS SETOF biblio_field_vtype AS $_$ -DECLARE - i INT; - rec biblio_field_vtype%ROWTYPE; -BEGIN - FOR i IN ARRAY_LOWER(field_list,1) .. ARRAY_UPPER(field_list,1) LOOP - FOR rec IN SELECT DISTINCT r, field_list[i], BTRIM(REGEXP_REPLACE(REGEXP_REPLACE(f, E'\n', ' ', 'g'), '[ ]+', ' ', 'g')) - FROM xpath_table_ns( - 'id', - $$oils_xml_transform(marc,'$$ || (SELECT format FROM config.metabib_field WHERE id = field_list[i]) || $$')$$, - 'biblio.record_entry', - (SELECT xpath FROM config.metabib_field WHERE id = field_list[i]), - 'id = ' || record, - (SELECT x.prefix FROM config.xml_transform x JOIN config.metabib_field m ON (m.format = x.name) WHERE m.id = field_list[i]), - (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]) - ) AS t( r bigint, f text) - WHERE f IS NOT NULL LOOP - RETURN NEXT rec; - END LOOP; - END LOOP; -END; -$_$ LANGUAGE PLPGSQL; - - - -CREATE OR REPLACE FUNCTION biblio_field_table ( record BIGINT, field INT ) RETURNS SETOF biblio_field_vtype AS $_$ - SELECT * FROM biblio_field_table( $1, ARRAY[$2] ) -$_$ LANGUAGE SQL; - - - CREATE TABLE config.non_cataloged_type ( id SERIAL PRIMARY KEY, owning_lib INT NOT NULL, -- REFERENCES actor.org_unit (id), -- 2.11.0