]> ruin.nu Git - ndwebbie.git/blob - database/noperl.sql
f8821343a14e18ecdb26a00951577fb12a09f6a2
[ndwebbie.git] / database / noperl.sql
1 CREATE OR REPLACE FUNCTION find_planet_id(_ruler text, _planet text, _race race) RETURNS integer
2     AS $_$
3 DECLARE
4         p RECORD;
5         pid INTEGER;
6         thread INTEGER;
7 BEGIN
8         SELECT id, race INTO p FROM planets WHERE ruler = _ruler AND planet = _planet;
9         IF FOUND THEN
10                 IF _race <> p.race THEN
11                         UPDATE planets SET race = _race WHERE id = p.id;
12                 END IF;
13                 pid := p.id;
14         ELSE
15                 INSERT INTO forum_threads (fbid,subject,uid) VALUES(-2, _ruler || ' OF ' || _planet, -3)
16                         RETURNING ftid INTO thread;
17                 INSERT INTO planets(ruler,planet,race,ftid) VALUES(_ruler,_planet,_race,thread)
18                         RETURNING id INTO pid;
19         END IF;
20         RETURN pid;
21 END;
22 $_$
23     LANGUAGE plpgsql;
24
25 DROP FUNCTION findplanetid(character varying, character varying, character varying);
26
27 CREATE OR REPLACE FUNCTION find_alliance_id(alliance text) RETURNS integer
28     AS $_$
29 DECLARE
30         aid INTEGER;
31 BEGIN
32         SELECT id FROM INTO aid alliances WHERE name = alliance;
33         IF NOT FOUND THEN
34                 INSERT INTO alliances(name) VALUES($1)
35                         RETURNING id INTO aid;
36         END IF;
37         RETURN aid;
38 END;
39 $_$
40     LANGUAGE plpgsql;
41
42 DROP FUNCTION find_alliance_id(character varying);
43
44 CREATE OR REPLACE FUNCTION coords(x integer, y integer, z integer) RETURNS text
45     AS $_$
46 SELECT $1 || ':' || $2 || ':' || $3
47 $_$
48     LANGUAGE sql IMMUTABLE;