]> git.evergreen-ils.org Git - working/Evergreen.git/blob - Open-ILS/src/sql/Pg/upgrade/0546.schema.sip_statcats.sql
LP#1744385: Additions and edits to release note entry
[working/Evergreen.git] / Open-ILS / src / sql / Pg / upgrade / 0546.schema.sip_statcats.sql
1 -- Evergreen DB patch 0546.schema.sip_statcats.sql
2 BEGIN;
3
4
5 -- check whether patch can be applied
6 SELECT evergreen.upgrade_deps_block_check('0546', :eg_version);
7
8 CREATE TABLE actor.stat_cat_sip_fields (
9     field   CHAR(2) PRIMARY KEY,
10     name    TEXT    NOT NULL,
11     one_only  BOOL    NOT NULL DEFAULT FALSE
12 );
13 COMMENT ON TABLE actor.stat_cat_sip_fields IS $$
14 Actor Statistical Category SIP Fields
15
16 Contains the list of valid SIP Field identifiers for
17 Statistical Categories.
18 $$;
19 ALTER TABLE actor.stat_cat
20     ADD COLUMN sip_field   CHAR(2) REFERENCES actor.stat_cat_sip_fields(field) ON UPDATE CASCADE ON DELETE SET NULL DEFERRABLE INITIALLY DEFERRED,
21     ADD COLUMN sip_format  TEXT;
22
23 CREATE FUNCTION actor.stat_cat_check() RETURNS trigger AS $func$
24 DECLARE
25     sipfield actor.stat_cat_sip_fields%ROWTYPE;
26     use_count INT;
27 BEGIN
28     IF NEW.sip_field IS NOT NULL THEN
29         SELECT INTO sipfield * FROM actor.stat_cat_sip_fields WHERE field = NEW.sip_field;
30         IF sipfield.one_only THEN
31             SELECT INTO use_count count(id) FROM actor.stat_cat WHERE sip_field = NEW.sip_field AND id != NEW.id;
32             IF use_count > 0 THEN
33                 RAISE EXCEPTION 'Sip field cannot be used twice';
34             END IF;
35         END IF;
36     END IF;
37     RETURN NEW;
38 END;
39 $func$ LANGUAGE PLPGSQL;
40
41 CREATE TRIGGER actor_stat_cat_sip_update_trigger
42     BEFORE INSERT OR UPDATE ON actor.stat_cat FOR EACH ROW
43     EXECUTE PROCEDURE actor.stat_cat_check();
44
45 CREATE TABLE asset.stat_cat_sip_fields (
46     field   CHAR(2) PRIMARY KEY,
47     name    TEXT    NOT NULL,
48     one_only BOOL    NOT NULL DEFAULT FALSE
49 );
50 COMMENT ON TABLE asset.stat_cat_sip_fields IS $$
51 Asset Statistical Category SIP Fields
52
53 Contains the list of valid SIP Field identifiers for
54 Statistical Categories.
55 $$;
56
57 ALTER TABLE asset.stat_cat
58     ADD COLUMN sip_field   CHAR(2) REFERENCES asset.stat_cat_sip_fields(field) ON UPDATE CASCADE ON DELETE SET NULL DEFERRABLE INITIALLY DEFERRED,
59     ADD COLUMN sip_format  TEXT;
60
61 CREATE FUNCTION asset.stat_cat_check() RETURNS trigger AS $func$
62 DECLARE
63     sipfield asset.stat_cat_sip_fields%ROWTYPE;
64     use_count INT;
65 BEGIN
66     IF NEW.sip_field IS NOT NULL THEN
67         SELECT INTO sipfield * FROM asset.stat_cat_sip_fields WHERE field = NEW.sip_field;
68         IF sipfield.one_only THEN
69             SELECT INTO use_count count(id) FROM asset.stat_cat WHERE sip_field = NEW.sip_field AND id != NEW.id;
70             IF use_count > 0 THEN
71                 RAISE EXCEPTION 'Sip field cannot be used twice';
72             END IF;
73         END IF;
74     END IF;
75     RETURN NEW;
76 END;
77 $func$ LANGUAGE PLPGSQL;
78
79 CREATE TRIGGER asset_stat_cat_sip_update_trigger
80     BEFORE INSERT OR UPDATE ON asset.stat_cat FOR EACH ROW
81     EXECUTE PROCEDURE asset.stat_cat_check();
82
83
84 COMMIT;