Advertisement
Guest User

Untitled

a guest
Jan 17th, 2019
63
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. CREATE OR REPLACE FUNCTION generateMatches(tournament INT, basegroups INT) RETURNS VOID AS $$
  2. DECLARE
  3.     counter INTEGER := 0;
  4.     level INTEGER := 0;
  5.     identifier INTEGER := 1;
  6.     groupid INTEGER := 0;
  7.     teamrow RECORD;
  8.     grouperow RECORD;
  9.     groups_on_level INTEGER;
  10. BEGIN
  11.     groups_on_level := basegroups;
  12.     LOOP
  13.         LOOP
  14.             EXIT WHEN counter = groups_on_level;
  15.             INSERT INTO "Groups" (id_tournament, name, level)
  16.                 VALUES (tournament, identifier, level);
  17.             counter := counter + 1;
  18.             identifier := identifier + 1;
  19.         END LOOP;
  20.         EXIT WHEN groups_on_level = 1;
  21.         groups_on_level := groups_on_level / 2;
  22.         counter := 0;
  23.         level := level + 1;
  24.     END LOOP;
  25.    
  26.     counter := 1;
  27.     FOR teamrow IN
  28.         SELECT * FROM "Teams" WHERE id_tournament = tournament
  29.     LOOP
  30.         IF (counter > basegroups) THEN
  31.             counter := 1;
  32.         END IF;
  33.         groupid := (SELECT id FROM "Groups" WHERE name = counter AND id_tournament = tournament);
  34.         INSERT INTO "GroupElements" (id_team, id_group, position)
  35.             VALUES (teamrow.id, groupid, 0);
  36.         counter := counter + 1;
  37.     END LOOP;
  38.     FOR grouperow IN
  39.         SELECT x.id_team AS id_team1, y.id_team AS id_team2, g.id AS id_group
  40.             FROM "GroupElements" x CROSS JOIN "GroupElements" y INNER JOIN "Groups" g ON x.id_group = g.id
  41.             WHERE x.id_group = y.id_group AND x.id_team < y.id_team AND g.id_tournament = tournament
  42.     LOOP
  43.         INSERT INTO "Matches" (id_team1, id_team2, score1, score2, id_group)
  44.             VALUES (grouperow.id_team1, grouperow.id_team2, 0, 0, grouperow.id_group);
  45.     END LOOP;
  46.     FOR grouperow IN
  47.         SELECT * FROM "Groups" g WHERE g.id_tournament = tournament AND g.level != 0
  48.     LOOP
  49.         INSERT INTO "Matches" (score1, score2, id_group) VALUES (0, 0, grouperow.id);
  50.     END LOOP;
  51. END;
  52. $$ LANGUAGE plpgsql;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement