1--
2-- Table structure for table categories
3--
4
5DROP TABLE "categories" CASCADE\g
6DROP SEQUENCE "categories_id_seq" CASCADE ;
7
8CREATE SEQUENCE "categories_id_seq" ;
9
10CREATE TABLE  "categories" (
11   "id" integer DEFAULT nextval('"categories_id_seq"') NOT NULL,
12   "category"   varchar(64) default NULL,
13   primary key ("id"),
14 unique ("category")
15)  ;
16
17--
18-- Table structure for table depends
19--
20
21DROP TABLE "depends" CASCADE\g
22CREATE TABLE  "depends" (
23   "port"   int NOT NULL,
24   "dependency"   int NOT NULL,
25   "type" character varying(10) NOT NULL,
26   primary key ("port", "dependency", "type")
27)  ;
28CREATE INDEX "depends_port_idx" ON "depends" USING btree ("port");
29CREATE INDEX "depends_dependency_idx" ON "depends" USING btree ("dependency");
30
31--
32-- Table structure for table events
33--
34
35DROP TABLE "events" CASCADE\g
36DROP SEQUENCE "events_id_seq" CASCADE ;
37
38CREATE SEQUENCE "events_id_seq" ;
39
40CREATE TABLE  "events" (
41   "id" integer DEFAULT nextval('"events_id_seq"') NOT NULL,
42   "port"   int NOT NULL,
43   "phase"   varchar(16),
44   "type"   varchar(32),
45   "name"   varchar(128),
46   "msg"   text,
47   "machine"   int NOT NULL,
48   primary key ("id")
49)  ;
50CREATE INDEX "events_port_idx" ON "events" USING btree ("port");
51
52--
53-- Table structure for table locks
54--
55
56DROP TABLE "locks" CASCADE\g
57DROP SEQUENCE "locks_id_seq" CASCADE ;
58
59CREATE SEQUENCE "locks_id_seq" ;
60
61CREATE TABLE  "locks" (
62   "id" integer DEFAULT nextval('"locks_id_seq"') NOT NULL,
63   "port"   int NOT NULL,
64   "machine"   int NOT NULL,
65   primary key ("id"),
66 unique ("port")
67)  ;
68
69--
70-- Table structure for table logs
71--
72
73DROP TABLE "logs" CASCADE\g
74DROP SEQUENCE "logs_id_seq" CASCADE ;
75
76CREATE SEQUENCE "logs_id_seq" ;
77
78CREATE TABLE  "logs" (
79   "id" integer DEFAULT nextval('"logs_id_seq"') NOT NULL,
80   "port"   int NOT NULL,
81   "data"   text,
82   primary key ("id"),
83   "unique"   KEY (port)
84)  ;
85
86--
87-- Table structure for table machines
88--
89
90DROP TABLE "machines" CASCADE\g
91DROP SEQUENCE "machines_id_seq" CASCADE ;
92
93CREATE SEQUENCE "machines_id_seq" ;
94
95CREATE TABLE  "machines" (
96   "id" integer DEFAULT nextval('"machines_id_seq"') NOT NULL,
97   "arch"   varchar(12) NOT NULL,
98   "name"   varchar(128) NOT NULL,
99   "maintainer"   varchar(128) NOT NULL,
100   "osversion"   varchar(16) NOT NULL,
101   "run"   int NOT NULL,
102   primary key ("id"),
103   "unique"   KEY (name)
104)  ;
105
106--
107-- Table structure for table port_categories
108--
109
110DROP TABLE "port_categories" CASCADE\g
111CREATE TABLE  "port_categories" (
112   "port"       int NOT NULL,
113   "category"   int NOT NULL
114)  ;
115CREATE INDEX "port_categories_port_idx" ON "port_categories" USING btree ("port");
116CREATE INDEX "port_categories_category_idx" ON "port_categories" USING btree ("category");
117
118--
119-- Table structure for table port_license_perms
120--
121
122DROP TABLE "port_license_perms" CASCADE\g
123CREATE TABLE  "port_license_perms" (
124   "port"       int NOT NULL,
125   "perm"   varchar(50) NOT NULL
126)  ;
127CREATE INDEX "port_lic_perm_port_idx" ON "port_license_perms" USING btree ("port");
128
129--
130-- Table structure for table ports
131--
132
133DROP TABLE "ports" CASCADE\g
134DROP SEQUENCE "ports_id_seq" CASCADE ;
135
136CREATE SEQUENCE "ports_id_seq" ;
137
138CREATE TABLE  "ports" (
139   "id" integer DEFAULT nextval('"ports_id_seq"') NOT NULL,
140   "run"   int NOT NULL,
141   "name"   varchar(128) NOT NULL,
142   "pkgname"   varchar(128) NOT NULL,
143   "version"   varchar(32) NOT NULL,
144   "description"   text,
145   "license"   varchar(64) default NULL,
146   "restricted" boolean NOT NULL default false,
147   "www"   text,
148   "status"   varchar(32) NOT NULL default 'untested',
149   "updated"   timestamp NOT NULL default CURRENT_TIMESTAMP ,
150   "flavor" character varying(128),
151   "default_flavor" boolean NOT NULL default false,
152   "cpe" varchar(200) default NULL,
153   primary key ("id")
154)  ;
155 CREATE OR REPLACE FUNCTION update_ports() RETURNS trigger AS '
156BEGIN
157    NEW.updated := CURRENT_TIMESTAMP;
158    RETURN NEW;
159END;
160' LANGUAGE 'plpgsql';
161
162-- before INSERT is handled by 'default CURRENT_TIMESTAMP'
163CREATE TRIGGER add_current_date_to_ports BEFORE UPDATE ON "ports" FOR EACH ROW EXECUTE PROCEDURE
164update_ports();
165/*!50001 DROP VIEW IF EXISTS ready_ports*/;
166CREATE INDEX "ports_run_idx" ON "ports" USING btree ("run");
167CREATE INDEX "ports_name_idx" ON "ports" USING btree ("name");
168
169--
170-- Temporary table structure for view ready_ports
171--
172
173DROP TABLE "ready_ports" CASCADE\g
174/*!50001 CREATE TABLE  "ready_ports" (
175   "id"   int,
176   "run"   int,
177   "name"   varchar(128),
178   "pkgname"   varchar(128),
179   "version"   varchar(32),
180   "description"   text,
181   "license"   varchar(64),
182   "www"   text,
183   "status"   varchar(32),
184   "updated"   timestamp,
185   "priority"   bigint
186) */;
187
188--
189-- Table structure for table runs
190--
191
192DROP TABLE "runs" CASCADE\g
193DROP SEQUENCE "runs_id_seq" CASCADE ;
194
195CREATE SEQUENCE "runs_id_seq" ;
196
197CREATE TABLE  "runs" (
198   "id" integer DEFAULT nextval('"runs_id_seq"') NOT NULL,
199   "osversion"   varchar(16) NOT NULL,
200   "arch"   varchar(11) NOT NULL,
201   "status"   varchar(40) NOT NULL default 'inactive',
202   "created"   timestamp NOT NULL default CURRENT_TIMESTAMP,
203   primary key ("id")
204);
205
206CREATE INDEX idx_runs_arch_osversion_status
207ON runs (arch, osversion, status);
208
209--
210-- Table structure for table distfiles
211--
212
213DROP TABLE "distfiles" CASCADE\g
214DROP SEQUENCE "distfiles_id_seq" CASCADE ;
215
216CREATE SEQUENCE "distfiles_id_seq" ;
217
218CREATE TABLE "distfiles"
219(
220    "id"       integer DEFAULT nextval('"distfiles_id_seq"') NOT NULL,
221    "port"     int                                           NOT NULL,
222    "filename" varchar(2048),
223    primary key ("id")
224);
225CREATE INDEX "distfiles_port_idx" ON "distfiles" USING btree ("port");
226
227--
228-- Table structure for table restricted_distfiles
229--
230
231DROP TABLE "restricted_distfiles" CASCADE\g
232DROP SEQUENCE "restricted_distfiles_id_seq" CASCADE ;
233
234CREATE SEQUENCE "restricted_distfiles_id_seq" ;
235
236CREATE TABLE "restricted_distfiles"
237(
238    "id"       integer DEFAULT nextval('"restricted_distfiles_id_seq"') NOT NULL,
239    "port"     int                                                      NOT NULL,
240    "filename" varchar(2048),
241    primary key ("id")
242);
243CREATE INDEX "restricted_distfiles_port_idx" ON "restricted_distfiles" USING btree ("port");
244
245--
246-- Table structure for table master_sites
247--
248
249DROP TABLE "master_sites" CASCADE\g
250DROP SEQUENCE "master_sites_id_seq" CASCADE;
251
252CREATE SEQUENCE "master_sites_id_seq";
253
254CREATE TABLE "master_sites"
255(
256    "id"   integer DEFAULT nextval('"master_sites_id_seq"') NOT NULL,
257    "port" int                                              NOT NULL,
258    "url"  text,
259    primary key ("id")
260);
261CREATE INDEX "master_sites_port_idx" ON "master_sites" USING btree ("port");
262
263--
264-- Table structure for table moved
265--
266
267DROP TABLE "moved" CASCADE\g
268DROP SEQUENCE "moved_id_seq" CASCADE;
269
270CREATE SEQUENCE "moved_id_seq";
271
272CREATE TABLE "moved"
273(
274    "id"       integer DEFAULT nextval('"moved_id_seq"') NOT NULL,
275    "run"      int                                       NOT NULL,
276    "port"     varchar(128)                              NOT NULL,
277    "moved_to" varchar(128)                              NULL,
278    "date"     timestamp NULL,
279    "why"      text                                      NULL,
280    primary key ("id")
281);
282CREATE INDEX "moved_port_idx" ON "moved" USING btree ("port");
283CREATE INDEX "moved_run_idx" ON "moved" USING btree ("run");
284
285create VIEW ready_ports AS
286    SELECT ports.id AS id,
287           ports.run AS run,
288           ports.name AS name,
289           ports.pkgname AS pkgname,
290           ports.version AS version,
291           ports.description AS description,
292           ports.license AS license,
293           ports.www AS www,
294           ports.status AS status,
295           ports.updated AS updated,
296          (SELECT count(0) AS COUNT
297           FROM depends
298           WHERE depends.dependency = ports.id) AS priority
299    FROM ports
300    LEFT JOIN locks on locks.port = ports.id
301    LEFT JOIN depends on depends.port = ports.id
302    WHERE ports.status = 'untested' and locks.id is null and
303          (depends.port is null or
304             not exists
305                  (SELECT depends.port AS port
306                   FROM depends WHERE ports.id = depends.port and not exists
307                     (SELECT ports.id as dep_id
308                      FROM ports
309                      WHERE ports.id = depends.dependency and (ports.status = 'pass' or ports.status = 'warn'))
310                      or
311    depends.dependency = locks.port))
312ORDER BY priority desc, ports.name asc;
313
314DROP TABLE "critical_ports" CASCADE\g
315DROP SEQUENCE "critical_ports_id_seq" CASCADE ;
316
317CREATE SEQUENCE "critical_ports_id_seq" ;
318
319CREATE TABLE  "critical_ports" (
320                             "id" integer DEFAULT nextval('"critical_ports_id_seq"') NOT NULL,
321                             "arch"   varchar(12) NOT NULL,
322                             "pkgname"   varchar(128) NOT NULL,
323                             primary key ("id")
324);
325
326alter table ports add foreign key (run) references runs(id);
327alter table port_categories add foreign key (category) references categories(id);
328alter table locks add foreign key (port) references ports(id);
329alter table distfiles add foreign key (port) references ports(id);
330alter table restricted_distfiles add foreign key (port) references ports(id);
331alter table master_sites add foreign key (port) references ports(id);
332alter table moved add foreign key (run) references runs(id);
333alter table events add foreign key ("machine") references machines("id");
334alter table events add foreign key ("port") references ports("id");
335ALTER TABLE "depends" ADD FOREIGN KEY ("port") REFERENCES "ports"("id");
336ALTER TABLE "depends" ADD FOREIGN KEY ("dependency") REFERENCES "ports"("id");
337ALTER TABLE "port_license_perms" ADD FOREIGN KEY ("port") REFERENCES "ports"("id");
338ALTER TABLE "logs" ADD FOREIGN KEY ("port") REFERENCES "ports"("id");
339
340create table mirrors
341(
342    id      integer default nextval('mirrors_id_seq'::regclass) not null primary key,
343    country varchar(4)                                          not null,
344    url     varchar(255)                                        not null
345);
346
347comment on table mirrors is 'Package mirrors';
348
349alter table mirrors
350    owner to pgsql;
351
352grant delete, insert, references, select, trigger, truncate, update on mirrors to magus;
353