-- Evergreen DB patch 0576.fix_maintain_901_quoting.sql -- -- Fix for bug LP#809540 - fixes crash when inserting or updating -- bib whose tcn_value contains regex metacharacters. -- BEGIN; -- check whether patch can be applied SELECT evergreen.upgrade_deps_block_check('0576', :eg_version); 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'' || '' || REPLACE(evergreen.xml_escape(NEW.tcn_value), E'\\', E'\\\\') || E'' || '' || REPLACE(evergreen.xml_escape(NEW.tcn_source), E'\\', E'\\\\') || 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; COMMIT;