Files
ersatztv/ErsatzTV.Infrastructure.Sqlite/Migrations/20251214000517_Fix_SmartCollectionNameSensitivity.cs
T
Jason DoveandGitHub 6562d616fb smart collection names must be case insensitive (#2721)
* smart collection names must be case insensitive

* use explicit ci collation for mysql
2025-12-13 18:32:02 -06:00

54 lines
1.6 KiB
C#

using Microsoft.EntityFrameworkCore.Migrations;
#nullable disable
namespace ErsatzTV.Infrastructure.Sqlite.Migrations
{
/// <inheritdoc />
public partial class Fix_SmartCollectionNameSensitivity : Migration
{
/// <inheritdoc />
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.Sql(@"
WITH Numbered AS (
SELECT
Id,
-- Partition by case-insensitive name
ROW_NUMBER() OVER (PARTITION BY Name COLLATE NOCASE ORDER BY Id) AS RowNum
FROM SmartCollection
)
UPDATE SmartCollection
SET Name = Name || ' (' || (Numbered.RowNum - 1) || ')'
FROM Numbered
WHERE SmartCollection.Id = Numbered.Id
AND Numbered.RowNum > 1;
");
migrationBuilder.AlterColumn<string>(
name: "Name",
table: "SmartCollection",
type: "TEXT",
nullable: true,
collation: "NOCASE",
oldClrType: typeof(string),
oldType: "TEXT",
oldNullable: true);
}
/// <inheritdoc />
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.AlterColumn<string>(
name: "Name",
table: "SmartCollection",
type: "TEXT",
nullable: true,
oldClrType: typeof(string),
oldType: "TEXT",
oldNullable: true,
oldCollation: "NOCASE");
}
}
}