]> git.evergreen-ils.org Git - Evergreen.git/blob - Open-ILS/src/sql/Pg/900.audit-functions.sql
rolling back recent change ... miscommunication on how i18n_core is used
[Evergreen.git] / Open-ILS / src / sql / Pg / 900.audit-functions.sql
1 /*
2  * Copyright (C) 2004-2008  Georgia Public Library Service
3  * Copyright (C) 2007-2008  Equinox Software, Inc.
4  * Mike Rylander <miker@esilibrary.com> 
5  *
6  * This program is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU General Public License
8  * as published by the Free Software Foundation; either version 2
9  * of the License, or (at your option) any later version.
10  *
11  * This program is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  * GNU General Public License for more details.
15  *
16  */
17
18 DROP SCHEMA auditor CASCADE;
19
20 BEGIN;
21
22 CREATE SCHEMA auditor;
23
24
25 CREATE FUNCTION auditor.create_auditor ( sch TEXT, tbl TEXT ) RETURNS BOOL AS $creator$
26 BEGIN
27         EXECUTE $$
28                         CREATE SEQUENCE auditor.$$ || sch || $$_$$ || tbl || $$_pkey_seq;
29         $$;
30
31         EXECUTE $$
32                         CREATE TABLE auditor.$$ || sch || $$_$$ || tbl || $$_history (
33                                 audit_id        BIGINT                          PRIMARY KEY,
34                                 audit_time      TIMESTAMP WITH TIME ZONE        NOT NULL,
35                                 audit_action    TEXT                            NOT NULL,
36                                 LIKE $$ || sch || $$.$$ || tbl || $$
37                         );
38         $$;
39
40         EXECUTE $$
41                         CREATE FUNCTION auditor.audit_$$ || sch || $$_$$ || tbl || $$_func ()
42                         RETURNS TRIGGER AS $func$
43                         BEGIN
44                                 INSERT INTO auditor.$$ || sch || $$_$$ || tbl || $$_history
45                                         SELECT  nextval('auditor.$$ || sch || $$_$$ || tbl || $$_pkey_seq'),
46                                                 now(),
47                                                 SUBSTR(TG_OP,1,1),
48                                                 OLD.*;
49                                 RETURN NULL;
50                         END;
51                         $func$ LANGUAGE 'plpgsql';
52         $$;
53
54         EXECUTE $$
55                         CREATE TRIGGER audit_$$ || sch || $$_$$ || tbl || $$_update_trigger
56                                 AFTER UPDATE OR DELETE ON $$ || sch || $$.$$ || tbl || $$ FOR EACH ROW
57                                 EXECUTE PROCEDURE auditor.audit_$$ || sch || $$_$$ || tbl || $$_func ();
58         $$;
59
60         EXECUTE $$
61                         CREATE VIEW auditor.$$ || sch || $$_$$ || tbl || $$_lifecycle AS
62                                 SELECT  -1, now() as audit_time, '-' as audit_action, *
63                                   FROM  $$ || sch || $$.$$ || tbl || $$
64                                         UNION ALL
65                                 SELECT  *
66                                   FROM  auditor.$$ || sch || $$_$$ || tbl || $$_history;
67         $$;
68         RETURN TRUE;
69 END;
70 $creator$ LANGUAGE 'plpgsql';
71
72 COMMIT;
73