Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 14 additions & 10 deletions Database/DB Maintenance/gamecache update.sql
Original file line number Diff line number Diff line change
@@ -1,18 +1,20 @@
--wild
INSERT INTO "wild_CachedTeams" ("Ruleset1", "Ruleset2", "ManaCap", "WinRate", "GamesPlayed", "TeamHash", "RatingBracket")
INSERT INTO "wild_CachedTeams" ("Ruleset1", "Ruleset2", "Ruleset3", "ManaCap", "WinRate", "GamesPlayed", "TeamHash", "RatingBracket")
SELECT * FROM
(
SELECT team_results."Ruleset1",
team_results."Ruleset2",
team_results."Ruleset3",
team_results."ManaCap",
avg(team_results."WinFlag") OVER (PARTITION BY team_results."TeamHash", team_results."Ruleset1", team_results."Ruleset2", team_results."ManaCap", team_results."RatingBracket") * 100 as "WinRate",
count(team_results."TeamHash") OVER (PARTITION BY team_results."TeamHash", team_results."Ruleset1", team_results."Ruleset2", team_results."ManaCap", team_results."RatingBracket") as "GamesPlayed",
avg(team_results."WinFlag") OVER (PARTITION BY team_results."TeamHash", team_results."Ruleset1", team_results."Ruleset2", team_results."Ruleset3", team_results."ManaCap", team_results."RatingBracket") * 100 as "WinRate",
count(team_results."TeamHash") OVER (PARTITION BY team_results."TeamHash", team_results."Ruleset1", team_results."Ruleset2", team_results."Ruleset3", team_results."ManaCap", team_results."RatingBracket") as "GamesPlayed",
team_results."TeamHash",
team_results."RatingBracket"

FROM
(SELECT g."Ruleset1",
g."Ruleset2",
g."Ruleset3",
g."ManaCap",
CASE
WHEN tg."Result" = 'W' THEN CAST(1 AS DECIMAL)
Expand All @@ -36,24 +38,26 @@ SELECT * FROM
-- etc
) aggregated_results
WHERE "GamesPlayed" > 2
GROUP BY 1,2,3,4,5,6,7
ON CONFLICT ("Ruleset1", "Ruleset2", "ManaCap", "TeamHash", "RatingBracket") DO UPDATE SET "WinRate"=EXCLUDED."WinRate", "GamesPlayed" = excluded."GamesPlayed";
GROUP BY 1,2,3,4,5,6,7,8
ON CONFLICT ("Ruleset1", "Ruleset2", "Ruleset3", "ManaCap", "TeamHash", "RatingBracket") DO UPDATE SET "WinRate"=EXCLUDED."WinRate", "GamesPlayed" = excluded."GamesPlayed";

--modern
INSERT INTO "modern_CachedTeams" ("Ruleset1", "Ruleset2", "ManaCap", "WinRate", "GamesPlayed", "TeamHash", "RatingBracket")
INSERT INTO "modern_CachedTeams" ("Ruleset1", "Ruleset2", "Ruleset3", "ManaCap", "WinRate", "GamesPlayed", "TeamHash", "RatingBracket")
SELECT * FROM
(
SELECT team_results."Ruleset1",
team_results."Ruleset2",
team_results."Ruleset3",
team_results."ManaCap",
avg(team_results."WinFlag") OVER (PARTITION BY team_results."TeamHash", team_results."Ruleset1", team_results."Ruleset2", team_results."ManaCap", team_results."RatingBracket") * 100 as "WinRate",
count(team_results."TeamHash") OVER (PARTITION BY team_results."TeamHash", team_results."Ruleset1", team_results."Ruleset2", team_results."ManaCap", team_results."RatingBracket") as "GamesPlayed",
avg(team_results."WinFlag") OVER (PARTITION BY team_results."TeamHash", team_results."Ruleset1", team_results."Ruleset2", team_results."Ruleset3", team_results."ManaCap", team_results."RatingBracket") * 100 as "WinRate",
count(team_results."TeamHash") OVER (PARTITION BY team_results."TeamHash", team_results."Ruleset1", team_results."Ruleset2", team_results."Ruleset3", team_results."ManaCap", team_results."RatingBracket") as "GamesPlayed",
team_results."TeamHash",
team_results."RatingBracket"

FROM
(SELECT g."Ruleset1",
g."Ruleset2",
g."Ruleset3",
g."ManaCap",
CASE
WHEN tg."Result" = 'W' THEN CAST(1 AS DECIMAL)
Expand All @@ -77,5 +81,5 @@ SELECT * FROM
-- etc
) aggregated_results
WHERE "GamesPlayed" > 2
GROUP BY 1,2,3,4,5,6,7
ON CONFLICT ("Ruleset1", "Ruleset2", "ManaCap", "TeamHash", "RatingBracket") DO UPDATE SET "WinRate"=EXCLUDED."WinRate", "GamesPlayed" = excluded."GamesPlayed";
GROUP BY 1,2,3,4,5,6,7,8
ON CONFLICT ("Ruleset1", "Ruleset2", "Ruleset3", "ManaCap", "TeamHash", "RatingBracket") DO UPDATE SET "WinRate"=EXCLUDED."WinRate", "GamesPlayed" = excluded."GamesPlayed";
Original file line number Diff line number Diff line change
Expand Up @@ -3,18 +3,20 @@ SELECT sub_select."Id"
FROM(
SELECT main_select."Id",
main_select."Ruleset1",
main_select."Ruleset2",
main_select."Ruleset2",
main_select."Ruleset3",
main_select."RatingBracket",
main_select."CreatedDate",
ROW_NUMBER () OVER (
PARTITION BY main_select."Ruleset1", main_select."Ruleset2", main_select."RatingBracket"
PARTITION BY main_select."Ruleset1", main_select."Ruleset2", main_select."Ruleset3", main_select."RatingBracket"
ORDER BY main_select."CreatedDate" DESC)
FROM
(
SELECT
g."Id",
g."Ruleset1",
g."Ruleset2",
g."Ruleset3",
CASE
WHEN g."Rating" BETWEEN 0 AND 120 THEN 1
WHEN g."Rating" BETWEEN 121 AND 400 THEN 1
Expand Down
4 changes: 3 additions & 1 deletion Database/Schema/db schema MODERN.sql
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ CREATE TABLE IF NOT EXISTS "modern_Game" (
"ManaCap" INTEGER NOT NULL CHECK("ManaCap" <= 100),
"Ruleset1" TEXT NOT NULL,
"Ruleset2" TEXT NOT NULL,
"Ruleset3" TEXT NOT NULL,
"Inactive" TEXT NOT NULL,
"TournamentSettings" TEXT,
unique("QueueIdHash", "QueueId1")
Expand Down Expand Up @@ -47,12 +48,13 @@ CREATE TABLE IF NOT EXISTS "modern_CachedTeams" (
"Id" serial primary key,
"Ruleset1" TEXT NOT NULL,
"Ruleset2" TEXT NOT NULL,
"Ruleset3" TEXT NOT NULL,
"ManaCap" INTEGER NOT NULL,
"WinRate" numeric NOT NULL,
"GamesPlayed" BIGINT NOT NULL,
"TeamHash" BIGINT NOT NULL,
"RatingBracket" INTEGER NOT NULL,
UNIQUE("Ruleset1", "Ruleset2", "ManaCap", "TeamHash", "RatingBracket"));
UNIQUE("Ruleset1", "Ruleset2", "Ruleset3", "ManaCap", "TeamHash", "RatingBracket"));
CREATE INDEX ON public."modern_CachedTeams" ("Ruleset1");
CREATE INDEX ON public."modern_CachedTeams" ("TeamHash");
CREATE INDEX ON public."modern_CachedTeams" ("RatingBracket");
Expand Down
4 changes: 3 additions & 1 deletion Database/Schema/db schema WILD.sql
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ CREATE TABLE IF NOT EXISTS "wild_Game" (
"ManaCap" INTEGER NOT NULL CHECK("ManaCap" <= 100),
"Ruleset1" TEXT NOT NULL,
"Ruleset2" TEXT NOT NULL,
"Ruleset3" TEXT NOT NULL,
"Inactive" TEXT NOT NULL,
"TournamentSettings" TEXT,
unique("QueueIdHash", "QueueId1")
Expand Down Expand Up @@ -47,12 +48,13 @@ CREATE TABLE IF NOT EXISTS "wild_CachedTeams" (
"Id" serial primary key,
"Ruleset1" TEXT NOT NULL,
"Ruleset2" TEXT NOT NULL,
"Ruleset3" TEXT NOT NULL,
"ManaCap" INTEGER NOT NULL,
"WinRate" numeric NOT NULL,
"GamesPlayed" BIGINT NOT NULL,
"TeamHash" BIGINT NOT NULL,
"RatingBracket" INTEGER NOT NULL,
UNIQUE("Ruleset1", "Ruleset2", "ManaCap", "TeamHash", "RatingBracket"));
UNIQUE("Ruleset1", "Ruleset2", "Ruleset3", "ManaCap", "TeamHash", "RatingBracket"));
CREATE INDEX ON public."wild_CachedTeams" ("Ruleset1");
CREATE INDEX ON public."wild_CachedTeams" ("TeamHash");
CREATE INDEX ON public."wild_CachedTeams" ("RatingBracket");
Expand Down
8 changes: 4 additions & 4 deletions HistoryCrawler/Database.cs
Original file line number Diff line number Diff line change
Expand Up @@ -296,7 +296,7 @@ public List<Game> InsertNewGames(IEnumerable<(User user, List<Game> games)> ps)

sqlEnd.Add(gameType, @")
, ins AS (
INSERT INTO """ + GAME_TYPE_PREFIXES[i] + @"_Game"" (""QueueIdHash"", ""QueueId1"", ""Winner"", ""Loser"", ""Rating"", ""CreatedDate"", ""MatchType"", ""ManaCap"", ""Ruleset1"", ""Ruleset2"", ""Inactive"", ""TournamentSettings"")
INSERT INTO """ + GAME_TYPE_PREFIXES[i] + @"_Game"" (""QueueIdHash"", ""QueueId1"", ""Winner"", ""Loser"", ""Rating"", ""CreatedDate"", ""MatchType"", ""ManaCap"", ""Ruleset1"", ""Ruleset2"", ""Ruleset3"", ""Inactive"", ""TournamentSettings"")
SELECT * FROM input_rows
ON CONFLICT (""QueueIdHash"", ""QueueId1"") DO NOTHING
RETURNING ""Id"", ""QueueIdHash""
Expand All @@ -311,7 +311,7 @@ FROM input_rows
JOIN """ + GAME_TYPE_PREFIXES[i] + @"_Game"" g USING (""QueueIdHash"", ""QueueId1"");");

// https://stackoverflow.com/a/42217872
sql.Add(gameType, @"WITH input_rows(""QueueIdHash"", ""QueueId1"", ""Winner"", ""Loser"", ""Rating"", ""CreatedDate"", ""MatchType"", ""ManaCap"", ""Ruleset1"", ""Ruleset2"", ""Inactive"", ""TournamentSettings"") AS (
sql.Add(gameType, @"WITH input_rows(""QueueIdHash"", ""QueueId1"", ""Winner"", ""Loser"", ""Rating"", ""CreatedDate"", ""MatchType"", ""ManaCap"", ""Ruleset1"", ""Ruleset2"", ""Ruleset3"", ""Inactive"", ""TournamentSettings"") AS (
VALUES");
}

Expand All @@ -336,7 +336,7 @@ FROM input_rows
{
continue;
}
sql[gameType] += $"(text '{firstGame.QueueIdHash}', text '{firstGame.QueueId1}', text '{firstGame.Winner}', text '{firstGame.Loser}', integer '{firstGame.Rating}', timestamp '{firstGame.CreatedDate}', text '{firstGame.MatchType}', integer '{firstGame.ManaCap}', text '{firstGame.Ruleset1}', text '{firstGame.Ruleset2}', text '{firstGame.Inactive}', text '{firstGame.TournamentSettings}')";
sql[gameType] += $"(text '{firstGame.QueueIdHash}', text '{firstGame.QueueId1}', text '{firstGame.Winner}', text '{firstGame.Loser}', integer '{firstGame.Rating}', timestamp '{firstGame.CreatedDate}', text '{firstGame.MatchType}', integer '{firstGame.ManaCap}', text '{firstGame.Ruleset1}', text '{firstGame.Ruleset2}', text '{firstGame.Ruleset3}', text '{firstGame.Inactive}', text '{firstGame.TournamentSettings}')";
games[gameType].TryAdd(firstGame.QueueIdHash, firstGame);
ps.ElementAt(i).games.Remove(firstGame);
}
Expand All @@ -358,7 +358,7 @@ FROM input_rows
return;
}

sql[game.Format] += $",('{game.QueueIdHash}','{game.QueueId1}','{game.Winner}','{game.Loser}',{game.Rating},'{game.CreatedDate}','{game.MatchType}',{game.ManaCap},'{game.Ruleset1}','{game.Ruleset2}','{game.Inactive}','{game.TournamentSettings}')";
sql[game.Format] += $",('{game.QueueIdHash}','{game.QueueId1}','{game.Winner}','{game.Loser}',{game.Rating},'{game.CreatedDate}','{game.MatchType}',{game.ManaCap},'{game.Ruleset1}','{game.Ruleset2}','{game.Ruleset3}','{game.Inactive}','{game.TournamentSettings}')";

games[game.Format].TryAdd(game.QueueIdHash, game);
});
Expand Down
2 changes: 2 additions & 0 deletions HistoryCrawler/Model/Game.cs
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ internal record Game
public int ManaCap { get; init; }
public string Ruleset1 { get; init; }
public string Ruleset2 { get; init; }
public string Ruleset3 { get; init; }
public string Inactive { get; init; }
public string? TournamentSettings { get; init; }
[NotMapped]
Expand Down Expand Up @@ -70,6 +71,7 @@ public Game(JToken game)
string[] rulesets = ((string?)game["ruleset"] ?? throw new ArgumentNullException(nameof(game))).Split('|');
Ruleset1 = rulesets[0];
Ruleset2 = rulesets.Length > 1 ? rulesets[1] : "";
Ruleset3 = rulesets.Length > 2 ? rulesets[2] : "";
string winner = (string?)game["winner"] ?? throw new ArgumentNullException(nameof(game));
string player1 = (string?)game["player_1"] ?? throw new ArgumentNullException(nameof(game));
string player2 = (string?)game["player_2"] ?? throw new ArgumentNullException(nameof(game));
Expand Down
1 change: 1 addition & 0 deletions Ultimate-Splinterlands-Bot API/Api/TeamGeneration.cs
Original file line number Diff line number Diff line change
Expand Up @@ -358,6 +358,7 @@ private static string GetPlayerTeams(int ratingBracket, int manaCap, string[] ru
.Replace("@manaCap", manaCap.ToString())
.Replace("@ruleset1", System.Web.HttpUtility.HtmlEncode(rulesets[0]))
.Replace("@ruleset2", System.Web.HttpUtility.HtmlEncode(rulesets.Length > 1 ? rulesets[1] : ""))
.Replace("@ruleset3", System.Web.HttpUtility.HtmlEncode(rulesets.Length > 2 ? rulesets[2] : ""))
.Replace("@additionalFilters", additionalFilters);

using NpgsqlDataReader reader = cmd.ExecuteReader();
Expand Down
2 changes: 2 additions & 0 deletions Ultimate-Splinterlands-Bot API/Model/Game.cs
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ internal record Game
public int ManaCap { get; init; }
public string Ruleset1 { get; init; }
public string Ruleset2 { get; init; }
public string Ruleset3 { get; init; }
public string Inactive { get; init; }
public string? TournamentSettings { get; init; }
public bool IsSurrender { get; init; }
Expand Down Expand Up @@ -53,6 +54,7 @@ public Game(JToken game)
string[] rulesets = ((string?)game["ruleset"] ?? throw new ArgumentNullException(nameof(game))).Split('|');
Ruleset1 = rulesets[0];
Ruleset2 = rulesets.Length > 1 ? rulesets[1] : "";
Ruleset3 = rulesets.Length > 2 ? rulesets[2] : "";
string winner = (string?)game["winner"] ?? throw new ArgumentNullException(nameof(game));
string player1 = (string?)game["player_1"] ?? throw new ArgumentNullException(nameof(game));
string player2 = (string?)game["player_2"] ?? throw new ArgumentNullException(nameof(game));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ WHERE
aggregated_results."GamesPlayed" > @minGamesPlayed
AND aggregated_results."Ruleset1" = '@ruleset1'
AND aggregated_results."Ruleset2" = '@ruleset2'
AND aggregated_results."Ruleset3" = '@ruleset3'
AND aggregated_results."RatingBracket" @ratingBracket -- special case
AND aggregated_results."ManaCap" = @manaCap
@additionalFilters
Expand Down