]> ruin.nu Git - ndwebbie.git/blob - database/enums.sql
Make relationship and planet_status an enum
[ndwebbie.git] / database / enums.sql
1 CREATE TYPE ead_status AS ENUM ('','NAP','Friendly','Hostile');
2
3 DROP VIEW current_planet_stats_full;
4
5 DROP VIEW current_planet_stats;
6
7 ALTER TABLE planets ALTER COLUMN planet_status TYPE ead_status USING planet_status::ead_status;
8 ALTER TABLE planets ALTER COLUMN planet_status SET DEFAULT ''::ead_status;
9 UPDATE planets SET planet_status = '' WHERE planet_status IS NULL;
10 ALTER TABLE planets ALTER COLUMN planet_status SET NOT NULL;
11
12 ALTER TABLE alliances ALTER COLUMN relationship TYPE ead_status USING relationship::ead_status;
13 ALTER TABLE alliances ALTER COLUMN relationship SET DEFAULT ''::ead_status;
14 UPDATE alliances SET relationship = '' WHERE relationship IS NULL;
15 ALTER TABLE alliances ALTER COLUMN relationship SET NOT NULL;
16
17
18 CREATE VIEW current_planet_stats AS
19     SELECT p.id, p.nick, p.planet_status, p.hit_us, ps.x, ps.y, ps.z, p.ruler, p.planet, p.race, ps.size, ps.score, ps.value, ps.xp, ps.sizerank, ps.scorerank, ps.valuerank, ps.xprank, alliances.name AS alliance, alliances.relationship, p.alliance_id, p.channel, p.ftid FROM (((SELECT planet_stats.id, planet_stats.tick, planet_stats.x, planet_stats.y, planet_stats.z, planet_stats.size, planet_stats.score, planet_stats.value, planet_stats.xp, planet_stats.sizerank, planet_stats.scorerank, planet_stats.valuerank, planet_stats.xprank FROM planet_stats WHERE (planet_stats.tick = (SELECT max(planet_stats.tick) AS max FROM planet_stats))) ps NATURAL JOIN planets p) LEFT JOIN alliances ON ((alliances.id = p.alliance_id)));
20
21
22 CREATE VIEW current_planet_stats_full AS
23     SELECT p.id, p.nick, p.planet_status, p.hit_us, ps.x, ps.y, ps.z, p.ruler, p.planet, p.race, ps.size, ps.score, ps.value, ps.xp, ps.sizerank, ps.scorerank, ps.valuerank, ps.xprank, alliances.name AS alliance, alliances.relationship, p.alliance_id, p.channel, p.ftid, ps.size_gain, ps.score_gain, ps.value_gain, ps.xp_gain, ps.sizerank_gain, ps.scorerank_gain, ps.valuerank_gain, ps.xprank_gain, ps.size_gain_day, ps.score_gain_day, ps.value_gain_day, ps.xp_gain_day, ps.sizerank_gain_day, ps.scorerank_gain_day, ps.valuerank_gain_day, ps.xprank_gain_day FROM (((SELECT planet_stats.id, planet_stats.tick, planet_stats.x, planet_stats.y, planet_stats.z, planet_stats.size, planet_stats.score, planet_stats.value, planet_stats.xp, planet_stats.sizerank, planet_stats.scorerank, planet_stats.valuerank, planet_stats.xprank, planet_stats.size_gain, planet_stats.score_gain, planet_stats.value_gain, planet_stats.xp_gain, planet_stats.sizerank_gain, planet_stats.scorerank_gain, planet_stats.valuerank_gain, planet_stats.xprank_gain, planet_stats.size_gain_day, planet_stats.score_gain_day, planet_stats.value_gain_day, planet_stats.xp_gain_day, planet_stats.sizerank_gain_day, planet_stats.scorerank_gain_day, planet_stats.valuerank_gain_day, planet_stats.xprank_gain_day FROM planet_stats WHERE (planet_stats.tick = (SELECT max(planet_stats.tick) AS max FROM planet_stats))) ps NATURAL JOIN planets p) LEFT JOIN alliances ON ((alliances.id = p.alliance_id)));
24
25
26 CREATE OR REPLACE FUNCTION find_alliance_id(character varying) RETURNS integer
27     AS $_$
28 my ($name) = @_;
29 my $query = spi_prepare('SELECT id FROM alliances WHERE name=$1','varchar');
30 my $rv = spi_exec_prepared($query,$name);
31 my $status = $rv->{status};
32 my $nrows = $rv->{processed};
33 my $id;
34 if ($nrows == 1){
35         $id = $rv->{rows}[0]->{id};
36 }
37 else {
38         $rv = spi_exec_query("SELECT nextval('public.alliances_id_seq') AS id");
39         if ($rv->{processed} != 1){
40                 return;
41         }
42         $id = $rv->{rows}[0]->{id};
43         my $query = spi_prepare('INSERT INTO alliances(id,name) VALUES($1,$2)','int4','varchar');
44         $rv = spi_exec_prepared($query,$id,$name);
45         spi_freeplan($query);
46         if (rv->{status} != SPI_OK_INSERT){
47                 return;
48         }
49 }
50 return $id;
51 $_$
52     LANGUAGE plperl;