]> git.evergreen-ils.org Git - working/Evergreen.git/blob - Open-ILS/src/sql/Pg/upgrade/0408.schema.update_maintain_901.sql
Stamping upgrade for relaxing rank_ou sorting
[working/Evergreen.git] / Open-ILS / src / sql / Pg / upgrade / 0408.schema.update_maintain_901.sql
1 BEGIN;
2
3 INSERT INTO config.upgrade_log (version) VALUES ('0408'); -- gmc
4
5 CREATE OR REPLACE FUNCTION maintain_901 () RETURNS TRIGGER AS $func$
6 BEGIN
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(
11             NEW.marc,
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 ||
20              E'</datafield>\\1'
21         );
22     ELSIF TG_TABLE_SCHEMA = 'authority' THEN
23         NEW.marc := REGEXP_REPLACE(
24             NEW.marc,
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>' ||
29              E'</datafield>\\1'
30         );
31     ELSIF TG_TABLE_SCHEMA = 'serial' THEN
32         NEW.marc := REGEXP_REPLACE(
33             NEW.marc,
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 ||
40              E'</datafield>\\1'
41         );
42     ELSE
43         NEW.marc := REGEXP_REPLACE(
44             NEW.marc,
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>' ||
49              E'</datafield>\\1'
50         );
51     END IF;
52
53     RETURN NEW;
54 END;
55 $func$ LANGUAGE PLPGSQL;
56
57 COMMIT;