3 -- Some records manage to get XML namespace declarations into each element,
4 -- like <datafield xmlns:marc="http://www.loc.gov/MARC21/slim"
5 -- This broke the old maintain_901(), so we'll make the regex more robust
7 INSERT INTO config.upgrade_log (version) VALUES ('0335'); -- dbs
9 CREATE OR REPLACE FUNCTION maintain_901 () RETURNS TRIGGER AS $func$
11 -- Remove any existing 901 fields before we insert the authoritative one
12 NEW.marc := REGEXP_REPLACE(NEW.marc, E'<datafield\s*[^<>]*?\s*tag="901".+?</datafield>', '', 'g');
13 IF TG_TABLE_SCHEMA = 'biblio' THEN
14 NEW.marc := REGEXP_REPLACE(
16 E'(</(?:[^:]*?:)?record>)',
17 E'<datafield tag="901" ind1=" " ind2=" ">' ||
18 '<subfield code="a">' || NEW.tcn_value || E'</subfield>' ||
19 '<subfield code="b">' || NEW.tcn_source || E'</subfield>' ||
20 '<subfield code="c">' || NEW.id || E'</subfield>' ||
21 '<subfield code="t">' || TG_TABLE_SCHEMA || E'</subfield>' ||
22 CASE WHEN NEW.owner IS NOT NULL THEN '<subfield code="o">' || NEW.owner || E'</subfield>' ELSE '' END ||
23 CASE WHEN NEW.share_depth IS NOT NULL THEN '<subfield code="d">' || NEW.share_depth || E'</subfield>' ELSE '' END ||
26 ELSIF TG_TABLE_SCHEMA = 'authority' THEN
27 NEW.marc := REGEXP_REPLACE(
29 E'(</(?:[^:]*?:)?record>)',
30 E'<datafield tag="901" ind1=" " ind2=" ">' ||
31 '<subfield code="a">' || NEW.arn_value || E'</subfield>' ||
32 '<subfield code="b">' || NEW.arn_source || E'</subfield>' ||
33 '<subfield code="c">' || NEW.id || E'</subfield>' ||
34 '<subfield code="t">' || TG_TABLE_SCHEMA || E'</subfield>' ||
37 ELSIF TG_TABLE_SCHEMA = 'serial' THEN
38 NEW.marc := REGEXP_REPLACE(
40 E'(</(?:[^:]*?:)?record>)',
41 E'<datafield tag="901" ind1=" " ind2=" ">' ||
42 '<subfield code="c">' || NEW.id || E'</subfield>' ||
43 '<subfield code="t">' || TG_TABLE_SCHEMA || E'</subfield>' ||
44 '<subfield code="o">' || NEW.owning_lib || E'</subfield>' ||
45 CASE WHEN NEW.record IS NOT NULL THEN '<subfield code="r">' || NEW.record || E'</subfield>' ELSE '' END ||
49 NEW.marc := REGEXP_REPLACE(
51 E'(</(?:[^:]*?:)?record>)',
52 E'<datafield tag="901" ind1=" " ind2=" ">' ||
53 '<subfield code="c">' || NEW.id || E'</subfield>' ||
54 '<subfield code="t">' || TG_TABLE_SCHEMA || E'</subfield>' ||
61 $func$ LANGUAGE PLPGSQL;