]> git.evergreen-ils.org Git - working/Evergreen.git/blob - Open-ILS/src/sql/Pg/upgrade/0320.schema.forcibly-maintain-901.sql
LP#1643709: Stamping upgrade scripts
[working/Evergreen.git] / Open-ILS / src / sql / Pg / upgrade / 0320.schema.forcibly-maintain-901.sql
1 BEGIN;
2
3 INSERT INTO config.upgrade_log (version) VALUES ('0320'); -- miker
4
5 CREATE OR REPLACE FUNCTION maintain_901 () RETURNS TRIGGER AS $func$
6 BEGIN
7     NEW.marc := REGEXP_REPLACE(NEW.marc, E'<datafield tag="901".+?</datafield>', '', 'g');
8     IF TG_TABLE_SCHEMA = 'biblio' THEN
9         NEW.marc := REGEXP_REPLACE(
10             NEW.marc,
11             E'(</(?:[^:]*?:)?record>)',
12             E'<datafield tag="901" ind1=" " ind2=" ">' ||
13                 '<subfield code="a">' || NEW.tcn_value || E'</subfield>' ||
14                 '<subfield code="b">' || NEW.tcn_source || E'</subfield>' ||
15                 '<subfield code="c">' || NEW.id || E'</subfield>' ||
16                 '<subfield code="t">' || TG_TABLE_SCHEMA || E'</subfield>' ||
17                 CASE WHEN NEW.owner IS NOT NULL THEN '<subfield code="o">' || NEW.owner || E'</subfield>' ELSE '' END ||
18                 CASE WHEN NEW.share_depth IS NOT NULL THEN '<subfield code="d">' || NEW.share_depth || E'</subfield>' ELSE '' END ||
19              E'</datafield>\\1'
20         );
21     ELSIF TG_TABLE_SCHEMA = 'authority' THEN
22         NEW.marc := REGEXP_REPLACE(
23             NEW.marc,
24             E'(</(?:[^:]*?:)?record>)',
25             E'<datafield tag="901" ind1=" " ind2=" ">' ||
26                 '<subfield code="a">' || NEW.arn_value || E'</subfield>' ||
27                 '<subfield code="b">' || NEW.arn_source || E'</subfield>' ||
28                 '<subfield code="c">' || NEW.id || E'</subfield>' ||
29                 '<subfield code="t">' || TG_TABLE_SCHEMA || E'</subfield>' ||
30              E'</datafield>\\1'
31         );
32     ELSIF TG_TABLE_SCHEMA = 'serial' THEN
33         NEW.marc := REGEXP_REPLACE(
34             NEW.marc,
35             E'(</(?:[^:]*?:)?record>)',
36             E'<datafield tag="901" ind1=" " ind2=" ">' ||
37                 '<subfield code="c">' || NEW.id || E'</subfield>' ||
38                 '<subfield code="t">' || TG_TABLE_SCHEMA || E'</subfield>' ||
39                 '<subfield code="o">' || NEW.owning_lib || E'</subfield>' ||
40                 CASE WHEN NEW.record IS NOT NULL THEN '<subfield code="r">' || NEW.record || E'</subfield>' ELSE '' END ||
41              E'</datafield>\\1'
42         );
43     ELSE
44         NEW.marc := REGEXP_REPLACE(
45             NEW.marc,
46             E'(</(?:[^:]*?:)?record>)',
47             E'<datafield tag="901" ind1=" " ind2=" ">' ||
48                 '<subfield code="c">' || NEW.id || E'</subfield>' ||
49                 '<subfield code="t">' || TG_TABLE_SCHEMA || E'</subfield>' ||
50              E'</datafield>\\1'
51         );
52     END IF;
53
54     RETURN NEW;
55 END;
56 $func$ LANGUAGE PLPGSQL;
57
58 CREATE TRIGGER b_maintain_901 BEFORE INSERT OR UPDATE ON biblio.record_entry FOR EACH ROW EXECUTE PROCEDURE maintain_901();
59 CREATE TRIGGER b_maintain_901 BEFORE INSERT OR UPDATE ON authority.record_entry FOR EACH ROW EXECUTE PROCEDURE maintain_901();
60 CREATE TRIGGER b_maintain_901 BEFORE INSERT OR UPDATE ON serial.record_entry FOR EACH ROW EXECUTE PROCEDURE maintain_901();
61  
62 COMMIT;
63