Commit | Line | Data |
146ec120 |
1 | -- |
2 | -- Created by SQL::Translator::Producer::PostgreSQL |
c8e085ba |
3 | -- Created on Mon Jun 14 20:16:23 2010 |
146ec120 |
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 | -- |
3c9baea8 |
48 | -- View: "bar" |
146ec120 |
49 | -- |
c8e085ba |
50 | DROP VIEW IF EXISTS "bar"; |
3c9baea8 |
51 | CREATE VIEW "bar" ( "id", "a", "words", "b" ) AS |
52 | 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; |
146ec120 |
53 | |
3c9baea8 |
54 | CREATE OR REPLACE FUNCTION bar_insert |
55 | (_b INTEGER, _words TEXT, _a INTEGER) |
146ec120 |
56 | RETURNS VOID AS $function$ |
57 | BEGIN |
3c9baea8 |
58 | INSERT INTO foo ( a) VALUES ( _a ); |
59 | INSERT INTO _bar ( b, id) VALUES ( _b, currval('_foo_id_seq') ); |
60 | INSERT INTO mixin ( id, words) VALUES ( currval('_foo_id_seq'), _words ); |
146ec120 |
61 | END; |
62 | $function$ LANGUAGE plpgsql; |
63 | |
64 | |
3c9baea8 |
65 | CREATE OR REPLACE FUNCTION bar_update |
66 | (_id INTEGER, _b INTEGER, _words TEXT, _a INTEGER) |
146ec120 |
67 | RETURNS VOID AS $function$ |
68 | BEGIN |
3c9baea8 |
69 | UPDATE _bar SET b = _b WHERE ( id = _id ); |
70 | UPDATE mixin SET words = _words WHERE ( id = _id ); |
71 | UPDATE foo SET a = _a WHERE ( id = _id ); |
146ec120 |
72 | END; |
73 | $function$ LANGUAGE plpgsql; |
74 | |
75 | |
3c9baea8 |
76 | CREATE OR REPLACE FUNCTION bar_delete |
146ec120 |
77 | (_id INTEGER) |
78 | RETURNS VOID AS $function$ |
79 | BEGIN |
3c9baea8 |
80 | DELETE FROM _bar WHERE ( id = _id ); |
81 | DELETE FROM mixin WHERE ( id = _id ); |
82 | DELETE FROM foo WHERE ( id = _id ); |
146ec120 |
83 | END; |
84 | $function$ LANGUAGE plpgsql; |
85 | |
86 | |
3c9baea8 |
87 | CREATE RULE _bar_insert_rule AS |
88 | ON INSERT TO bar |
146ec120 |
89 | DO INSTEAD ( |
3c9baea8 |
90 | SELECT bar_insert(NEW.b, NEW.words, NEW.a) |
146ec120 |
91 | ); |
92 | |
93 | |
3c9baea8 |
94 | CREATE RULE _bar_update_rule AS |
95 | ON UPDATE TO bar |
146ec120 |
96 | DO INSTEAD ( |
3c9baea8 |
97 | SELECT bar_update(OLD.id, NEW.b, NEW.words, NEW.a) |
146ec120 |
98 | ); |
99 | |
100 | |
3c9baea8 |
101 | CREATE RULE _bar_delete_rule AS |
102 | ON DELETE TO bar |
146ec120 |
103 | DO INSTEAD ( |
3c9baea8 |
104 | SELECT bar_delete(OLD.id) |
146ec120 |
105 | ); |
106 | |
107 | ; |
108 | |
109 | -- |
3c9baea8 |
110 | -- View: "foo" |
146ec120 |
111 | -- |
c8e085ba |
112 | DROP VIEW IF EXISTS "foo"; |
3c9baea8 |
113 | CREATE VIEW "foo" ( "id", "a" ) AS |
114 | SELECT _foo.id, a FROM _foo; |
146ec120 |
115 | |
3c9baea8 |
116 | CREATE OR REPLACE FUNCTION foo_insert |
117 | (_a INTEGER) |
146ec120 |
118 | RETURNS VOID AS $function$ |
119 | BEGIN |
3c9baea8 |
120 | INSERT INTO _foo ( a) VALUES ( _a ); |
146ec120 |
121 | END; |
122 | $function$ LANGUAGE plpgsql; |
123 | |
124 | |
3c9baea8 |
125 | CREATE OR REPLACE FUNCTION foo_update |
126 | (_id INTEGER, _a INTEGER) |
146ec120 |
127 | RETURNS VOID AS $function$ |
128 | BEGIN |
3c9baea8 |
129 | UPDATE _foo SET a = _a WHERE ( id = _id ); |
146ec120 |
130 | END; |
131 | $function$ LANGUAGE plpgsql; |
132 | |
133 | |
3c9baea8 |
134 | CREATE OR REPLACE FUNCTION foo_delete |
146ec120 |
135 | (_id INTEGER) |
136 | RETURNS VOID AS $function$ |
137 | BEGIN |
3c9baea8 |
138 | DELETE FROM _foo WHERE ( id = _id ); |
146ec120 |
139 | END; |
140 | $function$ LANGUAGE plpgsql; |
141 | |
142 | |
3c9baea8 |
143 | CREATE RULE _foo_insert_rule AS |
144 | ON INSERT TO foo |
146ec120 |
145 | DO INSTEAD ( |
3c9baea8 |
146 | SELECT foo_insert(NEW.a) |
146ec120 |
147 | ); |
148 | |
149 | |
3c9baea8 |
150 | CREATE RULE _foo_update_rule AS |
151 | ON UPDATE TO foo |
146ec120 |
152 | DO INSTEAD ( |
3c9baea8 |
153 | SELECT foo_update(OLD.id, NEW.a) |
146ec120 |
154 | ); |
155 | |
156 | |
3c9baea8 |
157 | CREATE RULE _foo_delete_rule AS |
158 | ON DELETE TO foo |
146ec120 |
159 | DO INSTEAD ( |
3c9baea8 |
160 | SELECT foo_delete(OLD.id) |
146ec120 |
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 | |