a9d68b547bb89fe0a7a70ee00de7150cf9af44f9
[dbsrgits/DBIx-Class-ResultSource-MultipleTableInheritance.git] / t / sql / Cafe-0.1-PostgreSQL.sql
1 -- 
2 -- Created by SQL::Translator::Producer::PostgreSQL
3 -- Created on Sun Jul 11 20:05:37 2010
4 -- 
5 --
6 -- Table: _coffee
7 --
8 DROP TABLE "_coffee" CASCADE;
9 CREATE TABLE "_coffee" (
10   "id" serial NOT NULL,
11   "flavor" text DEFAULT 'good' NOT NULL,
12   PRIMARY KEY ("id")
13 );
14
15 --
16 -- Table: _sumatra
17 --
18 DROP TABLE "_sumatra" CASCADE;
19 CREATE TABLE "_sumatra" (
20   "id" integer NOT NULL,
21   "aroma" text NOT NULL,
22   PRIMARY KEY ("id")
23 );
24
25 --
26 -- Table: sugar
27 --
28 DROP TABLE "sugar" CASCADE;
29 CREATE TABLE "sugar" (
30   "id" serial NOT NULL,
31   "sweetness" integer NOT NULL,
32   PRIMARY KEY ("id")
33 );
34
35 --
36 -- View: "coffee"
37 --
38 DROP VIEW IF EXISTS "coffee";
39 CREATE VIEW "coffee" ( "id", "flavor" ) AS
40     SELECT _coffee.id, flavor FROM _coffee;
41
42 CREATE OR REPLACE FUNCTION coffee_insert
43   (_flavor TEXT)
44   RETURNS VOID AS $function$
45   BEGIN
46     INSERT INTO _coffee ( flavor) VALUES ( _flavor );
47   END;
48 $function$ LANGUAGE plpgsql;
49
50
51 CREATE OR REPLACE FUNCTION coffee_update
52   (_id INTEGER, _flavor TEXT)
53   RETURNS VOID AS $function$
54   BEGIN
55     UPDATE _coffee SET flavor = _flavor WHERE ( id = _id );
56   END;
57 $function$ LANGUAGE plpgsql;
58
59
60 CREATE OR REPLACE FUNCTION coffee_delete
61   (_id INTEGER)
62   RETURNS VOID AS $function$
63   BEGIN
64     DELETE FROM _coffee WHERE ( id = _id );
65   END;
66 $function$ LANGUAGE plpgsql;
67
68
69 CREATE RULE _coffee_insert_rule AS
70   ON INSERT TO coffee
71   DO INSTEAD (
72     SELECT coffee_insert(NEW.flavor)
73   );
74
75
76 CREATE RULE _coffee_update_rule AS
77   ON UPDATE TO coffee
78   DO INSTEAD (
79     SELECT coffee_update(OLD.id, NEW.flavor)
80   );
81
82
83 CREATE RULE _coffee_delete_rule AS
84   ON DELETE TO coffee
85   DO INSTEAD (
86     SELECT coffee_delete(OLD.id)
87   );
88
89 ;
90
91 --
92 -- View: "sumatra"
93 --
94 DROP VIEW IF EXISTS "sumatra";
95 CREATE VIEW "sumatra" ( "id", "flavor", "sweetness", "aroma" ) AS
96     SELECT _sumatra.id, aroma, sweetness, flavor FROM _sumatra _sumatra JOIN sugar sugar ON sugar.id = _sumatra.id JOIN coffee coffee ON coffee.id = _sumatra.id;
97
98 CREATE OR REPLACE FUNCTION sumatra_insert
99   (_aroma TEXT, _sweetness INTEGER, _flavor TEXT)
100   RETURNS VOID AS $function$
101   BEGIN
102     INSERT INTO coffee ( flavor) VALUES ( _flavor );
103     INSERT INTO _sumatra ( aroma, id) VALUES ( _aroma, currval('_coffee_id_seq') );
104     INSERT INTO sugar ( id, sweetness) VALUES ( currval('_coffee_id_seq'), _sweetness );
105   END;
106 $function$ LANGUAGE plpgsql;
107
108
109 CREATE OR REPLACE FUNCTION sumatra_update
110   (_id INTEGER, _aroma TEXT, _sweetness INTEGER, _flavor TEXT)
111   RETURNS VOID AS $function$
112   BEGIN
113     UPDATE _sumatra SET aroma = _aroma WHERE ( id = _id );
114     UPDATE sugar SET sweetness = _sweetness WHERE ( id = _id );
115     UPDATE coffee SET flavor = _flavor WHERE ( id = _id );
116   END;
117 $function$ LANGUAGE plpgsql;
118
119
120 CREATE OR REPLACE FUNCTION sumatra_delete
121   (_id INTEGER)
122   RETURNS VOID AS $function$
123   BEGIN
124     DELETE FROM _sumatra WHERE ( id = _id );
125     DELETE FROM sugar WHERE ( id = _id );
126     DELETE FROM coffee WHERE ( id = _id );
127   END;
128 $function$ LANGUAGE plpgsql;
129
130
131 CREATE RULE _sumatra_insert_rule AS
132   ON INSERT TO sumatra
133   DO INSTEAD (
134     SELECT sumatra_insert(NEW.aroma, NEW.sweetness, NEW.flavor)
135   );
136
137
138 CREATE RULE _sumatra_update_rule AS
139   ON UPDATE TO sumatra
140   DO INSTEAD (
141     SELECT sumatra_update(OLD.id, NEW.aroma, NEW.sweetness, NEW.flavor)
142   );
143
144
145 CREATE RULE _sumatra_delete_rule AS
146   ON DELETE TO sumatra
147   DO INSTEAD (
148     SELECT sumatra_delete(OLD.id)
149   );
150
151 ;
152