Piexplode

sp_CreateTournament - SingleElimComplete

Aug 12th, 2020 (edited)
1,433
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
MySQL 5.10 KB | None | 0 0
  1. IF (SELECT COUNT(1) FROM vw_ActiveSeasonRefs A WHERE A.SeasonName = VarSeasonName) = 0
  2. THEN
  3.     SELECT 'Invalid Season Name';
  4. ELSE
  5.     IF (SELECT COUNT(1)  
  6.           FROM t_SeasonTourData S
  7.           JOIN vw_ActiveSeasonRefs A ON S.SeasonReference = A.ActiveSeasonRef
  8.          WHERE A.SeasonName = VarSeasonName
  9.            AND S.Playoffs = 1) = 1
  10.     THEN
  11.         SELECT 'This season is complete. No new tournaments may be created until the next season is initalised.';
  12.     ELSEIF (SELECT MAX(S.SeasonTourNo)
  13.               FROM t_SeasonTourData S
  14.               JOIN vw_ActiveSeasonRefs A ON S.SeasonReference = A.ActiveSeasonRef
  15.              WHERE A.SeasonName = VarSeasonName) <= 2
  16.     THEN
  17.         IF (SELECT COUNT(1)
  18.               FROM t_SeasonTourData S
  19.               JOIN vw_ActiveSeasonRefs A ON S.SeasonReference = A.ActiveSeasonRef
  20.               JOIN t_Tournaments T       ON T.SeasonTourIdFk = S.SeasonTourIdPk
  21.              WHERE A.SeasonName = VarSeasonName
  22.                AND T.ProgressIdFk = 2) = 0
  23.         THEN
  24.             IF (SELECT COUNT(1) FROM t_Tiers WHERE TierName = VarTierName) = 1
  25.             THEN
  26.            INSERT INTO t_SeasonTourData (SeasonIdFk, SeasonNo, SeasonTourNo, StartDate, Playoffs, SeasonReference)
  27.                 SELECT D.SeasonIdFk,
  28.                        MAX(D.SeasonNo) AS SeasonNo,
  29.                        MAX(D.SeasonTourNo) + 1 AS SeasonTourNo,
  30.                        CUR_DATE() AS StartDate,
  31.                        0 AS Playoffs,
  32.                        D.SeasonReference
  33.                   FROM t_Seasons S
  34.                   JOIN t_SeasonTourData D ON S.SeasonIdPk = D.SeasonIdFk
  35.                  WHERE S.SeasonName = VarSeasonName
  36.               GROUP BY D.SeasonIdFk, D.SeasonReference;
  37.      
  38.            INSERT INTO t_Tournaments (TierIdFk, TourStructureIdFk, SeasonTourIdFk)
  39.                 SELECT IFNULL(SeasonTierId,TierIdPk) AS TierIdFk,
  40.                        1 AS TourStructureIdFk,
  41.                        MAX(SeasonTourIdPk) AS SeasonTourIdFk
  42.                   FROM t_Seasons S
  43.                   JOIN t_SeasonTourData D ON S.SeasonIdPk = D.SeasonIdFk
  44.             CROSS JOIN t_Tiers T
  45.                  WHERE S.SeasonName = VarSeasonName
  46.                    AND T.TierName = VarTierName
  47.               GROUP BY IFNULL(SeasonTierId,TierIdPk);    
  48.             ELSE
  49.                 SELECT 'Invalid Tier Name' AS ErrorMessage;
  50.             END IF;
  51.         END IF;
  52.        
  53.         CREATE TEMPORARY TABLE tt_SetIds (SetId INT);
  54.  
  55.         INSERT INTO tt_SetIds (SetId)
  56.         WITH RECURSIVE cte_SetIds AS
  57.            (SELECT 1 AS SetId
  58.              UNION ALL
  59.             SELECT SetId + 1
  60.               FROM cte_SetIds
  61.              WHERE SetId + 1 <= (SELECT POW(2,CEIL(LOG(2,(SELECT COUNT(1)
  62.                                                             FROM t_Signups S
  63.                                                             JOIN vw_ActiveSeasonRefs A ON S.SeasonRefFk = A.ActiveSeasonRef
  64.                                                            WHERE A.SeasonName = VarSeasonName)) - 0.5))))
  65.         SELECT SetId
  66.           FROM cte_SetIds;
  67.  
  68.         CREATE TEMPORARY TABLE tt_Players (SeedId INT PRIMARY KEY, PlayerId INT);
  69.        
  70.         INSERT INTO tt_Players (SeedID, PlayerId)
  71.         SELECT S.SetId,
  72.                IFNULL(P.PlayerId,1)
  73.           FROM tt_SetIds S
  74.     CROSS JOIN vw_SeasonTourData D
  75.           JOIN t_Tournaments T    ON T.SeasonTourIdFk = D.SeasonTourIdPk
  76.      LEFT JOIN vw_PrioritisedSignups_WithSubrandomisation P
  77.             ON S.SetID = P.SignupPriority
  78.            AND P.SeasonRef = D.SeasonReference
  79.            AND T.ProgressIdFk = 2
  80.          WHERE D.SeasonName = VarSeasonName;
  81.          
  82.    INSERT INTO t_Substitutes (TourIdFk, PlayerIdFk)
  83.         SELECT T.TourIdPk AS TourIdFk,
  84.                P.PlayerId
  85.           FROM vw_PrioritisedSignups P
  86.      LEFT JOIN tt_SetIds I         ON I.SetId = P.SignupPriority
  87.           JOIN vw_SeasonTourData D ON P.SeasonRef = D.SeasonReference
  88.           JOIN t_Tournaments T     ON T.SeasonTourIdFk = D.SeasonTourIdPk
  89.          WHERE I.SetId IS NULL
  90.            AND D.SeasonName = VarSeasonName;
  91.  
  92.    DELETE FROM tt_SetIds WHERE SetID = (SELECT MAX(SetId) FROM tt_SetIds);
  93.                                                          
  94.    INSERT INTO t_Sets (TourSetId, TourIdFk, Player1IdFk, Player2IdFk)
  95.         SELECT I.SetId AS TourSetId,
  96.                T.TourIdPk AS TourIdFk,
  97.                IFNULL(P1.PlayerId,1) AS Player1IdFk,
  98.                IFNULL(P2.PlayerId,1) AS Player2IdFk
  99.           FROM tt_SetIds I
  100.      LEFT JOIN tt_SetIds I2 ON I.SetID * 2 = I2.SetID + 1
  101.     CROSS JOIN t_Tournaments T
  102.           JOIN vw_SeasonTourData D ON T.SeasonTourIdFk = D.SeasonTourIdPk
  103.      LEFT JOIN tt_Players P1       ON I2.SetID IS NOT NULL AND P1.SeedId = I.SetId
  104.      LEFT JOIN tt_Players P2       ON I2.SetID IS NOT NULL AND P2.SeedId - 2 = (SELECT MAX(SetId) FROM tt_SetIds) -  I.SetId
  105.          WHERE T.ProgressIdFk = 2
  106.            AND D.SeasonName = VarSeasonName;
  107.  
  108.     INSERT INTO t_TourStages (TourIdFk, SetIdFk, Round, BracketIdFk, TourStructureIdFk)
  109.     SELECT TourIdFk,
  110.            SetIdPk,
  111.            FLOOR(LOG(2,(SELECT MAX(SetId) FROM tt_SetIds) + 1)) - FLOOR(LOG(2,(SELECT MAX(SetId) FROM tt_SetIds) + 1 - TourSetId)) AS Round,
  112.            1 AS BracketIdFk,
  113.            1 AS TourStructureIdFk
  114.       FROM t_Sets;
  115.     ELSE
  116.         SELECT 'Playoffs are not yet supported';
  117.     END IF;
  118.  
  119. END IF
Add Comment
Please, Sign In to add comment