3 INSERT INTO config.upgrade_log (version) VALUES ('0408'); -- gmc
5 CREATE OR REPLACE FUNCTION maintain_901 () RETURNS TRIGGER AS $func$
7 -- Remove any existing 901 fields before we insert the authoritative one
8 NEW.marc := REGEXP_REPLACE(NEW.marc, E'<datafield\s*[^<>]*?\s*tag="901".+?</datafield>', '', 'g');
9 IF TG_TABLE_SCHEMA = 'biblio' THEN
10 NEW.marc := REGEXP_REPLACE(
12 E'(</(?:[^:]*?:)?record>)',
13 E'<datafield tag="901" ind1=" " ind2=" ">' ||
14 '<subfield code="a">' || NEW.tcn_value || E'</subfield>' ||
15 '<subfield code="b">' || NEW.tcn_source || E'</subfield>' ||
16 '<subfield code="c">' || NEW.id || E'</subfield>' ||
17 '<subfield code="t">' || TG_TABLE_SCHEMA || E'</subfield>' ||
18 CASE WHEN NEW.owner IS NOT NULL THEN '<subfield code="o">' || NEW.owner || E'</subfield>' ELSE '' END ||
19 CASE WHEN NEW.share_depth IS NOT NULL THEN '<subfield code="d">' || NEW.share_depth || E'</subfield>' ELSE '' END ||
22 ELSIF TG_TABLE_SCHEMA = 'authority' THEN
23 NEW.marc := REGEXP_REPLACE(
25 E'(</(?:[^:]*?:)?record>)',
26 E'<datafield tag="901" ind1=" " ind2=" ">' ||
27 '<subfield code="c">' || NEW.id || E'</subfield>' ||
28 '<subfield code="t">' || TG_TABLE_SCHEMA || E'</subfield>' ||
31 ELSIF TG_TABLE_SCHEMA = 'serial' THEN
32 NEW.marc := REGEXP_REPLACE(
34 E'(</(?:[^:]*?:)?record>)',
35 E'<datafield tag="901" ind1=" " ind2=" ">' ||
36 '<subfield code="c">' || NEW.id || E'</subfield>' ||
37 '<subfield code="t">' || TG_TABLE_SCHEMA || E'</subfield>' ||
38 '<subfield code="o">' || NEW.owning_lib || E'</subfield>' ||
39 CASE WHEN NEW.record IS NOT NULL THEN '<subfield code="r">' || NEW.record || E'</subfield>' ELSE '' END ||
43 NEW.marc := REGEXP_REPLACE(
45 E'(</(?:[^:]*?:)?record>)',
46 E'<datafield tag="901" ind1=" " ind2=" ">' ||
47 '<subfield code="c">' || NEW.id || E'</subfield>' ||
48 '<subfield code="t">' || TG_TABLE_SCHEMA || E'</subfield>' ||
55 $func$ LANGUAGE PLPGSQL;