edb8f638df635285bcce914e4607d8a664f2f940
[xtuple] / foundation-database / public / trigger_functions / pkgpriv.sql
1 -- NO create trigger statements. the updater will create them.
2
3 SELECT dropIfExists('TRIGGER', 'pkgprivbeforetrigger');
4 CREATE OR REPLACE FUNCTION _pkgprivbeforetrigger() RETURNS "trigger" AS $$
5 -- Copyright (c) 1999-2014 by OpenMFG LLC, d/b/a xTuple. 
6 -- See www.xtuple.com/CPAL for the full text of the software license.
7 DECLARE
8   _privid       INTEGER;
9   _debug        BOOL := false;
10
11 BEGIN
12   IF (TG_OP = 'UPDATE') THEN
13     IF (_debug) THEN
14       RAISE NOTICE 'OLD.priv_name %, NEW.priv_name %',
15                    OLD.priv_name, NEW.priv_name;
16     END IF;
17
18     IF (NEW.priv_name != OLD.priv_name) THEN
19       SELECT priv_id INTO _privid FROM priv WHERE priv_name=NEW.priv_name;
20       IF (FOUND) THEN
21         RAISE EXCEPTION 'Cannot change privilege name % because another privilege with that name already exists.', NEW.priv_name;
22       END IF;
23     END IF;
24
25   ELSIF (TG_OP = 'INSERT') THEN
26     IF (_debug) THEN
27       RAISE NOTICE 'inserting NEW.priv_name %', NEW.priv_name;
28     END IF;
29     SELECT priv_id INTO _privid FROM priv WHERE priv_name=NEW.priv_name;
30     IF (FOUND) THEN
31       RAISE EXCEPTION 'Cannot create new privilege % because another privilege with that name already exists.', NEW.priv_name;
32     END IF;
33
34   ELSIF (TG_OP = 'DELETE') THEN
35     IF (_debug) THEN RAISE NOTICE 'deleting pkgpriv_id %', OLD.priv_id; END IF;
36     DELETE FROM usrpriv WHERE usrpriv_priv_id=OLD.priv_id;
37     DELETE FROM grppriv WHERE grppriv_priv_id=OLD.priv_id;
38
39     RETURN OLD;
40   END IF;
41
42   RETURN NEW;
43 END;
44 $$ LANGUAGE 'plpgsql';
45
46 CREATE OR REPLACE FUNCTION _pkgprivalterTrigger() RETURNS TRIGGER AS $$
47 -- Copyright (c) 1999-2014 by OpenMFG LLC, d/b/a xTuple. 
48 -- See www.xtuple.com/CPAL for the full text of the software license.
49 BEGIN
50   IF (pkgMayBeModified(TG_TABLE_SCHEMA)) THEN
51     IF (TG_OP = 'DELETE') THEN
52       RETURN OLD;
53     ELSE
54       RETURN NEW;
55     END IF;
56   END IF;
57
58   IF (TG_OP = 'INSERT') THEN
59     RAISE EXCEPTION 'You may not create privileges in packages except using the xTuple Updater utility';
60
61   ELSIF (TG_OP = 'UPDATE') THEN
62     RAISE EXCEPTION 'You may not alter privileges in packages except using the xTuple Updater utility';
63
64   ELSIF (TG_OP = 'DELETE') THEN
65     RAISE EXCEPTION 'You may not delete privileges from packages. Try deleting or disabling the package.';
66
67   END IF;
68
69   RETURN NEW;
70 END;
71
72 $$ LANGUAGE 'plpgsql';
73
74 CREATE OR REPLACE FUNCTION _pkgprivaftertrigger() RETURNS TRIGGER AS $$
75 -- Copyright (c) 1999-2014 by OpenMFG LLC, d/b/a xTuple. 
76 -- See www.xtuple.com/CPAL for the full text of the software license.
77 BEGIN
78   IF (TG_OP = 'DELETE') THEN
79     RETURN OLD;
80   END IF;
81
82   RETURN NEW;
83 END;
84 $$ LANGUAGE 'plpgsql';