using System; using Microsoft.EntityFrameworkCore.Migrations; #nullable disable namespace Jellyfin.Database.Providers.Sqlite.Migrations { /// public partial class ChangePrimaryVersionIdToGuid : Migration { /// protected override void Up(MigrationBuilder migrationBuilder) { // Convert "N" format (32 chars, no hyphens) to standard GUID format (36 chars with hyphens) migrationBuilder.Sql( @"UPDATE BaseItems SET PrimaryVersionId = UPPER( SUBSTR(PrimaryVersionId,1,8)||'-'|| SUBSTR(PrimaryVersionId,9,4)||'-'|| SUBSTR(PrimaryVersionId,13,4)||'-'|| SUBSTR(PrimaryVersionId,17,4)||'-'|| SUBSTR(PrimaryVersionId,21,12)) WHERE PrimaryVersionId IS NOT NULL AND LENGTH(PrimaryVersionId) = 32"); // Normalize existing standard-format values to uppercase migrationBuilder.Sql( @"UPDATE BaseItems SET PrimaryVersionId = UPPER(PrimaryVersionId) WHERE PrimaryVersionId IS NOT NULL"); // Clear invalid values (not 36 characters = not a valid GUID) migrationBuilder.Sql( @"UPDATE BaseItems SET PrimaryVersionId = NULL WHERE PrimaryVersionId IS NOT NULL AND LENGTH(PrimaryVersionId) != 36"); // Clear placeholder/empty GUIDs migrationBuilder.Sql( @"UPDATE BaseItems SET PrimaryVersionId = NULL WHERE PrimaryVersionId = '00000000-0000-0000-0000-000000000000'"); } /// protected override void Down(MigrationBuilder migrationBuilder) { // Convert standard GUID format back to "N" format (remove hyphens, lowercase) migrationBuilder.Sql( @"UPDATE BaseItems SET PrimaryVersionId = LOWER(REPLACE(PrimaryVersionId, '-', '')) WHERE PrimaryVersionId IS NOT NULL"); } } }