]> ruin.nu Git - ndwebbie.git/blob - database/scans.sql
oops, need to do things in the right order
[ndwebbie.git] / database / scans.sql
1 DELETE FROM fleets;
2 ALTER TABLE fleets ADD COLUMN sender INTEGER NOT NULL REFERENCES planets(id) ON UPDATE CASCADE ON DELETE CASCADE;
3
4 ALTER TABLE fleets DROP COLUMN fleet;
5
6 ALTER TABLE fleets ALTER COLUMN target DROP NOT NULL;
7
8 ALTER TABLE fleets ALTER COLUMN back DROP NOT NULL;
9
10 ALTER TABLE fleets ALTER COLUMN eta DROP NOT NULL;
11
12 ALTER TABLE fleets ADD COLUMN amount INTEGER;
13
14 ALTER TABLE fleets ADD COLUMN name TEXT NOT NULL;
15
16 ALTER TABLE fleets ADD COLUMN ingal BOOLEAN NOT NULL DEFAULT false;
17
18 ALTER TABLE fleets RENAME COLUMN landing_tick TO tick;
19
20 ALTER TABLE fleet_ships RENAME COLUMN fleet TO id;
21
22 ALTER TABLE scans DROP COLUMN scan;
23
24 ALTER TABLE scans DROP COLUMN type;
25
26 ALTER TABLE scans ADD COLUMN type TEXT;
27
28 ALTER TABLE scans ADD COLUMN uid INTEGER NOT NULL DEFAULT -1 REFERENCES users(uid) ON UPDATE RESTRICT ON DELETE RESTRICT;
29
30 ALTER TABLE scans ADD COLUMN groupscan BOOLEAN NOT NULL DEFAULT False;
31
32 ALTER TABLE scans ADD COLUMN parsed BOOLEAN NOT NULL DEFAULT False;
33
34 ALTER TABLE scans DROP CONSTRAINT scans_pkey;
35
36 ALTER TABLE scans ADD COLUMN id SERIAL PRIMARY KEY;
37
38 ALTER TABLE scans ADD UNIQUE (scan_id, tick, groupscan);
39
40 CREATE TABLE fleet_scans (
41         id INTEGER PRIMARY KEY REFERENCES fleets(id),
42         scan INTEGER NOT NULL REFERENCES scans(id)
43 ) WITHOUT OIDS;
44
45 CREATE OR REPLACE FUNCTION planetid(x integer, y integer, z integer, tick integer) RETURNS integer
46     AS $_$SELECT id FROM planet_stats WHERE x = $1 AND y = $2 AND z = $3 AND (tick >= $4  OR tick =( SELECT max(tick) FROM planet_stats)) ORDER BY tick ASC LIMIT 1$_$
47     LANGUAGE sql STABLE;
48
49 CREATE OR REPLACE FUNCTION planetcoords(IN id integer,IN tick integer, OUT x integer,OUT y integer,OUT z integer)
50     AS $_$SELECT x,y,z FROM planet_stats WHERE id = $1 AND (tick >= $2  OR tick =( SELECT max(tick) FROM planet_stats))  ORDER BY tick ASC LIMIT 1$_$
51     LANGUAGE sql STABLE;
52
53 CREATE TABLE planet_data_types (
54         id SERIAL PRIMARY KEY,
55         category TEXT NOT NULL,
56         name TEXT NOT NULL,
57         UNIQUE (category,name)
58 ) WITHOUT OIDS;
59
60 INSERT INTO planet_data_types (category,name) VALUES('roid','Metal');
61 INSERT INTO planet_data_types (category,name) VALUES('roid','Crystal');
62 INSERT INTO planet_data_types (category,name) VALUES('roid','Eonium');
63 INSERT INTO planet_data_types (category,name) VALUES('resource','Metal');
64 INSERT INTO planet_data_types (category,name) VALUES('resource','Crystal');
65 INSERT INTO planet_data_types (category,name) VALUES('resource','Eonium');
66 INSERT INTO planet_data_types (category,name) VALUES('tech','Space Travel');
67 INSERT INTO planet_data_types (category,name) VALUES('tech','Infrastructure');
68 INSERT INTO planet_data_types (category,name) VALUES('tech','Hulls');
69 INSERT INTO planet_data_types (category,name) VALUES('tech','Waves');
70 INSERT INTO planet_data_types (category,name) VALUES('tech','Core Extraction');
71 INSERT INTO planet_data_types (category,name) VALUES('tech','Covert Ops');
72 INSERT INTO planet_data_types (category,name) VALUES('tech','Asteroid Mining');
73 INSERT INTO planet_data_types (category,name) VALUES('struc','Light Factory');
74 INSERT INTO planet_data_types (category,name) VALUES('struc','Medium Factory');
75 INSERT INTO planet_data_types (category,name) VALUES('struc','Heavy Factory');
76 INSERT INTO planet_data_types (category,name) VALUES('struc','Wave Amplifier');
77 INSERT INTO planet_data_types (category,name) VALUES('struc','Wave Distorter');
78 INSERT INTO planet_data_types (category,name) VALUES('struc','Metal Refinery');
79 INSERT INTO planet_data_types (category,name) VALUES('struc','Crystal Refinery');
80 INSERT INTO planet_data_types (category,name) VALUES('struc','Eonium Refinery');
81 INSERT INTO planet_data_types (category,name) VALUES('struc','Research Laboratory');
82 INSERT INTO planet_data_types (category,name) VALUES('struc','Finance Centre');
83 INSERT INTO planet_data_types (category,name) VALUES('struc','Security Centre');
84
85 CREATE TABLE planet_data (
86         id INTEGER NOT NULL REFERENCES planets(id),
87         scan INTEGER NOT NULL REFERENCES scans(id),
88         tick INTEGER NOT NULL,
89         rid INTEGER NOT NULL REFERENCES planet_data_types(id),
90         amount INTEGER NOT NULL,
91         PRIMARY KEY(rid,scan)
92 ) WITHOUT OIDS;
93
94 DROP TABLE intel;
95
96 CREATE INDEX fleets_tick_index ON fleets (tick);
97 CREATE INDEX fleets_target_index ON fleets (target);
98 CREATE INDEX fleets_sender_index ON fleets (sender);
99 CREATE INDEX fleets_mission_index ON fleets (mission);
100 CREATE INDEX fleets_ingal_index ON fleets (ingal);
101
102 DROP TABLE covop_targets ;
103
104 CREATE OR REPLACE VIEW planet_scans AS
105 SELECT DISTINCT ON (planet) id,planet,tick,metal,crystal,eonium,metal_roids,crystal_roids,eonium_roids
106 FROM scans s
107         JOIN (SELECT scan AS id,amount AS metal_roids FROM planet_data
108                 WHERE rid = 1) AS mr USING (id)
109         JOIN (SELECT scan AS id,amount AS crystal_roids FROM planet_data
110                 WHERE rid = 2) AS cr USING (id)
111         JOIN (SELECT scan AS id,amount AS eonium_roids FROM planet_data
112                 WHERE rid = 3) AS er USING (id)
113         JOIN (SELECT scan AS id,amount AS metal FROM planet_data
114                 WHERE rid = 4) AS m USING (id)
115         JOIN (SELECT scan AS id,amount AS crystal FROM planet_data
116                 WHERE rid = 5) AS c USING (id)
117         JOIN (SELECT scan AS id,amount AS eonium FROM planet_data
118                 WHERE rid = 6) AS e USING (id)
119 ORDER BY planet,tick DESC,id DESC;
120
121 CREATE OR REPLACE VIEW structure_scans AS
122 SELECT DISTINCT ON (planet) id,planet,tick, total,distorters,seccents
123 FROM scans s
124         JOIN (SELECT scan AS id, SUM(amount) AS total FROM planet_data
125                 WHERE rid >= 14 AND rid <= 24 GROUP BY scan) AS t USING (id)
126         JOIN (SELECT scan AS id,amount AS distorters FROM planet_data
127                 WHERE rid = 18) AS d USING (id)
128         JOIN (SELECT scan AS id,amount AS seccents FROM planet_data
129                 WHERE rid = 24) AS sc USING (id)
130 ORDER BY planet,tick DESC, id DESC;
131
132
133 CREATE INDEX planet_data_id_index ON planet_data (id);