Edgewall Software

TracMultipleProjects/MultipleEnvironmentsSingleDatabase: trac_ddl.sql

File trac_ddl.sql, 21.5 KB (added by masonjm@…, 3 years ago)

SQL script to create tables and views

Line 
1CREATE TABLE master_attachment (
2    dbuser text NOT NULL,
3    "type" text NOT NULL,
4    id text NOT NULL,
5    filename text NOT NULL,
6    size integer,
7    "time" integer,
8    description text,
9    author text,
10    ipnr text
11);
12
13CREATE TABLE master_auth_cookie (
14    dbuser text NOT NULL,
15    cookie text NOT NULL,
16    name text NOT NULL,
17    ipnr text NOT NULL,
18    "time" integer
19);
20
21CREATE TABLE master_component (
22    dbuser text NOT NULL,
23    name text NOT NULL,
24    "owner" text,
25    description text
26);
27
28CREATE TABLE master_enum (
29    dbuser text NOT NULL,
30    "type" text NOT NULL,
31    name text NOT NULL,
32    value text
33);
34
35CREATE TABLE master_milestone (
36    dbuser text NOT NULL,
37    name text NOT NULL,
38    due integer,
39    completed integer,
40    description text
41);
42
43CREATE TABLE master_node_change (
44    dbuser text NOT NULL,
45    rev text NOT NULL,
46    path text NOT NULL,
47    kind text,
48    change text NOT NULL,
49    base_path text,
50    base_rev text
51);
52
53CREATE TABLE master_permission (
54    dbuser text NOT NULL,
55    username text NOT NULL,
56    "action" text NOT NULL
57);
58
59-- the sequence must be created manually to be named correctly
60CREATE SEQUENCE report_id_seq;
61CREATE TABLE master_report (
62    dbuser text NOT NULL,
63    id integer DEFAULT nextval('report_id_seq') NOT NULL,
64    author text,
65    title text,
66    sql text,
67    description text
68);
69
70CREATE TABLE master_revision (
71    dbuser text NOT NULL,
72    rev text NOT NULL,
73    "time" integer,
74    author text,
75    message text
76);
77
78CREATE TABLE "master_session" (
79    dbuser text NOT NULL,
80    sid text NOT NULL,
81    authenticated integer NOT NULL,
82    var_name text NOT NULL,
83    var_value text
84);
85
86CREATE TABLE "master_system" (
87    dbuser text NOT NULL,
88    name text NOT NULL,
89    value text
90);
91
92-- create manually to ensure correct naming
93CREATE SEQUENCE ticket_id_seq;
94CREATE TABLE master_ticket (
95    dbuser text NOT NULL,
96    id integer DEFAULT nextval('ticket_id_seq') NOT NULL,
97    "type" text,
98    "time" integer,
99    changetime integer,
100    component text,
101    severity text,
102    priority text,
103    "owner" text,
104    reporter text,
105    cc text,
106    version text,
107    milestone text,
108    status text,
109    resolution text,
110    summary text,
111    description text,
112    keywords text
113);
114
115CREATE TABLE master_ticket_change (
116    dbuser text NOT NULL,
117    ticket integer NOT NULL,
118    "time" integer NOT NULL,
119    author text,
120    field text NOT NULL,
121    oldvalue text,
122    newvalue text
123);
124
125CREATE TABLE master_ticket_custom (
126    dbuser text NOT NULL,
127    ticket integer NOT NULL,
128    name text NOT NULL,
129    value text
130);
131
132CREATE TABLE master_version (
133    dbuser text NOT NULL,
134    name text NOT NULL,
135    "time" integer,
136    description text
137);
138
139CREATE TABLE master_wiki (
140    dbuser text NOT NULL,
141    name text NOT NULL,
142    version integer NOT NULL,
143    "time" integer,
144    author text,
145    ipnr text,
146    text text,
147    "comment" text,
148    readonly integer
149);
150
151ALTER TABLE ONLY master_attachment
152    ADD CONSTRAINT attachment_pk PRIMARY KEY (dbuser, "type", id, filename);
153
154ALTER TABLE ONLY master_auth_cookie
155    ADD CONSTRAINT auth_cookie_pk PRIMARY KEY (dbuser, cookie, ipnr, name);
156
157ALTER TABLE ONLY master_component
158    ADD CONSTRAINT component_pkey PRIMARY KEY (dbuser, name);
159
160ALTER TABLE ONLY master_enum
161    ADD CONSTRAINT enum_pk PRIMARY KEY (dbuser, "type", name);
162
163ALTER TABLE ONLY master_milestone
164    ADD CONSTRAINT milestone_pkey PRIMARY KEY (dbuser, name);
165
166ALTER TABLE ONLY master_node_change
167    ADD CONSTRAINT node_change_pk PRIMARY KEY (dbuser, rev, path, change);
168
169ALTER TABLE ONLY master_permission
170    ADD CONSTRAINT permission_pk PRIMARY KEY (dbuser, username, "action");
171
172ALTER TABLE ONLY master_report
173    ADD CONSTRAINT report_pkey PRIMARY KEY (dbuser, id);
174
175ALTER TABLE ONLY master_revision
176    ADD CONSTRAINT revision_pkey PRIMARY KEY (dbuser, rev);
177
178ALTER TABLE ONLY "master_session"
179    ADD CONSTRAINT session_pk PRIMARY KEY (dbuser, sid, authenticated, var_name);
180
181ALTER TABLE ONLY "master_system"
182    ADD CONSTRAINT system_pkey PRIMARY KEY (dbuser, name);
183
184ALTER TABLE ONLY master_ticket_change
185    ADD CONSTRAINT ticket_change_pk PRIMARY KEY (dbuser, ticket, "time", field);
186
187ALTER TABLE ONLY master_ticket_custom
188    ADD CONSTRAINT ticket_custom_pk PRIMARY KEY (dbuser, ticket, name);
189
190ALTER TABLE ONLY master_ticket
191    ADD CONSTRAINT ticket_pkey PRIMARY KEY (dbuser, id);
192
193ALTER TABLE ONLY master_version
194    ADD CONSTRAINT version_pkey PRIMARY KEY (dbuser, name);
195
196ALTER TABLE ONLY master_wiki
197    ADD CONSTRAINT wiki_pk PRIMARY KEY (dbuser, name, version);
198
199CREATE INDEX node_change_rev_idx ON master_node_change USING btree (dbuser, rev);
200
201CREATE INDEX revision_time_idx ON master_revision USING btree (dbuser, "time");
202
203CREATE INDEX ticket_change_ticket_time_idx ON master_ticket_change USING btree (dbuser, ticket, "time");
204
205CREATE INDEX ticket_status_idx ON master_ticket USING btree (dbuser, status);
206
207CREATE INDEX ticket_time_idx ON master_ticket USING btree (dbuser, "time");
208
209CREATE INDEX wiki_time_idx ON master_wiki USING btree (dbuser, "time");
210
211-- attachment view
212CREATE VIEW attachment AS
213    SELECT
214        "type",
215        id,
216        filename,
217        size,
218        "time",
219        description,
220        author,
221        ipnr
222    FROM master_attachment
223    WHERE
224        dbuser = session_user;
225
226CREATE RULE attachment_ins AS ON INSERT TO attachment
227    DO INSTEAD
228    INSERT INTO master_attachment VALUES (
229        session_user,
230        NEW."type",
231        NEW.id,
232        NEW.filename,
233        NEW.size,
234        NEW."time",
235        NEW.description,
236        NEW.author,
237        NEW.ipnr
238    );
239
240CREATE RULE attachment_upd AS ON UPDATE TO attachment
241    DO INSTEAD
242    UPDATE master_attachment
243    SET
244        "type" = NEW."type",
245        id = NEW.id,
246        filename = NEW.filename,
247        size = NEW.size,
248        "time" = NEW."time",
249        description = NEW.description,
250        author = NEW.author,
251        ipnr = NEW.ipnr
252    WHERE
253        dbuser = session_user AND
254        "type" = OLD."type" AND
255        id = OLD.id AND
256        filename = OLD.filename;
257
258CREATE RULE attachment_del AS ON DELETE TO attachment
259    DO INSTEAD
260    DELETE FROM master_attachment
261    WHERE 
262        dbuser = session_user AND
263        "type" = OLD."type" AND
264        id = OLD.id AND
265        filename = OLD.filename;
266
267
268-- auth_cookie view
269CREATE VIEW auth_cookie AS
270    SELECT
271        cookie,
272        name,
273        ipnr,
274        "time"
275    FROM master_auth_cookie
276    WHERE
277        dbuser = session_user;
278
279CREATE RULE auth_cookie_ins AS ON INSERT TO auth_cookie
280    DO INSTEAD
281    INSERT INTO master_auth_cookie VALUES (
282        session_user,
283        NEW.cookie,
284        NEW.name,
285        NEW.ipnr,
286        NEW."time"
287    );
288
289CREATE RULE auth_cookie_upd AS ON UPDATE TO auth_cookie
290    DO INSTEAD
291    UPDATE master_auth_cookie
292    SET
293        cookie = NEW.cookie,
294        name = NEW.name,
295        ipnr = NEW.ipnr,
296        "time" = NEW."time"
297    WHERE
298        dbuser = session_user AND
299        cookie = OLD.cookie AND
300        ipnr = OLD.ipnr AND
301        name = OLD.name;
302
303CREATE RULE auth_cookie_del AS ON DELETE TO auth_cookie
304    DO INSTEAD
305    DELETE FROM master_auth_cookie
306    WHERE
307        dbuser = session_user AND
308        cookie = OLD.cookie AND
309        ipnr = OLD.ipnr AND
310        name = OLD.name;
311       
312
313-- component view
314CREATE VIEW component AS
315    SELECT
316        name,
317        "owner",
318        description
319    FROM master_component
320    WHERE
321        dbuser = session_user;
322
323CREATE RULE component_ins AS ON INSERT TO component
324    DO INSTEAD
325    INSERT INTO master_component VALUES (
326        session_user,
327        NEW.name,
328        NEW."owner",
329        NEW.description
330    );
331
332CREATE RULE component_upd AS ON UPDATE TO component
333    DO INSTEAD
334    UPDATE master_component
335    SET
336        name = NEW.name,
337        "owner" = NEW."owner",
338        description = NEW.description
339    WHERE
340        dbuser = session_user AND
341        name = OLD.name;
342
343CREATE RULE component_del AS ON DELETE TO component
344    DO INSTEAD
345    DELETE FROM master_component
346    WHERE
347        dbuser = session_user AND
348        name = OLD.name;
349       
350       
351-- enum view
352CREATE VIEW enum AS
353    SELECT
354        "type",
355        name,
356        value
357    FROM master_enum
358    WHERE
359        dbuser = session_user;
360
361CREATE RULE enum_ins AS ON INSERT TO enum
362    DO INSTEAD
363    INSERT INTO master_enum VALUES (
364        session_user,
365        NEW."type",
366        NEW.name,
367        NEW.value
368    );
369
370CREATE RULE enum_upd AS ON UPDATE TO enum
371    DO INSTEAD
372    UPDATE master_enum
373    SET
374        "type" = NEW."type",
375        name = NEW.name,
376        value = NEW.value
377    WHERE
378        dbuser = session_user AND
379        "type" = OLD."type" AND
380        name = OLD.name;
381
382CREATE RULE enum_del AS ON DELETE TO enum
383    DO INSTEAD
384    DELETE FROM master_enum
385    WHERE
386        dbuser = session_user AND
387        "type" = OLD."type" AND
388        name = OLD.name;
389       
390
391-- milestone view
392CREATE VIEW milestone AS
393    SELECT
394        name,
395        due,
396        completed,
397        description
398    FROM master_milestone
399    WHERE
400        dbuser = session_user;
401
402CREATE RULE milestone_ins AS ON INSERT TO milestone
403    DO INSTEAD
404    INSERT INTO master_milestone VALUES (
405        session_user,
406        NEW.name,
407        NEW.due,
408        NEW.completed,
409        NEW.description
410    );
411
412CREATE RULE milestone_upd AS ON UPDATE TO milestone
413    DO INSTEAD
414    UPDATE master_milestone
415    SET
416        name = NEW.name,
417        due = NEW.due,
418        completed = NEW.completed,
419        description = NEW.description
420    WHERE
421        dbuser = session_user AND
422        name = OLD.name;
423
424CREATE RULE milestone_del AS ON DELETE TO milestone
425    DO INSTEAD
426    DELETE FROM master_milestone
427    WHERE
428        dbuser = session_user AND
429        name = OLD.name;
430       
431
432-- node_change view
433CREATE VIEW node_change AS
434    SELECT
435        rev,
436        path,
437        kind,
438        change,
439        base_path,
440        base_rev
441    FROM master_node_change
442    WHERE
443        dbuser = session_user;
444
445CREATE RULE node_change_ins AS ON INSERT TO node_change
446    DO INSTEAD
447    INSERT INTO master_node_change VALUES (
448        session_user,
449        NEW.rev,
450        NEW.path,
451        NEW.kind,
452        NEW.change,
453        NEW.base_path,
454        NEW.base_rev
455    );
456
457CREATE RULE node_change_upd AS ON UPDATE TO node_change
458    DO INSTEAD
459    UPDATE master_node_change
460    SET
461        rev = NEW.rev,
462        path = NEW.path,
463        kind = NEW.kind,
464        change = NEW.change,
465        base_path = NEW.base_path,
466        base_rev = NEW.base_rev
467    WHERE
468        dbuser = session_user AND
469        rev = OLD.rev AND
470        path = OLD.path AND
471        change = OLD.change;
472
473CREATE RULE node_change_del AS ON DELETE TO node_change
474    DO INSTEAD
475    DELETE FROM master_node_change
476    WHERE
477        dbuser = session_user AND
478        rev = OLD.rev AND
479        path = OLD.path AND
480        change = OLD.change;
481       
482
483-- permission view
484CREATE VIEW permission AS
485    SELECT
486        username,
487        "action"
488    FROM master_permission
489    WHERE
490        dbuser = session_user;
491
492CREATE RULE permission_ins AS ON INSERT TO permission
493    DO INSTEAD
494    INSERT INTO master_permission VALUES (
495        session_user,
496        NEW.username,
497        NEW."action"
498    );
499
500CREATE RULE permission_upd AS ON UPDATE TO permission
501    DO INSTEAD
502    UPDATE master_permission
503    SET
504        username = NEW.username,
505        "action" = NEW."action"
506    WHERE
507        dbuser = session_user AND
508        username = OLD.username AND
509        "action" = OLD."action";
510
511CREATE RULE permission_del AS ON DELETE TO permission
512    DO INSTEAD
513    DELETE FROM master_permission
514    WHERE
515        dbuser = session_user AND
516        username = OLD.username AND
517        "action" = OLD."action";
518
519
520-- report view
521CREATE VIEW report AS
522    SELECT
523        id,
524        author,
525        title,
526        sql,
527        description
528    FROM master_report
529    WHERE
530        dbuser = session_user;
531
532CREATE RULE report_ins AS ON INSERT TO report
533    DO INSTEAD
534    INSERT INTO master_report VALUES (
535        session_user,
536        DEFAULT,
537        NEW.author,
538        NEW.title,
539        NEW.sql,
540        NEW.description
541    );
542
543CREATE RULE report_upd AS ON UPDATE TO report
544    DO INSTEAD
545    UPDATE master_report
546    SET
547        id = NEW.id,
548        author = NEW.author,
549        title = NEW.title,
550        sql = NEW.sql,
551        description = NEW.description
552    WHERE
553        dbuser = session_user AND
554        id = OLD.id;
555
556CREATE RULE report_del AS ON DELETE TO report
557    DO INSTEAD
558    DELETE FROM master_report
559    WHERE
560        dbuser = session_user AND
561        id = OLD.id;
562
563
564-- revision view
565CREATE VIEW revision AS
566    SELECT
567        rev,
568        "time",
569        author,
570        message
571    FROM master_revision
572    WHERE
573        dbuser = session_user;
574
575CREATE RULE revision_ins AS ON INSERT TO revision
576    DO INSTEAD
577    INSERT INTO master_revision VALUES (
578        session_user,
579        NEW.rev,
580        NEW."time",
581        NEW.author,
582        NEW.message
583    );
584
585CREATE RULE revision_upd AS ON UPDATE TO revision
586    DO INSTEAD
587    UPDATE master_revision
588    SET
589        rev = NEW.rev,
590        "time" = NEW."time",
591        author = NEW.author,
592        message = NEW.message
593    WHERE
594        dbuser = session_user AND
595        rev = OLD.rev;
596
597CREATE RULE revision_del AS ON DELETE TO revision
598    DO INSTEAD
599    DELETE FROM master_revision
600    WHERE
601        dbuser = session_user AND
602        rev = OLD.rev;
603
604
605-- session view
606CREATE VIEW "session" AS
607    SELECT
608        sid,
609        authenticated,
610        var_name,
611        var_value
612    FROM master_session
613    WHERE
614        dbuser = session_user;
615
616CREATE RULE session_ins AS ON INSERT TO "session"
617    DO INSTEAD
618    INSERT INTO master_session VALUES (
619        session_user,
620        NEW.sid,
621        NEW.authenticated,
622        NEW.var_name,
623        NEW.var_value
624    );
625
626CREATE RULE session_upd AS ON UPDATE TO "session"
627    DO INSTEAD
628    UPDATE master_session
629    SET
630        sid = NEW.sid,
631        authenticated = NEW.authenticated,
632        var_name = NEW.var_name,
633        var_value = NEW.var_value
634    WHERE
635        dbuser = session_user AND
636        sid = OLD.sid AND
637        authenticated = OLD.authenticated AND
638        var_name = OLD.var_name;
639
640CREATE RULE session_del AS ON DELETE TO "session"
641    DO INSTEAD
642    DELETE FROM master_session
643    WHERE
644        dbuser = session_user AND
645        sid = OLD.sid AND
646        authenticated = OLD.authenticated AND
647        var_name = OLD.var_name;
648
649
650-- system view
651CREATE VIEW "system" AS
652    SELECT
653        name,
654        value
655    FROM master_system
656    WHERE
657        dbuser = session_user;
658
659CREATE RULE system_ins AS ON INSERT TO "system"
660    DO INSTEAD
661    INSERT INTO master_system VALUES (
662        session_user,
663        NEW.name,
664        NEW.value
665    );
666
667CREATE RULE system_upd AS ON UPDATE TO "system"
668    DO INSTEAD
669    UPDATE master_system
670    SET
671        name = NEW.name,
672        value = NEW.value
673    WHERE
674        dbuser = session_user AND
675        name = OLD.name;
676
677CREATE RULE system_del AS ON DELETE TO "system"
678    DO INSTEAD
679    DELETE FROM master_system
680    WHERE
681        dbuser = session_user AND
682        name = OLD.name;
683
684
685-- ticket view
686CREATE VIEW ticket AS
687    SELECT
688        id,
689        "type",
690        "time",
691        changetime,
692        component,
693        severity,
694        priority,
695        "owner",
696        reporter,
697        cc,
698        version,
699        milestone,
700        status,
701        resolution,
702        summary,
703        description,
704        keywords
705    FROM master_ticket
706    WHERE
707        dbuser = session_user;
708
709CREATE RULE ticket_ins AS ON INSERT TO ticket
710    DO INSTEAD
711    INSERT INTO master_ticket VALUES (
712        session_user,
713        DEFAULT,
714        NEW."type",
715        NEW."time",
716        NEW.changetime,
717        NEW.component,
718        NEW.severity,
719        NEW.priority,
720        NEW."owner",
721        NEW.reporter,
722        NEW.cc,
723        NEW.version,
724        NEW.milestone,
725        NEW.status,
726        NEW.resolution,
727        NEW.summary,
728        NEW.description,
729        NEW.keywords
730    );
731
732CREATE RULE ticket_upd AS ON UPDATE TO ticket
733    DO INSTEAD
734    UPDATE master_ticket
735    SET
736        id = NEW.id,
737        "type" = NEW."type",
738        "time" = NEW."time",
739        changetime = NEW.changetime,
740        component = NEW.component,
741        severity = NEW.severity,
742        priority = NEW.priority,
743        "owner" = NEW."owner",
744        reporter = NEW.reporter,
745        cc = NEW.cc,
746        version = NEW.version,
747        milestone = NEW.milestone,
748        status = NEW.status,
749        resolution = NEW.resolution,
750        summary = NEW.summary,
751        description = NEW.description,
752        keywords = NEW.keywords
753    WHERE
754        dbuser = session_user AND
755        id = OLD.id;
756
757CREATE RULE ticket_del AS ON DELETE TO ticket
758    DO INSTEAD
759    DELETE FROM master_ticket
760    WHERE
761        dbuser = session_user AND
762        id = OLD.id;
763
764
765-- ticket_change view
766CREATE VIEW ticket_change AS
767    SELECT
768        ticket,
769        "time",
770        author,
771        field,
772        oldvalue,
773        newvalue
774    FROM master_ticket_change
775    WHERE
776        dbuser = session_user;
777
778CREATE RULE ticket_change_ins AS ON INSERT TO ticket_change
779    DO INSTEAD
780    INSERT INTO master_ticket_change VALUES (
781        session_user,
782        NEW.ticket,
783        NEW."time",
784        NEW.author,
785        NEW.field,
786        NEW.oldvalue,
787        NEW.newvalue
788    );
789
790CREATE RULE ticket_change_upd AS ON UPDATE TO ticket_change
791    DO INSTEAD
792    UPDATE master_ticket_change
793    SET
794        ticket = NEW.ticket,
795        "time" = NEW."time",
796        author = NEW.author,
797        field = NEW.field,
798        oldvalue = NEW.oldvalue,
799        newvalue = NEW.newvalue
800    WHERE
801        dbuser = session_user AND
802        ticket = OLD.ticket AND
803        "time" = OLD."time" AND
804        field = OLD.field;
805
806CREATE RULE ticket_change_del AS ON DELETE TO ticket_change
807    DO INSTEAD
808    DELETE FROM master_ticket_change
809    WHERE
810        dbuser = session_user AND
811        ticket = OLD.ticket AND
812        "time" = OLD."time" AND
813        field = OLD.field;
814
815
816-- ticket_custom view
817CREATE VIEW ticket_custom AS
818    SELECT
819        ticket,
820        name,
821        value
822    FROM master_ticket_custom
823    WHERE
824        dbuser = session_user;
825
826CREATE RULE ticket_custom_ins AS ON INSERT TO ticket_custom
827    DO INSTEAD
828    INSERT INTO master_ticket_custom VALUES (
829        session_user,
830        NEW.ticket,
831        NEW.name,
832        NEW.value
833    );
834
835CREATE RULE ticket_custom_upd AS ON UPDATE TO ticket_custom
836    DO INSTEAD
837    UPDATE master_ticket_custom
838    SET
839        ticket = NEW.ticket,
840        name = NEW.name,
841        value = NEW.value
842    WHERE
843        dbuser = session_user AND
844        ticket = OLD.ticket AND
845        name = OLD.name;
846
847CREATE RULE ticket_custom_del AS ON DELETE TO ticket_custom
848    DO INSTEAD
849    DELETE FROM master_ticket_custom
850    WHERE
851        dbuser = session_user AND
852        ticket = OLD.ticket AND
853        name = OLD.name;
854
855
856-- version view
857CREATE VIEW version AS
858    SELECT
859        name,
860        "time",
861        description
862    FROM master_version
863    WHERE
864        dbuser = session_user;
865
866CREATE RULE version_ins AS ON INSERT TO version
867    DO INSTEAD
868    INSERT INTO master_version VALUES (
869        session_user,
870        NEW.name,
871        NEW."time",
872        NEW.description
873    );
874