From 45d8d302c9cb5f3cf90145aef4203b330654ced9 Mon Sep 17 00:00:00 2001 From: Sebastiaan Janssen Date: Thu, 16 Aug 2018 12:10:21 +0200 Subject: [PATCH] U4-11581 In rare cases the umbracoLanguage table has a constraint instead of an index, making the migration fail --- .../IncreaseLanguageIsoCodeColumnLength.cs | 45 +++++++++++++------ 1 file changed, 32 insertions(+), 13 deletions(-) diff --git a/src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionSevenTwelveZero/IncreaseLanguageIsoCodeColumnLength.cs b/src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionSevenTwelveZero/IncreaseLanguageIsoCodeColumnLength.cs index 4341aa4bf4..f1c12d0b43 100644 --- a/src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionSevenTwelveZero/IncreaseLanguageIsoCodeColumnLength.cs +++ b/src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionSevenTwelveZero/IncreaseLanguageIsoCodeColumnLength.cs @@ -1,6 +1,7 @@ using System.Linq; using Umbraco.Core.Logging; using Umbraco.Core.Persistence.DatabaseModelDefinitions; +using Umbraco.Core.Persistence.Migrations.Upgrades.TargetVersionSeven; using Umbraco.Core.Persistence.SqlSyntax; namespace Umbraco.Core.Persistence.Migrations.Upgrades.TargetVersionSevenTwelveZero @@ -15,21 +16,37 @@ namespace Umbraco.Core.Persistence.Migrations.Upgrades.TargetVersionSevenTwelveZ public override void Up() { - var dbIndexes = SqlSyntax.GetDefinedIndexes(Context.Database) - .Select(x => new DbIndexDefinition() - { - TableName = x.Item1, - IndexName = x.Item2, - ColumnName = x.Item3, - IsUnique = x.Item4 - }).ToArray(); - - //Ensure the index exists before dropping it - if (dbIndexes.Any(x => x.IndexName.InvariantEquals("IX_umbracoLanguage_languageISOCode"))) + // Some people seem to have a constraint in their DB instead of an index, we'd need to drop that one + // See: https://our.umbraco.com/forum/using-umbraco-and-getting-started/93282-upgrade-from-711-to-712-fails + var constraints = SqlSyntax.GetConstraintsPerColumn(Context.Database).Distinct().Select(x => new ConstraintDefinition(ConstraintType.Unique) { - Delete.Index("IX_umbracoLanguage_languageISOCode").OnTable("umbracoLanguage"); + TableName = x.Item1, + SchemaName = x.Item2, + ConstraintName = x.Item3 + }).ToArray(); + + if (constraints.Any(x => x.ConstraintName.InvariantEquals("IX_umbracoLanguage_languageISOCode"))) + { + Delete.UniqueConstraint("IX_umbracoLanguage_languageISOCode").FromTable("umbracoLanguage"); } - + else + { + var dbIndexes = SqlSyntax.GetDefinedIndexes(Context.Database) + .Select(x => new DbIndexDefinition() + { + TableName = x.Item1, + IndexName = x.Item2, + ColumnName = x.Item3, + IsUnique = x.Item4 + }).ToArray(); + + //Ensure the index exists before dropping it + if (dbIndexes.Any(x => x.IndexName.InvariantEquals("IX_umbracoLanguage_languageISOCode"))) + { + Delete.Index("IX_umbracoLanguage_languageISOCode").OnTable("umbracoLanguage"); + } + } + Alter.Table("umbracoLanguage") .AlterColumn("languageISOCode") .AsString(14) @@ -38,6 +55,8 @@ namespace Umbraco.Core.Persistence.Migrations.Upgrades.TargetVersionSevenTwelveZ Create.Index("IX_umbracoLanguage_languageISOCode") .OnTable("umbracoLanguage") .OnColumn("languageISOCode") + .Ascending() + .WithOptions() .Unique(); }