From: miker Date: Tue, 12 Apr 2011 17:24:58 +0000 (+0000) Subject: Fix functions stranded in the evergreen schema without a search path reference (ugly... X-Git-Url: https://old-git.evergreen-ils.org/?a=commitdiff_plain;h=66bcd9c54233be5e1008adafe30ab1a86b016c36;p=evergreen%2Fjoelewis.git Fix functions stranded in the evergreen schema without a search path reference (ugly but mechanical) git-svn-id: svn://svn.open-ils.org/ILS/branches/rel_2_0@20049 dcc99617-32d9-48b4-a31d-7c20da2025e4 --- diff --git a/Open-ILS/src/sql/Pg/002.functions.config.sql b/Open-ILS/src/sql/Pg/002.functions.config.sql index 83e513d62b..a8bea71d1e 100644 --- a/Open-ILS/src/sql/Pg/002.functions.config.sql +++ b/Open-ILS/src/sql/Pg/002.functions.config.sql @@ -419,7 +419,7 @@ CREATE OR REPLACE FUNCTION oils_json_to_text( TEXT ) RETURNS TEXT AS $f$ return $txt $f$ LANGUAGE PLPERLU; -CREATE OR REPLACE FUNCTION maintain_901 () RETURNS TRIGGER AS $func$ +CREATE OR REPLACE FUNCTION evergreen.maintain_901 () RETURNS TRIGGER AS $func$ DECLARE use_id_for_tcn BOOLEAN; BEGIN @@ -482,7 +482,7 @@ BEGIN END; $func$ LANGUAGE PLPGSQL; -CREATE OR REPLACE FUNCTION force_unicode_normal_form(string TEXT, form TEXT) RETURNS TEXT AS $func$ +CREATE OR REPLACE FUNCTION evergreen.force_unicode_normal_form(string TEXT, form TEXT) RETURNS TEXT AS $func$ use Unicode::Normalize 'normalize'; return normalize($_[1],$_[0]); # reverse the params $func$ LANGUAGE PLPERLU; diff --git a/Open-ILS/src/sql/Pg/002.schema.config.sql b/Open-ILS/src/sql/Pg/002.schema.config.sql index 695624fd22..162c3b78d0 100644 --- a/Open-ILS/src/sql/Pg/002.schema.config.sql +++ b/Open-ILS/src/sql/Pg/002.schema.config.sql @@ -70,7 +70,7 @@ CREATE TABLE config.upgrade_log ( install_date TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT NOW() ); -INSERT INTO config.upgrade_log (version) VALUES ('0509'); -- gmc +INSERT INTO config.upgrade_log (version) VALUES ('0510'); -- miker CREATE TABLE config.bib_source ( id SERIAL PRIMARY KEY, diff --git a/Open-ILS/src/sql/Pg/030.schema.metabib.sql b/Open-ILS/src/sql/Pg/030.schema.metabib.sql index f838778ec6..c0b84f5ab2 100644 --- a/Open-ILS/src/sql/Pg/030.schema.metabib.sql +++ b/Open-ILS/src/sql/Pg/030.schema.metabib.sql @@ -135,7 +135,7 @@ CREATE INDEX metabib_facet_entry_field_idx ON metabib.facet_entry (field); CREATE INDEX metabib_facet_entry_value_idx ON metabib.facet_entry (SUBSTRING(value,1,1024)); CREATE INDEX metabib_facet_entry_source_idx ON metabib.facet_entry (source); -CREATE OR REPLACE FUNCTION facet_force_nfc() RETURNS TRIGGER AS $$ +CREATE OR REPLACE FUNCTION evergreen.facet_force_nfc() RETURNS TRIGGER AS $$ BEGIN NEW.value := force_unicode_normal_form(NEW.value,'NFC'); RETURN NEW; @@ -144,7 +144,7 @@ $$ LANGUAGE PLPGSQL; CREATE TRIGGER facet_force_nfc_tgr BEFORE UPDATE OR INSERT ON metabib.facet_entry - FOR EACH ROW EXECUTE PROCEDURE facet_force_nfc(); + FOR EACH ROW EXECUTE PROCEDURE evergreen.facet_force_nfc(); CREATE TABLE metabib.rec_descriptor ( id BIGSERIAL PRIMARY KEY, diff --git a/Open-ILS/src/sql/Pg/upgrade/0510.schema.search_path.sql b/Open-ILS/src/sql/Pg/upgrade/0510.schema.search_path.sql new file mode 100644 index 0000000000..b57eca27f4 --- /dev/null +++ b/Open-ILS/src/sql/Pg/upgrade/0510.schema.search_path.sql @@ -0,0 +1,110 @@ +BEGIN; + +INSERT INTO config.upgrade_log('0510'); -- miker + +SELECT evergreen.change_db_setting('search_path', ARRAY['evergreen','public','pg_catalog']); + +-- Fix function breakage due to short search path +CREATE OR REPLACE FUNCTION evergreen.force_unicode_normal_form(string TEXT, form TEXT) RETURNS TEXT AS $func$ +use Unicode::Normalize 'normalize'; +return normalize($_[1],$_[0]); # reverse the params +$func$ LANGUAGE PLPERLU; + +CREATE OR REPLACE FUNCTION evergreen.facet_force_nfc() RETURNS TRIGGER AS $$ +BEGIN + NEW.value := force_unicode_normal_form(NEW.value,'NFC'); + RETURN NEW; +END; +$$ LANGUAGE PLPGSQL; + +DROP TRIGGER facet_force_nfc_tgr ON metabib.facet_entry; + +CREATE TRIGGER facet_force_nfc_tgr + BEFORE UPDATE OR INSERT ON metabib.facet_entry + FOR EACH ROW EXECUTE PROCEDURE evergreen.facet_force_nfc(); + +DROP FUNCTION IF EXISTS public.force_unicode_normal_form (TEXT,TEXT); +DROP FUNCTION IF EXISTS public.facet_force_nfc (); + +CREATE OR REPLACE FUNCTION evergreen.xml_escape(str TEXT) RETURNS text AS $$ + SELECT REPLACE(REPLACE(REPLACE($1, + '&', '&'), + '<', '<'), + '>', '>'); +$$ LANGUAGE SQL IMMUTABLE; + +CREATE OR REPLACE FUNCTION evergreen.maintain_901 () RETURNS TRIGGER AS $func$ +DECLARE + use_id_for_tcn BOOLEAN; +BEGIN + -- Remove any existing 901 fields before we insert the authoritative one + NEW.marc := REGEXP_REPLACE(NEW.marc, E']*?tag="901".+?', '', 'g'); + + IF TG_TABLE_SCHEMA = 'biblio' THEN + -- Set TCN value to record ID? + SELECT enabled FROM config.global_flag INTO use_id_for_tcn + WHERE name = 'cat.bib.use_id_for_tcn'; + + IF use_id_for_tcn = 't' THEN + NEW.tcn_value := NEW.id; + END IF; + + NEW.marc := REGEXP_REPLACE( + NEW.marc, + E'()', + E'' || + '' || evergreen.xml_escape(NEW.tcn_value) || E'' || + '' || evergreen.xml_escape(NEW.tcn_source) || E'' || + '' || NEW.id || E'' || + '' || TG_TABLE_SCHEMA || E'' || + CASE WHEN NEW.owner IS NOT NULL THEN '' || NEW.owner || E'' ELSE '' END || + CASE WHEN NEW.share_depth IS NOT NULL THEN '' || NEW.share_depth || E'' ELSE '' END || + E'\\1' + ); + ELSIF TG_TABLE_SCHEMA = 'authority' THEN + NEW.marc := REGEXP_REPLACE( + NEW.marc, + E'()', + E'' || + '' || NEW.id || E'' || + '' || TG_TABLE_SCHEMA || E'' || + E'\\1' + ); + ELSIF TG_TABLE_SCHEMA = 'serial' THEN + NEW.marc := REGEXP_REPLACE( + NEW.marc, + E'()', + E'' || + '' || NEW.id || E'' || + '' || TG_TABLE_SCHEMA || E'' || + '' || NEW.owning_lib || E'' || + CASE WHEN NEW.record IS NOT NULL THEN '' || NEW.record || E'' ELSE '' END || + E'\\1' + ); + ELSE + NEW.marc := REGEXP_REPLACE( + NEW.marc, + E'()', + E'' || + '' || NEW.id || E'' || + '' || TG_TABLE_SCHEMA || E'' || + E'\\1' + ); + END IF; + + RETURN NEW; +END; +$func$ LANGUAGE PLPGSQL; + +DROP TRIGGER b_maintain_901 ON biblio.record_entry; +DROP TRIGGER b_maintain_901 ON authority.record_entry; +DROP TRIGGER b_maintain_901 ON serial.record_entry; + +CREATE TRIGGER b_maintain_901 BEFORE INSERT OR UPDATE ON biblio.record_entry FOR EACH ROW EXECUTE PROCEDURE evergreen.maintain_901(); +CREATE TRIGGER b_maintain_901 BEFORE INSERT OR UPDATE ON authority.record_entry FOR EACH ROW EXECUTE PROCEDURE evergreen.maintain_901(); +CREATE TRIGGER b_maintain_901 BEFORE INSERT OR UPDATE ON serial.record_entry FOR EACH ROW EXECUTE PROCEDURE evergreen.maintain_901(); + +DROP FUNCTION IF EXISTS public.maintain_901 (); + +COMMIT; +