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