]> ruin.nu Git - ndwebbie.git/blob - database/functions/find_planet_id.sql
Updates for round 100
[ndwebbie.git] / database / functions / find_planet_id.sql
1 CREATE OR REPLACE FUNCTION find_planet_id(_id text, _ruler text, _planet text, _race text) RETURNS integer
2     AS $_$
3 DECLARE
4         p RECORD;
5         planet_id INTEGER;
6         thread INTEGER;
7 BEGIN
8         SELECT pid, ftid, race, ruler, planet INTO p FROM planets WHERE id = _id;
9         IF FOUND THEN
10                 IF _race <> p.race OR _planet <> p.planet OR _ruler <> p.ruler THEN
11                         UPDATE planets SET race = _race, planet = _planet, ruler = _ruler WHERE pid = p.pid;
12                         UPDATE forum_threads SET subject = escape_html(_ruler) || ' OF ' || escape_html(_planet)
13                                 WHERE ftid = p.ftid;
14                         INSERT INTO forum_posts (ftid, uid, message) VALUES(p.ftid, -3, 'Planet changed data from ('
15                                 || escape_html(p.ruler) || ', ' || escape_html(p.planet) || ', ' || p.race || ') to ('
16                                 || escape_html(_ruler) || ', ' || escape_html(_planet) || ', ' || _race || ').');
17                 END IF;
18                 planet_id := p.pid;
19         ELSE
20                 INSERT INTO forum_threads (fbid,uid,subject) VALUES(-2, -3,
21                                 escape_html(_ruler) || ' OF ' || escape_html(_planet))
22                         RETURNING ftid INTO thread;
23                 INSERT INTO planets(id, ruler,planet,race,ftid) VALUES(_id, _ruler,_planet,_race,thread)
24                         RETURNING pid INTO planet_id;
25         END IF;
26         RETURN planet_id;
27 END;
28 $_$
29     LANGUAGE plpgsql;
30