improvements
This commit is contained in:
39
migrations/0002_triggers.sql
Normal file
39
migrations/0002_triggers.sql
Normal file
@@ -0,0 +1,39 @@
|
||||
-- delete room if both players are null
|
||||
CREATE OR REPLACE FUNCTION delete_room() RETURNS TRIGGER AS $$ BEGIN IF (
|
||||
SELECT player1_id IS NULL
|
||||
AND player2_id IS NULL
|
||||
FROM rooms
|
||||
WHERE code = OLD.room_code
|
||||
) THEN
|
||||
DELETE FROM rooms
|
||||
WHERE code = OLD.room_code;
|
||||
END IF;
|
||||
RETURN OLD;
|
||||
END;
|
||||
$$ LANGUAGE plpgsql;
|
||||
|
||||
CREATE TRIGGER delete_room_trigger
|
||||
AFTER DELETE ON players FOR EACH ROW EXECUTE FUNCTION delete_room();
|
||||
|
||||
|
||||
-- retain only 1000 recent abandoned players according to timestamp
|
||||
CREATE OR REPLACE FUNCTION delete_player() RETURNS TRIGGER AS $$ BEGIN IF (
|
||||
SELECT COUNT(*)
|
||||
FROM players
|
||||
WHERE abandoned = TRUE
|
||||
) > 10000 THEN
|
||||
DELETE FROM players
|
||||
WHERE id IN (
|
||||
SELECT id
|
||||
FROM players
|
||||
WHERE abandoned = TRUE
|
||||
ORDER BY time DESC OFFSET 10000
|
||||
);
|
||||
END IF;
|
||||
RETURN OLD;
|
||||
END;
|
||||
$$ LANGUAGE plpgsql;
|
||||
|
||||
CREATE TRIGGER delete_player_trigger
|
||||
AFTER
|
||||
INSERT ON players FOR EACH ROW EXECUTE FUNCTION delete_player();
|
Reference in New Issue
Block a user