161b27e2f2
(hopefully) fix an issue with banned players causing exception if they create events before they are kicked out fix issues with sometimes wrong error message for timeout show most recent IP address at top of alias list optimization to some sql queries
121 lines
3.0 KiB
C#
121 lines
3.0 KiB
C#
using Microsoft.EntityFrameworkCore.Migrations;
|
|
|
|
namespace SharedLibraryCore.Migrations
|
|
{
|
|
public partial class EnforceUniqueIndexForEFAliasIPName : Migration
|
|
{
|
|
protected override void Up(MigrationBuilder migrationBuilder)
|
|
{
|
|
if (migrationBuilder.ActiveProvider == "Microsoft.EntityFrameworkCore.Sqlite")
|
|
{
|
|
migrationBuilder.Sql(@"DELETE FROM EFAlias WHERE AliasId IN (
|
|
SELECT AliasId from (
|
|
SELECT AliasId, Name, Min(DateAdded), IPAddress FROM EFAlias where (IPAddress, Name) in (SELECT DISTINCT IPAddress, Name FROM EFAlias GROUP BY EFAlias.IPAddress, Name HAVING count(IPAddress) > 1 AND count(Name) > 1)
|
|
GROUP BY IPAddress ORDER BY IPAddress))", true);
|
|
migrationBuilder.Sql(@"CREATE UNIQUE INDEX IX_EFAlias_Name_IPAddress ON EFAlias ( IPAddress, Name );", true);
|
|
return;
|
|
}
|
|
|
|
else if (migrationBuilder.ActiveProvider == "Pomelo.EntityFrameworkCore.MySql")
|
|
{
|
|
migrationBuilder.Sql(@"CREATE TEMPORARY TABLE DUPLICATE_ALIASES
|
|
SELECT
|
|
MIN(`AliasId`) `MIN`,
|
|
MAX(`AliasId`) `MAX`,
|
|
`LinkId`
|
|
FROM
|
|
`EFAlias`
|
|
WHERE
|
|
(`IPAddress`, `NAME`) IN(
|
|
SELECT DISTINCT
|
|
`IPAddress`,
|
|
`NAME`
|
|
FROM
|
|
`EFAlias`
|
|
GROUP BY
|
|
`EFAlias`.`IPAddress`,
|
|
`NAME`
|
|
HAVING
|
|
COUNT(`IPAddress`) > 1 AND COUNT(`NAME`) > 1
|
|
)
|
|
GROUP BY
|
|
`IPAddress`
|
|
ORDER BY
|
|
`IPAddress`;
|
|
SET
|
|
SQL_SAFE_UPDATES = 0;
|
|
UPDATE
|
|
`EFClients` AS `Client`
|
|
JOIN
|
|
DUPLICATE_ALIASES `Duplicate`
|
|
ON
|
|
`Client`.CurrentAliasId = `Duplicate`.`MIN`
|
|
SET
|
|
`Client`.CurrentAliasId = `Duplicate`.`MAX`
|
|
WHERE
|
|
`Client`.`CurrentAliasId` IN(
|
|
SELECT
|
|
`MIN`
|
|
FROM
|
|
DUPLICATE_ALIASES
|
|
);
|
|
DELETE
|
|
FROM
|
|
`EFAlias`
|
|
WHERE
|
|
`AliasId` IN(
|
|
SELECT
|
|
`MIN`
|
|
FROM
|
|
DUPLICATE_ALIASES
|
|
);
|
|
SET
|
|
SQL_SAFE_UPDATES = 1;
|
|
DROP TABLE
|
|
DUPLICATE_ALIASES;");
|
|
}
|
|
|
|
else
|
|
{
|
|
migrationBuilder.Sql(@"DELETE
|
|
FROM ""EFAlias""
|
|
WHERE ""AliasId""
|
|
IN
|
|
(
|
|
SELECT MIN(""AliasId"") AliasId
|
|
|
|
FROM ""EFAlias"" WHERE(""IPAddress"", ""Name"")
|
|
|
|
IN
|
|
(
|
|
SELECT DISTINCT ""IPAddress"", ""Name""
|
|
|
|
FROM ""EFAlias""
|
|
|
|
GROUP BY ""EFAlias"".""IPAddress"", ""Name""
|
|
|
|
HAVING COUNT(""IPAddress"") > 1 AND COUNT(""Name"") > 1
|
|
)
|
|
|
|
GROUP BY ""IPAddress""
|
|
|
|
ORDER BY ""IPAddress""
|
|
)", true);
|
|
}
|
|
|
|
migrationBuilder.CreateIndex(
|
|
name: "IX_EFAlias_Name_IPAddress",
|
|
table: "EFAlias",
|
|
columns: new[] { "Name", "IPAddress" },
|
|
unique: true);
|
|
}
|
|
|
|
protected override void Down(MigrationBuilder migrationBuilder)
|
|
{
|
|
migrationBuilder.DropIndex(
|
|
name: "IX_EFAlias_Name_IPAddress",
|
|
table: "EFAlias");
|
|
}
|
|
}
|
|
}
|