Add some subroutine docs. Must write another test so that I can understand all ins...
[dbsrgits/DBIx-Class-ResultSource-MultipleTableInheritance.git] / t / sql / MTITest-0.1-PostgreSQL.sql
1 -- 
2 -- Created by SQL::Translator::Producer::PostgreSQL
3 -- Created on Sun Apr 11 11:56:23 2010
4 -- 
5 --
6 -- Table: just_a_table
7 --
8 DROP TABLE "just_a_table" CASCADE;
9 CREATE TABLE "just_a_table" (
10   "id" serial NOT NULL,
11   "name" character varying(255) NOT NULL,
12   PRIMARY KEY ("id")
13 );
14
15 --
16 -- Table: mixin
17 --
18 DROP TABLE "mixin" CASCADE;
19 CREATE TABLE "mixin" (
20   "id" serial NOT NULL,
21   "words" text NOT NULL,
22   PRIMARY KEY ("id")
23 );
24
25 --
26 -- Table: _bar
27 --
28 DROP TABLE "_bar" CASCADE;
29 CREATE TABLE "_bar" (
30   "id" integer NOT NULL,
31   "b" integer NOT NULL,
32   PRIMARY KEY ("id")
33 );
34 CREATE INDEX "_bar_idx_b" on "_bar" ("b");
35
36 --
37 -- Table: _foo
38 --
39 DROP TABLE "_foo" CASCADE;
40 CREATE TABLE "_foo" (
41   "id" serial NOT NULL,
42   "a" integer,
43   PRIMARY KEY ("id")
44 );
45 CREATE INDEX "_foo_idx_a" on "_foo" ("a");
46
47 --
48 -- View: "foo"
49 --
50 DROP VIEW "foo";
51 CREATE VIEW "foo" ( "id", "a" ) AS
52     SELECT _foo.id, a FROM _foo;
53
54 CREATE OR REPLACE FUNCTION foo_insert
55   (_a INTEGER)
56   RETURNS VOID AS $function$
57   BEGIN
58     INSERT INTO _foo ( a) VALUES ( _a );
59   END;
60 $function$ LANGUAGE plpgsql;
61
62
63 CREATE OR REPLACE FUNCTION foo_update
64   (_id INTEGER, _a INTEGER)
65   RETURNS VOID AS $function$
66   BEGIN
67     UPDATE _foo SET a = _a WHERE ( id = _id );
68   END;
69 $function$ LANGUAGE plpgsql;
70
71
72 CREATE OR REPLACE FUNCTION foo_delete
73   (_id INTEGER)
74   RETURNS VOID AS $function$
75   BEGIN
76     DELETE FROM _foo WHERE ( id = _id );
77   END;
78 $function$ LANGUAGE plpgsql;
79
80
81 CREATE RULE _foo_insert_rule AS
82   ON INSERT TO foo
83   DO INSTEAD (
84     SELECT foo_insert(NEW.a)
85   );
86
87
88 CREATE RULE _foo_update_rule AS
89   ON UPDATE TO foo
90   DO INSTEAD (
91     SELECT foo_update(OLD.id, NEW.a)
92   );
93
94
95 CREATE RULE _foo_delete_rule AS
96   ON DELETE TO foo
97   DO INSTEAD (
98     SELECT foo_delete(OLD.id)
99   );
100
101 ;
102
103 --
104 -- View: "bar"
105 --
106 DROP VIEW "bar";
107 CREATE VIEW "bar" ( "id", "a", "words", "b" ) AS
108     SELECT _bar.id, b, words, a FROM _bar _bar JOIN mixin mixin ON mixin.id = _bar.id JOIN foo foo ON foo.id = _bar.id;
109
110 CREATE OR REPLACE FUNCTION bar_insert
111   (_b INTEGER, _words TEXT, _a INTEGER)
112   RETURNS VOID AS $function$
113   BEGIN
114     INSERT INTO foo ( a) VALUES ( _a );
115     INSERT INTO _bar ( b, id) VALUES ( _b, currval('_foo_id_seq') );
116     INSERT INTO mixin ( id, words) VALUES ( currval('_foo_id_seq'), _words );
117   END;
118 $function$ LANGUAGE plpgsql;
119
120
121 CREATE OR REPLACE FUNCTION bar_update
122   (_id INTEGER, _b INTEGER, _words TEXT, _a INTEGER)
123   RETURNS VOID AS $function$
124   BEGIN
125     UPDATE _bar SET b = _b WHERE ( id = _id );
126     UPDATE mixin SET words = _words WHERE ( id = _id );
127     UPDATE foo SET a = _a WHERE ( id = _id );
128   END;
129 $function$ LANGUAGE plpgsql;
130
131
132 CREATE OR REPLACE FUNCTION bar_delete
133   (_id INTEGER)
134   RETURNS VOID AS $function$
135   BEGIN
136     DELETE FROM _bar WHERE ( id = _id );
137     DELETE FROM mixin WHERE ( id = _id );
138     DELETE FROM foo WHERE ( id = _id );
139   END;
140 $function$ LANGUAGE plpgsql;
141
142
143 CREATE RULE _bar_insert_rule AS
144   ON INSERT TO bar
145   DO INSTEAD (
146     SELECT bar_insert(NEW.b, NEW.words, NEW.a)
147   );
148
149
150 CREATE RULE _bar_update_rule AS
151   ON UPDATE TO bar
152   DO INSTEAD (
153     SELECT bar_update(OLD.id, NEW.b, NEW.words, NEW.a)
154   );
155
156
157 CREATE RULE _bar_delete_rule AS
158   ON DELETE TO bar
159   DO INSTEAD (
160     SELECT bar_delete(OLD.id)
161   );
162
163 ;
164
165 --
166 -- Foreign Key Definitions
167 --
168
169 ALTER TABLE "_bar" ADD FOREIGN KEY ("b")
170   REFERENCES "just_a_table" ("id") ON DELETE CASCADE ON UPDATE CASCADE DEFERRABLE;
171
172 ALTER TABLE "_foo" ADD FOREIGN KEY ("a")
173   REFERENCES "_bar" ("id") ON DELETE CASCADE ON UPDATE CASCADE DEFERRABLE;
174