diff options
-rw-r--r-- | patton-bam.sql | 122 | ||||
-rw-r--r-- | patton-imp.sql | 124 |
2 files changed, 123 insertions, 123 deletions
diff --git a/patton-bam.sql b/patton-bam.sql index c0c09e3..ec5113e 100644 --- a/patton-bam.sql +++ b/patton-bam.sql @@ -1,80 +1,80 @@ -- ----------------------------------------------------------------------------------------------- -- --- Skrypt rozszerzający funkcjonalność Teamów o możliwość liczenia wyników turnieju metodą Pattona -- +-- Skrypt rozszerzajÄ…cy funkcjonalność TeamĂłw o moĹĽliwość liczenia wynikĂłw turnieju metodÄ… Pattona -- -- Autor: mkl -- -- ----------------------------------------------------------------------------------------------- -- -- Wersja dla turnieju liczonego BAMami -- -- Ta wersja jest fajna, bo: -- --- * działa -- --- * nie generuje całego mnóstwa pustych protokołów - część BAMowa liczy się normalnie BAMami -- +-- * dziaĹ‚a -- +-- * nie generuje caĹ‚ego mnĂłstwa pustych protokoĹ‚Ăłw - część BAMowa liczy siÄ™ normalnie BAMami -- -- Ta wersja jest niefajna, bo: -- --- * BAMy w Teamach liczą różnicę +/- 10 jako nieremis, więc w protokole jest 2:0/0:2, -- --- więc jest "po cichu" wyrównywane w jednym worze raze z wyrównaniami za saldo, -- --- więc generuje całe mnóstwo pytań "a panie sędzio, czemu tu jest 2:0, jak miało być 1:1" -- +-- * BAMy w Teamach liczÄ… różnicÄ™ +/- 10 jako nieremis, wiÄ™c w protokole jest 2:0/0:2, -- +-- wiÄ™c jest "po cichu" wyrĂłwnywane w jednym worze raze z wyrĂłwnaniami za saldo, -- +-- wiÄ™c generuje caĹ‚e mnĂłstwo pytaĹ„ "a panie sÄ™dzio, czemu tu jest 2:0, jak miaĹ‚o być 1:1" -- -- ----------------------------------------------------------------------------------------------- -- --- Instrukcja obsługi: -- --- * uruchomić w bazie turnieju skrypt co najmniej raz po założeniu turnieju, -- --- a przed wpisaniem pierwszego wyrównania "właściwego" (tj. faktycznej kary/wyrównania -- +-- Instrukcja obsĹ‚ugi: -- +-- * uruchomić w bazie turnieju skrypt co najmniej raz po zaĹ‚oĹĽeniu turnieju, -- +-- a przed wpisaniem pierwszego wyrĂłwnania "wĹ‚aĹ›ciwego" (tj. faktycznej kary/wyrĂłwnania -- -- z turnieju) -- --- * uruchomić kazdorazowo celem przeliczenia wyników -- +-- * uruchomić kazdorazowo celem przeliczenia wynikĂłw -- -- Potencjalne problemy: -- --- * wyrównania wklepywane z Teamów mogą sprawiać problemy (nie są dostatecznie przetestowane) -- --- * nie mam zielonego pojęcia, czy i jak powinny obchodzić mnie wyniki niezapisowe w rozdaniach -- --- Szczególne wymagania dla bazy danych: -- +-- * wyrĂłwnania wklepywane z TeamĂłw mogÄ… sprawiać problemy (nie sÄ… dostatecznie przetestowane) -- +-- * nie mam zielonego pojÄ™cia, czy i jak powinny obchodzić mnie wyniki niezapisowe w rozdaniach -- +-- SzczegĂłlne wymagania dla bazy danych: -- -- * uprawnienia do tworzenia tabel -- --- * uprawnienia do tworzenia widoków -- +-- * uprawnienia do tworzenia widokĂłw -- -- * uprawnienia do tworzenia i uruchamiania wyzwalaczy -- --- Kontrolnie tworzone są tabele/widoki z przedrostkiem patton_, pozwalające w razie czego ogarnąć,-- --- co się dzieje. -- +-- Kontrolnie tworzone sÄ… tabele/widoki z przedrostkiem patton_, pozwalajÄ…ce w razie czego ogarnąć,-- +-- co siÄ™ dzieje. -- -- ----------------------------------------------------------------------------------------------- -- --- Widok trzymający rozdania, w których są już oba zapisy - tylko te rozdania są dalej brane pod uwagę. +-- Widok trzymajÄ…cy rozdania, w ktĂłrych sÄ… juĹĽ oba zapisy - tylko te rozdania sÄ… dalej brane pod uwagÄ™. DROP VIEW IF EXISTS patton_boards; CREATE VIEW patton_boards AS SELECT rnd, segment, tabl, board FROM scores WHERE score IS NOT NULL GROUP BY rnd, segment, tabl, board HAVING COUNT(*) = 2; --- Tabela kompilująca wyniki rozdań, zestawiająca zapisy z obu stołów oraz wyrównania względem BAMów (dla rozdań, gdzie pada remis +/- 10) +-- Tabela kompilujÄ…ca wyniki rozdaĹ„, zestawiajÄ…ca zapisy z obu stoĹ‚Ăłw oraz wyrĂłwnania wzglÄ™dem BAMĂłw (dla rozdaĹ„, gdzie pada remis +/- 10) DROP TABLE IF EXISTS patton_scores; CREATE TABLE patton_scores ( - rnd INT, -- z bazy Teamów - segment INT, -- z bazy Teamów - tabl INT, -- z bazy Teamów - board INT, -- z bazy Teamów + rnd INT, -- z bazy TeamĂłw + segment INT, -- z bazy TeamĂłw + tabl INT, -- z bazy TeamĂłw + board INT, -- z bazy TeamĂłw open_score INT, -- score ze scores dla pokoju otwartego - closed_score INT, -- score ze scores dla pokoju zamkniętego + closed_score INT, -- score ze scores dla pokoju zamkniÄ™tego h_bam FLOAT, -- punkty BAMowe dla gospodarzy - v_bam FLOAT -- punkty BAMowe dla gości + v_bam FLOAT -- punkty BAMowe dla goĹ›ci ); --- Tabela kompilująca saldo druzyn w meczu +-- Tabela kompilujÄ…ca saldo druzyn w meczu DROP TABLE IF EXISTS patton_sums; CREATE TABLE patton_sums ( - rnd INT, -- z bazy Teamów - segment INT, -- z bazy Teamów - tabl INT, -- z bazy Teamów + rnd INT, -- z bazy TeamĂłw + segment INT, -- z bazy TeamĂłw + tabl INT, -- z bazy TeamĂłw h_saldo INT, -- saldo gospodarzy - v_saldo INT, -- saldo gości - max_saldo INT, -- większa z 2 powyższych wartości (maksymalne saldo) + v_saldo INT, -- saldo goĹ›ci + max_saldo INT, -- wiÄ™ksza z 2 powyĹĽszych wartoĹ›ci (maksymalne saldo) h_points FLOAT, -- punkty za saldo dla gospodarzy - v_points FLOAT -- punkty za saldo dla gości + v_points FLOAT -- punkty za saldo dla goĹ›ci ); --- Tabela kompilująca wyrównania (takie, by wynik meczu w VP był równy wynikowi wynikającemu z Pattona) +-- Tabela kompilujÄ…ca wyrĂłwnania (takie, by wynik meczu w VP byĹ‚ rĂłwny wynikowi wynikajÄ…cemu z Pattona) DROP TABLE IF EXISTS patton_adjustments; CREATE TABLE patton_adjustments ( - rnd INT, -- z bazy Teamów - segment INT, -- z bazy Teamów - tabl INT, -- z bazy Teamów - h_total FLOAT, -- wyrównanie dla gospodarzy - v_total FLOAT -- wyrównanie dla gości + rnd INT, -- z bazy TeamĂłw + segment INT, -- z bazy TeamĂłw + tabl INT, -- z bazy TeamĂłw + h_total FLOAT, -- wyrĂłwnanie dla gospodarzy + v_total FLOAT -- wyrĂłwnanie dla goĹ›ci ); --- Tabela zapamiętująca wszelkie "ręczne" zmiany na kolumnach corrv i corrh tabeli matches - więc zwykłe turniejowe wyrównania. --- Zapamiętujemy celem nałożenia na wyrównania wynikające z wyniku meczu Pattonem. +-- Tabela zapamiÄ™tujÄ…ca wszelkie "rÄ™czne" zmiany na kolumnach corrv i corrh tabeli matches - wiÄ™c zwykĹ‚e turniejowe wyrĂłwnania. +-- ZapamiÄ™tujemy celem naĹ‚oĹĽenia na wyrĂłwnania wynikajÄ…ce z wyniku meczu Pattonem. CREATE TABLE IF NOT EXISTS patton_external_adjustments ( - rnd INT, -- z bazy Teamów - tabl INT, -- z bazy Teamów - h_adj FLOAT, -- wyrównanie dla gospodarzy - v_adj FLOAT, -- wyrównanie dla gości + rnd INT, -- z bazy TeamĂłw + tabl INT, -- z bazy TeamĂłw + h_adj FLOAT, -- wyrĂłwnanie dla gospodarzy + v_adj FLOAT, -- wyrĂłwnanie dla goĹ›ci PRIMARY KEY (rnd, tabl) ); @@ -83,12 +83,12 @@ SET @v_adj = 0; DROP TRIGGER IF EXISTS patton_trigger_adjustment; DELIMITER // --- Wyzwalacz zapamiętrujący wszelkie "zewnętrzne" zmiany na tabeli matches, w kolumnach corrv i corrh - a więc wyrównania. +-- Wyzwalacz zapamiÄ™trujÄ…cy wszelkie "zewnÄ™trzne" zmiany na tabeli matches, w kolumnach corrv i corrh - a wiÄ™c wyrĂłwnania. CREATE TRIGGER patton_trigger_adjustment BEFORE UPDATE ON matches FOR EACH ROW BEGIN IF @patton_disable_trigger <> 1 OR @patton_disable_trigger IS NULL THEN SET @h_adj = NEW.corrh - COALESCE(OLD.corrh, 0); SET @v_adj = NEW.corrv - COALESCE(OLD.corrv, 0); - -- Zapamiętujemy do patton_external_adjustements, wstawiając rekordy, jeśli trzeba. + -- ZapamiÄ™tujemy do patton_external_adjustements, wstawiajÄ…c rekordy, jeĹ›li trzeba. IF (SELECT COUNT(*) FROM patton_external_adjustments WHERE rnd = NEW.rnd AND tabl = NEW.tabl) THEN UPDATE patton_external_adjustments SET h_adj = h_adj + @h_adj, v_adj = v_adj + @v_adj @@ -103,16 +103,16 @@ CREATE TRIGGER patton_trigger_adjustment BEFORE UPDATE ON matches FOR EACH ROW B END // DELIMITER ; --- Na czas wykonywania skryptu wyłączamy powyższy wyzwalacz (skrypt równiez edytuje matches, w końcu) +-- Na czas wykonywania skryptu wyĹ‚Ä…czamy powyĹĽszy wyzwalacz (skrypt rĂłwniez edytuje matches, w koĹ„cu) SET @patton_disable_trigger = 1; --- Kompilujemy tabelę wyników rozdań i wyrówniania dla częśći BAM z rozdań. +-- Kompilujemy tabelÄ™ wynikĂłw rozdaĹ„ i wyrĂłwniania dla częśći BAM z rozdaĹ„. DELETE FROM patton_scores; INSERT INTO patton_scores SELECT pb.*, s1.score AS open_score, s2.score AS closed_score, - -- Rodzania z różnicą +/- 10 wymagają wyrównania -1 na niekorzyść strony, która wzięła +10 + -- Rodzania z różnicÄ… +/- 10 wymagajÄ… wyrĂłwnania -1 na niekorzyść strony, ktĂłra wzięła +10 IF(ABS(s1.score - s2.score) = 10, IF(s1.score > s2.score, -1, 1), 0) AS h_bam, 0 AS v_bam FROM patton_boards pb @@ -120,10 +120,10 @@ INSERT INTO patton_scores JOIN scores s2 ON pb.rnd = s2.rnd AND pb.segment = s2.segment AND pb.tabl = s2.tabl AND pb.board = s2.board AND s2.room = 2; UPDATE patton_scores SET v_bam = -h_bam; --- Zmienna pomocnicza do wyliczenia punktów za saldo w zależności od liczby rozdań w rundzie. -SET @boards_per_segment = IF ((SELECT boardspersegment FROM admin) = 4, 1, 0.5); -- Dla 4 rozdań: = 1.0, dla 3 rozdań: = 0.5 +-- Zmienna pomocnicza do wyliczenia punktĂłw za saldo w zaleĹĽnoĹ›ci od liczby rozdaĹ„ w rundzie. +SET @boards_per_segment = IF ((SELECT boardspersegment FROM admin) = 4, 1, 0.5); -- Dla 4 rozdaĹ„: = 1.0, dla 3 rozdaĹ„: = 0.5 --- Wypełniamy tabelę salda. +-- WypeĹ‚niamy tabelÄ™ salda. DELETE FROM patton_sums; INSERT INTO patton_sums SELECT @@ -139,34 +139,34 @@ INSERT INTO patton_sums -- Wybieramy maksymalne saldo UPDATE patton_sums SET max_saldo = IF (h_saldo > v_saldo, h_saldo, v_saldo); --- Roboczo liczymy wynik za saldo względem wyniku 0:0 --- Jeśli róznica salda > 1/3 maksymalnego, to gospodarze zdobywają: +-- Roboczo liczymy wynik za saldo wzglÄ™dem wyniku 0:0 +-- JeĹ›li rĂłznica salda > 1/3 maksymalnego, to gospodarze zdobywajÄ…: -- * 2 punkty przy 4 rozdaniach -- * 1 punkt przy 3 rozdaniach UPDATE patton_sums SET h_points = 2 * @boards_per_segment WHERE (max_saldo - v_saldo) / max_saldo > 1/3; --- Jeśli róznica salda > 1/10 maksymalnego, ale < 1/3, to gospodarze zdobywają: +-- JeĹ›li rĂłznica salda > 1/10 maksymalnego, ale < 1/3, to gospodarze zdobywajÄ…: -- * 2 punkty przy 4 rozdaniach -- * 1 punkt przy 3 rozdaniach UPDATE patton_sums SET h_points = 1 * @boards_per_segment WHERE (max_saldo - v_saldo) / max_saldo BETWEEN 1/10 AND 1/3; --- Jeśli róznica salda > 1/10 maksymalnego, ale < 1/3, to goście zdobywają: +-- JeĹ›li rĂłznica salda > 1/10 maksymalnego, ale < 1/3, to goĹ›cie zdobywajÄ…: -- * 2 punkty przy 4 rozdaniach -- * 1 punkt przy 3 rozdaniach UPDATE patton_sums SET h_points = -2 * @boards_per_segment WHERE (max_saldo - h_saldo) / max_saldo > 1/3; --- Jeśli róznica salda > 1/10 maksymalnego, ale < 1/3, to goście zdobywają: +-- JeĹ›li rĂłznica salda > 1/10 maksymalnego, ale < 1/3, to goĹ›cie zdobywajÄ…: -- * 1 punkt przy 4 rozdaniach -- * 0.5 punktu przy 3 rozdaniach UPDATE patton_sums SET h_points = -1 * @boards_per_segment WHERE (max_saldo - h_saldo) / max_saldo BETWEEN 1/10 AND 1/3; --- Druga drużyna zdobywa dopełnienie do zera. +-- Druga druĹĽyna zdobywa dopeĹ‚nienie do zera. UPDATE patton_sums SET v_points = -h_points; --- Podnosimy wynik za saldo z punktu odniesienia 0:0 do właściwego remisu, zależnego od liczby rozdań (2:2 dla 4, 1:1 dla 3) +-- Podnosimy wynik za saldo z punktu odniesienia 0:0 do wĹ‚aĹ›ciwego remisu, zaleĹĽnego od liczby rozdaĹ„ (2:2 dla 4, 1:1 dla 3) UPDATE patton_sums SET v_points = v_points + 2 * @boards_per_segment; UPDATE patton_sums SET h_points = h_points + 2 * @boards_per_segment; --- Kompilujemy wyrównania Pattonowe, jako sumę wyrównań z BAMów i punktów za saldo +-- Kompilujemy wyrĂłwnania Pattonowe, jako sumÄ™ wyrĂłwnaĹ„ z BAMĂłw i punktĂłw za saldo DELETE FROM patton_adjustments; INSERT INTO patton_adjustments SELECT patton_sums.rnd, patton_sums.segment, patton_sums.tabl, @@ -176,12 +176,12 @@ INSERT INTO patton_adjustments JOIN patton_scores ON patton_sums.rnd = patton_scores.rnd AND patton_sums.segment = patton_scores.segment AND patton_sums.tabl = patton_scores.tabl GROUP BY patton_scores.rnd, patton_scores.segment, patton_scores.tabl; --- Ustawiamy wyrównania w matches, nanosząc na nie zapamiętane "zewnętrzne" wyrównania +-- Ustawiamy wyrĂłwnania w matches, nanoszÄ…c na nie zapamiÄ™tane "zewnÄ™trzne" wyrĂłwnania UPDATE matches SET corrh = COALESCE((SELECT h_total FROM patton_adjustments WHERE matches.rnd = patton_adjustments.rnd AND matches.tabl = patton_adjustments.tabl AND patton_adjustments.segment = 1), 0) + COALESCE((SELECT h_adj FROM patton_external_adjustments WHERE matches.rnd = patton_external_adjustments.rnd AND matches.tabl = patton_external_adjustments.tabl), 0), corrv = COALESCE((SELECT v_total FROM patton_adjustments WHERE matches.rnd = patton_adjustments.rnd AND matches.tabl = patton_adjustments.tabl AND patton_adjustments.segment = 1), 0) + COALESCE((SELECT v_adj FROM patton_external_adjustments WHERE matches.rnd = patton_external_adjustments.rnd AND matches.tabl = patton_external_adjustments.tabl), 0); --- Oblokowujemy obsługę wyzwalacza, na wypadek gdybyśmy chcieli coś jeszcze robić na tym samym połączeniu do bazy. +-- Oblokowujemy obsĹ‚ugÄ™ wyzwalacza, na wypadek gdybyĹ›my chcieli coĹ› jeszcze robić na tym samym poĹ‚Ä…czeniu do bazy. SET @patton_disable_trigger = 0; diff --git a/patton-imp.sql b/patton-imp.sql index 1cea450..46529c6 100644 --- a/patton-imp.sql +++ b/patton-imp.sql @@ -1,81 +1,81 @@ -- ----------------------------------------------------------------------------------------------- -- --- Skrypt rozszerzający funkcjonalność Teamów o możliwość liczenia wyników turnieju metodą Pattona -- +-- Skrypt rozszerzajÄ…cy funkcjonalność TeamĂłw o moĹĽliwość liczenia wynikĂłw turnieju metodÄ… Pattona -- -- Autor: mkl -- -- ----------------------------------------------------------------------------------------------- -- -- Wersja dla turnieju liczonego na IMP->VP -- -- Ta wersja jest fajna, bo: -- --- * działa -- +-- * dziaĹ‚a -- -- Ta wersja jest niefajna, bo: -- --- * wymaga wgrania zdegnerowanej tabeli VP (skrypt ją nadpisuje, ale strzyżonego i tak dalej) -- --- z ustawionym wiecznym remisem (przykładowe tabele - dołączone) -- --- * dla rund 3-rozdaniowych wgranie właściwego remisu (4.5:4.5) przez Teamy jest niemożliwe -- --- * wszystkie zapisy są oznaczane jako "nie do liczenia w meczu", -- --- więc każdy mecz jest liczony jako remis (a wynik końcowy ustawiany tylko wyrównaniem) -- +-- * wymaga wgrania zdegnerowanej tabeli VP (skrypt jÄ… nadpisuje, ale strzyĹĽonego i tak dalej) -- +-- z ustawionym wiecznym remisem (przykĹ‚adowe tabele - doĹ‚Ä…czone) -- +-- * dla rund 3-rozdaniowych wgranie wĹ‚aĹ›ciwego remisu (4.5:4.5) przez Teamy jest niemoĹĽliwe -- +-- * wszystkie zapisy sÄ… oznaczane jako "nie do liczenia w meczu", -- +-- wiÄ™c kaĹĽdy mecz jest liczony jako remis (a wynik koĹ„cowy ustawiany tylko wyrĂłwnaniem) -- -- ----------------------------------------------------------------------------------------------- -- --- Instrukcja obsługi: -- --- * uruchomić w bazie turnieju skrypt co najmniej raz po założeniu turnieju, -- --- a przed wpisaniem pierwszego wyrównania "właściwego" (tj. faktycznej kary/wyrównania -- +-- Instrukcja obsĹ‚ugi: -- +-- * uruchomić w bazie turnieju skrypt co najmniej raz po zaĹ‚oĹĽeniu turnieju, -- +-- a przed wpisaniem pierwszego wyrĂłwnania "wĹ‚aĹ›ciwego" (tj. faktycznej kary/wyrĂłwnania -- -- z turnieju) -- --- * uruchomić kazdorazowo celem przeliczenia wyników -- +-- * uruchomić kazdorazowo celem przeliczenia wynikĂłw -- -- Potencjalne problemy: -- --- * wyrównania wklepywane z Teamów mogą sprawiać problemy (nie są dostatecznie przetestowane) -- --- * nie mam zielonego pojęcia, czy i jak powinny obchodzić mnie wyniki niezapisowe w rozdaniach -- --- Szczególne wymagania dla bazy danych: -- +-- * wyrĂłwnania wklepywane z TeamĂłw mogÄ… sprawiać problemy (nie sÄ… dostatecznie przetestowane) -- +-- * nie mam zielonego pojÄ™cia, czy i jak powinny obchodzić mnie wyniki niezapisowe w rozdaniach -- +-- SzczegĂłlne wymagania dla bazy danych: -- -- * uprawnienia do tworzenia tabel -- --- * uprawnienia do tworzenia widoków -- +-- * uprawnienia do tworzenia widokĂłw -- -- * uprawnienia do tworzenia i uruchamiania wyzwalaczy -- --- Kontrolnie tworzone są tabele/widoki z przedrostkiem patton_, pozwalające w razie czego ogarnąć,-- --- co się dzieje. -- +-- Kontrolnie tworzone sÄ… tabele/widoki z przedrostkiem patton_, pozwalajÄ…ce w razie czego ogarnąć,-- +-- co siÄ™ dzieje. -- -- ----------------------------------------------------------------------------------------------- -- --- Widok trzymający rozdania, w których są już oba zapisy - tylko te rozdania są dalej brane pod uwagę. +-- Widok trzymajÄ…cy rozdania, w ktĂłrych sÄ… juĹĽ oba zapisy - tylko te rozdania sÄ… dalej brane pod uwagÄ™. DROP VIEW IF EXISTS patton_boards; CREATE VIEW patton_boards AS SELECT rnd, segment, tabl, board FROM scores WHERE score IS NOT NULL GROUP BY rnd, segment, tabl, board HAVING COUNT(*) = 2; --- Tabela kompilująca wyniki rozdań, zestawiająca zapisy z obu stołów oraz wyniki części BAMowej Pattona +-- Tabela kompilujÄ…ca wyniki rozdaĹ„, zestawiajÄ…ca zapisy z obu stoĹ‚Ăłw oraz wyniki części BAMowej Pattona DROP TABLE IF EXISTS patton_scores; CREATE TABLE patton_scores ( - rnd INT, -- z bazy Teamów - segment INT, -- z bazy Teamów - tabl INT, -- z bazy Teamów - board INT, -- z bazy Teamów + rnd INT, -- z bazy TeamĂłw + segment INT, -- z bazy TeamĂłw + tabl INT, -- z bazy TeamĂłw + board INT, -- z bazy TeamĂłw open_score INT, -- score ze scores dla pokoju otwartego - closed_score INT, -- score ze scores dla pokoju zamkniętego + closed_score INT, -- score ze scores dla pokoju zamkniÄ™tego h_bam FLOAT, -- punkty BAMowe dla gospodarzy - v_bam FLOAT -- punkty BAMowe dla gości + v_bam FLOAT -- punkty BAMowe dla goĹ›ci ); --- Tabela kompilująca saldo druzyn w meczu +-- Tabela kompilujÄ…ca saldo druzyn w meczu DROP TABLE IF EXISTS patton_sums; CREATE TABLE patton_sums ( - rnd INT, -- z bazy Teamów - segment INT, -- z bazy Teamów - tabl INT, -- z bazy Teamów + rnd INT, -- z bazy TeamĂłw + segment INT, -- z bazy TeamĂłw + tabl INT, -- z bazy TeamĂłw h_saldo INT, -- saldo gospodarzy - v_saldo INT, -- saldo gości - max_saldo INT, -- większa z 2 powyższych wartości (maksymalne saldo) + v_saldo INT, -- saldo goĹ›ci + max_saldo INT, -- wiÄ™ksza z 2 powyĹĽszych wartoĹ›ci (maksymalne saldo) h_points FLOAT, -- punkty za saldo dla gospodarzy - v_points FLOAT -- punkty za saldo dla gości + v_points FLOAT -- punkty za saldo dla goĹ›ci ); --- Tabela kompilująca wyrównania (takie, by wynik meczu w VP był równy wynikowi wynikającemu z Pattona) +-- Tabela kompilujÄ…ca wyrĂłwnania (takie, by wynik meczu w VP byĹ‚ rĂłwny wynikowi wynikajÄ…cemu z Pattona) DROP TABLE IF EXISTS patton_adjustments; CREATE TABLE patton_adjustments ( - rnd INT, -- z bazy Teamów - segment INT, -- z bazy Teamów - tabl INT, -- z bazy Teamów - h_total FLOAT, -- wyrównanie dla gospodarzy - v_total FLOAT -- wyrównanie dla gości + rnd INT, -- z bazy TeamĂłw + segment INT, -- z bazy TeamĂłw + tabl INT, -- z bazy TeamĂłw + h_total FLOAT, -- wyrĂłwnanie dla gospodarzy + v_total FLOAT -- wyrĂłwnanie dla goĹ›ci ); --- Tabela zapamiętująca wszelkie "ręczne" zmiany na kolumnach corrv i corrh tabeli matches - więc zwykłe turniejowe wyrównania. --- Zapamiętujemy celem nałożenia na wyrównania wynikające z wyniku meczu Pattonem. +-- Tabela zapamiÄ™tujÄ…ca wszelkie "rÄ™czne" zmiany na kolumnach corrv i corrh tabeli matches - wiÄ™c zwykĹ‚e turniejowe wyrĂłwnania. +-- ZapamiÄ™tujemy celem naĹ‚oĹĽenia na wyrĂłwnania wynikajÄ…ce z wyniku meczu Pattonem. CREATE TABLE IF NOT EXISTS patton_external_adjustments ( - rnd INT, -- z bazy Teamów - tabl INT, -- z bazy Teamów - h_adj FLOAT, -- wyrównanie dla gospodarzy - v_adj FLOAT, -- wyrównanie dla gości + rnd INT, -- z bazy TeamĂłw + tabl INT, -- z bazy TeamĂłw + h_adj FLOAT, -- wyrĂłwnanie dla gospodarzy + v_adj FLOAT, -- wyrĂłwnanie dla goĹ›ci PRIMARY KEY (rnd, tabl) ); @@ -84,7 +84,7 @@ SET @v_adj = 0; DROP TRIGGER IF EXISTS patton_trigger_adjustment; DELIMITER // --- Wyzwalacz zapamiętrujący wszelkie "zewnętrzne" zmiany na tabeli matches, w kolumnach corrv i corrh - a więc wyrównania. +-- Wyzwalacz zapamiÄ™trujÄ…cy wszelkie "zewnÄ™trzne" zmiany na tabeli matches, w kolumnach corrv i corrh - a wiÄ™c wyrĂłwnania. CREATE TRIGGER patton_trigger_adjustment BEFORE UPDATE ON matches FOR EACH ROW BEGIN IF @patton_disable_trigger <> 1 OR @patton_disable_trigger IS NULL THEN IF OLD.corrh <> NEW.corrh THEN @@ -93,7 +93,7 @@ CREATE TRIGGER patton_trigger_adjustment BEFORE UPDATE ON matches FOR EACH ROW B IF OLD.corrv <> NEW.corrv THEN SET @v_adj = NEW.corrv - OLD.corrv; END IF; - -- Zapamiętujemy do patton_external_adjustements, wstawiając rekordy, jeśli trzeba. + -- ZapamiÄ™tujemy do patton_external_adjustements, wstawiajÄ…c rekordy, jeĹ›li trzeba. IF (SELECT COUNT(*) FROM patton_external_adjustments WHERE rnd = NEW.rnd AND tabl = NEW.tabl) THEN UPDATE patton_external_adjustments SET h_adj = h_adj + @h_adj, v_adj = v_adj + @v_adj @@ -108,19 +108,19 @@ CREATE TRIGGER patton_trigger_adjustment BEFORE UPDATE ON matches FOR EACH ROW B END // DELIMITER ; --- Na czas wykonywania skryptu wyłączamy powyższy wyzwalacz (skrypt równiez edytuje matches, w końcu) +-- Na czas wykonywania skryptu wyĹ‚Ä…czamy powyĹĽszy wyzwalacz (skrypt rĂłwniez edytuje matches, w koĹ„cu) SET @patton_disable_trigger = 1; --- Oznaczamy wszystkie rozdania jako nieliczone do wyniku meczu - każdy mecz powinien wygenerować remis. +-- Oznaczamy wszystkie rozdania jako nieliczone do wyniku meczu - kaĹĽdy mecz powinien wygenerować remis. UPDATE scores SET mecz = 0; --- Kompilujemy tabelę wyników rozdań i BAMy dla rozdań. +-- Kompilujemy tabelÄ™ wynikĂłw rozdaĹ„ i BAMy dla rozdaĹ„. DELETE FROM patton_scores; INSERT INTO patton_scores SELECT pb.*, s1.score AS open_score, s2.score AS closed_score, - -- W Pattonie różnica +/- 10 to jeszcze remis. + -- W Pattonie różnica +/- 10 to jeszcze remis. IF(ABS(s1.score - s2.score) > 10, ROUND((s1.score - s2.score) / ABS(s1.score - s2.score)), 0) AS h_bam, 0 AS v_bam FROM patton_boards pb @@ -128,15 +128,15 @@ INSERT INTO patton_scores JOIN scores s2 ON pb.rnd = s2.rnd AND pb.segment = s2.segment AND pb.tabl = s2.tabl AND pb.board = s2.board AND s2.room = 2; UPDATE patton_scores SET v_bam = -h_bam; --- Zmienna pomocnicza do wyliczenia punktów za saldo w zależności od liczby rozdań w rundzie. -SET @boards_per_segment = IF ((SELECT boardspersegment FROM admin) = 4, 1, 0.5); -- Dla 4 rozdań: = 1.0, dla 3 rozdań: = 0.5 --- Nadpisujemy tabelę VP na wiecznie remisową (6:6 dla 4 rozdań, 4.5:4.5 dla 3 rozdań) +-- Zmienna pomocnicza do wyliczenia punktĂłw za saldo w zaleĹĽnoĹ›ci od liczby rozdaĹ„ w rundzie. +SET @boards_per_segment = IF ((SELECT boardspersegment FROM admin) = 4, 1, 0.5); -- Dla 4 rozdaĹ„: = 1.0, dla 3 rozdaĹ„: = 0.5 +-- Nadpisujemy tabelÄ™ VP na wiecznie remisowÄ… (6:6 dla 4 rozdaĹ„, 4.5:4.5 dla 3 rozdaĹ„) UPDATE tabvp SET vpew = 3 + 3 * @boards_per_segment WHERE dimp = 0; UPDATE tabvp SET vpns = vpew WHERE dimp = 0; UPDATE matches SET vph = 3 + 3 * @boards_per_segment; UPDATE matches SET vpv = vph; --- Wypełniamy tabelę salda. +-- WypeĹ‚niamy tabelÄ™ salda. DELETE FROM patton_sums; INSERT INTO patton_sums SELECT @@ -151,30 +151,30 @@ INSERT INTO patton_sums -- Wybieramy maksymalne saldo UPDATE patton_sums SET max_saldo = IF (h_saldo > v_saldo, h_saldo, v_saldo); --- Jeśli róznica salda > 1/3 maksymalnego, to gospodarze zdobywają: +-- JeĹ›li rĂłznica salda > 1/3 maksymalnego, to gospodarze zdobywajÄ…: -- * 2 punkty przy 4 rozdaniach -- * 1 punkt przy 3 rozdaniach UPDATE patton_sums SET h_points = 2 * @boards_per_segment WHERE (max_saldo - v_saldo) / max_saldo > 1/3; --- Jeśli róznica salda > 1/10 maksymalnego, ale < 1/3, to gospodarze zdobywają: +-- JeĹ›li rĂłznica salda > 1/10 maksymalnego, ale < 1/3, to gospodarze zdobywajÄ…: -- * 2 punkty przy 4 rozdaniach -- * 1 punkt przy 3 rozdaniach UPDATE patton_sums SET h_points = 1 * @boards_per_segment WHERE (max_saldo - v_saldo) / max_saldo BETWEEN 1/10 AND 1/3; --- Jeśli róznica salda > 1/10 maksymalnego, ale < 1/3, to goście zdobywają: +-- JeĹ›li rĂłznica salda > 1/10 maksymalnego, ale < 1/3, to goĹ›cie zdobywajÄ…: -- * 2 punkty przy 4 rozdaniach -- * 1 punkt przy 3 rozdaniach UPDATE patton_sums SET h_points = -2 * @boards_per_segment WHERE (max_saldo - h_saldo) / max_saldo > 1/3; --- Jeśli róznica salda > 1/10 maksymalnego, ale < 1/3, to goście zdobywają: +-- JeĹ›li rĂłznica salda > 1/10 maksymalnego, ale < 1/3, to goĹ›cie zdobywajÄ…: -- * 1 punkt przy 4 rozdaniach -- * 0.5 punktu przy 3 rozdaniach UPDATE patton_sums SET h_points = -1 * @boards_per_segment WHERE (max_saldo - h_saldo) / max_saldo BETWEEN 1/10 AND 1/3; --- Druga drużyna zdobywa dopełnienie do zera. +-- Druga druĹĽyna zdobywa dopeĹ‚nienie do zera. UPDATE patton_sums SET v_points = -h_points; --- Kompilujemy wyrównania Pattonowe, jako sumę BAMów i punktów za saldo +-- Kompilujemy wyrĂłwnania Pattonowe, jako sumÄ™ BAMĂłw i punktĂłw za saldo DELETE FROM patton_adjustments; INSERT INTO patton_adjustments SELECT patton_sums.rnd, patton_sums.segment, patton_sums.tabl, @@ -184,12 +184,12 @@ INSERT INTO patton_adjustments JOIN patton_scores ON patton_sums.rnd = patton_scores.rnd AND patton_sums.segment = patton_scores.segment AND patton_sums.tabl = patton_scores.tabl GROUP BY patton_scores.rnd, patton_scores.segment, patton_scores.tabl; --- Ustawiamy wyrównania w matches, nanosząc na nie zapamiętane "zewnętrzne" wyrównania +-- Ustawiamy wyrĂłwnania w matches, nanoszÄ…c na nie zapamiÄ™tane "zewnÄ™trzne" wyrĂłwnania UPDATE matches SET corrh = COALESCE((SELECT h_total FROM patton_adjustments WHERE matches.rnd = patton_adjustments.rnd AND matches.tabl = patton_adjustments.tabl AND patton_adjustments.segment = 1), 0) + COALESCE((SELECT h_adj FROM patton_external_adjustments WHERE matches.rnd = patton_external_adjustments.rnd AND matches.tabl = patton_external_adjustments.tabl), 0), corrv = COALESCE((SELECT v_total FROM patton_adjustments WHERE matches.rnd = patton_adjustments.rnd AND matches.tabl = patton_adjustments.tabl AND patton_adjustments.segment = 1), 0) + COALESCE((SELECT v_adj FROM patton_external_adjustments WHERE matches.rnd = patton_external_adjustments.rnd AND matches.tabl = patton_external_adjustments.tabl), 0); --- Oblokowujemy obsługę wyzwalacza, na wypadek gdybyśmy chcieli coś jeszcze robić na tym samym połączeniu do bazy. +-- Oblokowujemy obsĹ‚ugÄ™ wyzwalacza, na wypadek gdybyĹ›my chcieli coĹ› jeszcze robić na tym samym poĹ‚Ä…czeniu do bazy. SET @patton_disable_trigger = 0; |