]> ruin.nu Git - ndwebbie.git/commitdiff
Make relationship and planet_status an enum
authorMichael Andreen <harv@ruin.nu>
Sun, 30 Mar 2008 15:37:06 +0000 (17:37 +0200)
committerMichael Andreen <harv@ruin.nu>
Sun, 30 Mar 2008 15:37:06 +0000 (17:37 +0200)
NDWeb/Pages/Alliances.pm
NDWeb/Pages/CovOp.pm
NDWeb/Pages/TargetList.pm
database/enums.sql [new file with mode: 0644]

index 75635efd96b7f193d2509cdcdf0bb22a9f88a24e..9a4ec6196b3553734f8d6f039489fc2074d6f482 100644 (file)
@@ -46,7 +46,7 @@ sub render_body {
                $DBH->begin_work;
                if (param('crelationship')){
                        my $value = escapeHTML(param('relationship'));
-                       if ($DBH->do(q{UPDATE alliances SET relationship = NULLIF(?,'') WHERE id =?}
+                       if ($DBH->do(q{UPDATE alliances SET relationship = ? WHERE id =?}
                                        ,undef,$value,$alliance->{id})){
                                $alliance->{relationship} = $value;
                                log_message $ND::UID,"HC set alliance: $alliance->{id} relationship: $value";
index cc2688615274b836d42481228568a284aa1e9670..4654eee0d47f911f24969c569f2bea8be501dec6 100644 (file)
@@ -42,7 +42,7 @@ sub render_body {
 
        return $self->noAccess unless $self->isMember;
 
-       my $show = q{AND ((planet_status IS NULL OR NOT planet_status IN ('Friendly','NAP')) AND  (relationship IS NULL OR NOT relationship IN ('Friendly','NAP')))};
+       my $show = q{AND (NOT planet_status IN ('Friendly','NAP')) AND  (NOT relationship IN ('Friendly','NAP'))};
        $show = '' if defined param('show') && param('show') eq 'all';
        if (defined param('covop') && param('covop') =~ /^(\d+)$/){
                my $update = $DBH->prepare('UPDATE covop_targets SET covop_by = ?, last_covop = tick() WHERE planet = ? ');
index f321a927268b4b48db1b0bdf2654695405de6a7d..97c0be4fdcfcb9594d60a9d611e81fde13678f33 100644 (file)
@@ -55,7 +55,7 @@ FROM current_planet_stats p
        JOIN (SELECT g.x,g.y, sum(p.value) AS nfvalue
        FROM galaxies g join current_planet_stats p on g.x = p.x AND g.y = p.y 
        WHERE g.tick = (SELECT max(tick) from galaxies)
-               AND ((planet_status IS NULL OR NOT planet_status IN ('Friendly','NAP')) AND  (relationship IS NULL OR NOT relationship IN ('Friendly','NAP'))) 
+               AND ((NOT planet_status IN ('Friendly','NAP')) AND  (NOT relationship IN ('Friendly','NAP'))) 
        GROUP BY g.x,g.y
        ) g ON p.x = g.x AND p.y = g.y
        JOIN current_planet_stats pa ON pa.x = g.x AND pa.y = g.y
diff --git a/database/enums.sql b/database/enums.sql
new file mode 100644 (file)
index 0000000..31223f7
--- /dev/null
@@ -0,0 +1,52 @@
+CREATE TYPE ead_status AS ENUM ('','NAP','Friendly','Hostile');
+
+DROP VIEW current_planet_stats_full;
+
+DROP VIEW current_planet_stats;
+
+ALTER TABLE planets ALTER COLUMN planet_status TYPE ead_status USING planet_status::ead_status;
+ALTER TABLE planets ALTER COLUMN planet_status SET DEFAULT ''::ead_status;
+UPDATE planets SET planet_status = '' WHERE planet_status IS NULL;
+ALTER TABLE planets ALTER COLUMN planet_status SET NOT NULL;
+
+ALTER TABLE alliances ALTER COLUMN relationship TYPE ead_status USING relationship::ead_status;
+ALTER TABLE alliances ALTER COLUMN relationship SET DEFAULT ''::ead_status;
+UPDATE alliances SET relationship = '' WHERE relationship IS NULL;
+ALTER TABLE alliances ALTER COLUMN relationship SET NOT NULL;
+
+
+CREATE VIEW current_planet_stats AS
+    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)));
+
+
+CREATE VIEW current_planet_stats_full AS
+    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)));
+
+
+CREATE OR REPLACE FUNCTION find_alliance_id(character varying) RETURNS integer
+    AS $_$
+my ($name) = @_;
+my $query = spi_prepare('SELECT id FROM alliances WHERE name=$1','varchar');
+my $rv = spi_exec_prepared($query,$name);
+my $status = $rv->{status};
+my $nrows = $rv->{processed};
+my $id;
+if ($nrows == 1){
+       $id = $rv->{rows}[0]->{id};
+}
+else {
+       $rv = spi_exec_query("SELECT nextval('public.alliances_id_seq') AS id");
+       if ($rv->{processed} != 1){
+               return;
+       }
+       $id = $rv->{rows}[0]->{id};
+       my $query = spi_prepare('INSERT INTO alliances(id,name) VALUES($1,$2)','int4','varchar');
+       $rv = spi_exec_prepared($query,$id,$name);
+       spi_freeplan($query);
+       if (rv->{status} != SPI_OK_INSERT){
+               return;
+       }
+}
+return $id;
+$_$
+    LANGUAGE plperl;