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
CommitLineData
146ec120 1--
2-- Created by SQL::Translator::Producer::PostgreSQL
e7189506 3-- Created on Sun Apr 11 11:56:23 2010
146ec120 4--
5--
6-- Table: just_a_table
7--
8DROP TABLE "just_a_table" CASCADE;
9CREATE 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--
18DROP TABLE "mixin" CASCADE;
19CREATE TABLE "mixin" (
20 "id" serial NOT NULL,
21 "words" text NOT NULL,
22 PRIMARY KEY ("id")
23);
24
25--
26-- Table: _bar
27--
28DROP TABLE "_bar" CASCADE;
29CREATE TABLE "_bar" (
30 "id" integer NOT NULL,
31 "b" integer NOT NULL,
32 PRIMARY KEY ("id")
33);
34CREATE INDEX "_bar_idx_b" on "_bar" ("b");
35
36--
37-- Table: _foo
38--
39DROP TABLE "_foo" CASCADE;
40CREATE TABLE "_foo" (
41 "id" serial NOT NULL,
42 "a" integer,
43 PRIMARY KEY ("id")
44);
45CREATE INDEX "_foo_idx_a" on "_foo" ("a");
46
47--
48-- View: "foo"
49--
50DROP VIEW "foo";
51CREATE VIEW "foo" ( "id", "a" ) AS
52 SELECT _foo.id, a FROM _foo;
53
54CREATE 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
63CREATE 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
72CREATE 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
81CREATE RULE _foo_insert_rule AS
82 ON INSERT TO foo
83 DO INSTEAD (
84 SELECT foo_insert(NEW.a)
85 );
86
87
88CREATE RULE _foo_update_rule AS
89 ON UPDATE TO foo
90 DO INSTEAD (
91 SELECT foo_update(OLD.id, NEW.a)
92 );
93
94
95CREATE 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--
106DROP VIEW "bar";
107CREATE 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
110CREATE 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
121CREATE 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
132CREATE 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
143CREATE 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
150CREATE 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
157CREATE 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
169ALTER TABLE "_bar" ADD FOREIGN KEY ("b")
170 REFERENCES "just_a_table" ("id") ON DELETE CASCADE ON UPDATE CASCADE DEFERRABLE;
171
172ALTER TABLE "_foo" ADD FOREIGN KEY ("a")
173 REFERENCES "_bar" ("id") ON DELETE CASCADE ON UPDATE CASCADE DEFERRABLE;
174