]> git.evergreen-ils.org Git - Evergreen.git/blob - Open-ILS/src/sql/Pg/900.audit-functions.sql
802516fe905173050db1e452710d668d067068fe
[Evergreen.git] / Open-ILS / src / sql / Pg / 900.audit-functions.sql
1 DROP SCHEMA auditor CASCADE;
2
3 BEGIN;
4
5 CREATE SCHEMA auditor;
6
7
8 CREATE FUNCTION auditor.create_auditor ( sch TEXT, tbl TEXT ) RETURNS BOOL AS $creator$
9 BEGIN
10         EXECUTE $$
11                         CREATE SEQUENCE auditor.$$ || sch || $$_$$ || tbl || $$_pkey_seq;
12         $$;
13
14         EXECUTE $$
15                         CREATE TABLE auditor.$$ || sch || $$_$$ || tbl || $$_history (
16                                 audit_id        BIGINT                          PRIMARY KEY,
17                                 audit_time      TIMESTAMP WITH TIME ZONE        NOT NULL,
18                                 audit_action    TEXT                            NOT NULL,
19                                 LIKE $$ || sch || $$.$$ || tbl || $$
20                         );
21         $$;
22
23         EXECUTE $$
24                         CREATE FUNCTION auditor.audit_$$ || sch || $$_$$ || tbl || $$_func ()
25                         RETURNS TRIGGER AS $func$
26                         BEGIN
27                                 INSERT INTO auditor.$$ || sch || $$_$$ || tbl || $$_history
28                                         SELECT  nextval('auditor.$$ || sch || $$_$$ || tbl || $$_pkey_seq'),
29                                                 now(),
30                                                 SUBSTR(TG_OP,1,1),
31                                                 OLD.*;
32                                 RETURN NULL;
33                         END;
34                         $func$ LANGUAGE 'plpgsql';
35         $$;
36
37         EXECUTE $$
38                         CREATE TRIGGER audit_$$ || sch || $$_$$ || tbl || $$_update_trigger
39                                 AFTER UPDATE OR DELETE ON $$ || sch || $$.$$ || tbl || $$ FOR EACH ROW
40                                 EXECUTE PROCEDURE auditor.audit_$$ || sch || $$_$$ || tbl || $$_func ();
41         $$;
42
43         EXECUTE $$
44                         CREATE VIEW auditor.$$ || sch || $$_$$ || tbl || $$_lifecycle AS
45                                 SELECT  -1, now() as audit_time, '-' as audit_action, *
46                                   FROM  $$ || sch || $$.$$ || tbl || $$
47                                         UNION ALL
48                                 SELECT  *
49                                   FROM  auditor.$$ || sch || $$_$$ || tbl || $$_history;
50         $$;
51         RETURN TRUE;
52 END;
53 $creator$ LANGUAGE 'plpgsql';
54
55 COMMIT;
56