]> ruin.nu Git - ndwebbie.git/blob - database/triggers.sql
9e9fd5649ea8efe76ec9a4fbd0f5a2830db23786
[ndwebbie.git] / database / triggers.sql
1 /* Some generic cleanup */
2
3 ALTER TABLE forum_posts ALTER textsearch SET NOT NULL;
4
5 DROP FUNCTION IF EXISTS add_intel(integer,integer,integer,integer,integer,integer,integer,integer,integer,character varying,integer);
6 DROP FUNCTION IF EXISTS add_intel2(integer, integer, integer, integer, integer, integer, integer, integer, character varying, character varying);
7 DROP FUNCTION IF EXISTS add_intel2(integer, integer, integer, integer, integer, integer, integer, integer, integer, character varying, character varying);
8 DROP FUNCTION IF EXISTS add_intel4(tick integer, eta integer, x1 integer, y1 integer, z1 integer, x2 integer, y2 integer, z2 integer, amount integer, mission character varying, uid integer);
9 DROP FUNCTION IF EXISTS calc_rank(integer);
10 DROP FUNCTION IF EXISTS calc_rank3(integer);
11 DROP FUNCTION IF EXISTS calculate_rankings(integer);
12 DROP FUNCTION IF EXISTS covop_alert(integer, integer, governments, integer);
13 DROP FUNCTION IF EXISTS covop_alert(bigint, integer, governments, integer);
14 DROP FUNCTION IF EXISTS max_bank_hack(integer,integer,integer,integer,integer);
15 DROP FUNCTION IF EXISTS max_bank_hack(bigint,bigint,bigint,integer,integer);
16 DROP FUNCTION IF EXISTS populate_ticks();
17
18
19 /* Updating old triggers */
20 ALTER TABLE users DROP COLUMN last_forum_visit;
21
22 CREATE OR REPLACE FUNCTION update_user_planet() RETURNS trigger AS $_X$
23 BEGIN
24         IF COALESCE(NEW.planet <> OLD.planet,TRUE) OR NEW.username <> OLD.username THEN
25                 UPDATE planets SET nick = NULL WHERE id = OLD.planet;
26                 UPDATE planets SET nick = NEW.username WHERE id = NEW.planet;
27         END IF;
28
29         IF COALESCE(NEW.planet <> OLD.planet,TRUE)
30                         AND (SELECT TRUE FROM groupmembers WHERE gid = 2 AND uid = NEW.uid) THEN
31                 UPDATE planets SET alliance_id = NULL WHERE id = OLD.planet;
32                 UPDATE planets SET alliance_id = 1 WHERE id = NEW.planet;
33         END IF;
34         RETURN NEW;
35 END;
36 $_X$ LANGUAGE plpgsql;
37
38 ALTER TABLE users ALTER ftid SET NOT NULL;
39
40 CREATE OR REPLACE FUNCTION add_user() RETURNS trigger
41     AS $_X$
42 DECLARE
43         thread INTEGER;
44 BEGIN
45         INSERT INTO forum_threads (fbid,subject,uid)
46                 VALUES(-1,NEW.uid || ': ' || NEW.username,-3) RETURNING ftid
47                 INTO STRICT thread;
48         NEW.ftid = thread;
49         RETURN NEW;
50 END;
51 $_X$ LANGUAGE plpgsql;
52
53 CREATE OR REPLACE FUNCTION change_member() RETURNS trigger
54     AS $_X$
55 BEGIN
56         IF TG_OP = 'INSERT' THEN
57                 IF NEW.gid = 2 THEN
58                         UPDATE planets SET alliance_id = 1 WHERE
59                                 id = (SELECT planet FROM users WHERE uid = NEW.uid);
60                 END IF;
61         ELSIF TG_OP = 'DELETE' THEN
62                 IF OLD.gid = 2 THEN
63                         UPDATE planets SET alliance_id = NULL WHERE
64                                 id = (SELECT planet FROM users WHERE uid = OLD.uid);
65                 END IF;
66         END IF;
67
68         return NEW;
69 END;
70 $_X$ LANGUAGE plpgsql;
71
72 ALTER TABLE calls ALTER ftid SET NOT NULL;
73
74 CREATE OR REPLACE FUNCTION add_call() RETURNS trigger
75     AS $_X$
76 DECLARE
77         thread INTEGER;
78 BEGIN
79         INSERT INTO forum_threads (fbid,subject,uid)
80                 VALUES(-3,NEW.member || ': ' || NEW.landing_tick,-3) RETURNING ftid
81                 INTO STRICT thread;
82         NEW.ftid = thread;
83         RETURN NEW;
84 END;
85 $_X$ LANGUAGE plpgsql;