From 0c4e442578b07ec18d2e1efb93cdb3ea76d18978 Mon Sep 17 00:00:00 2001 From: Shannon Date: Wed, 12 Mar 2014 18:52:05 +1100 Subject: [PATCH] Checks for index existence before trying to add --- .../AddIndexToCmsMacroPropertyTable.cs | 20 ++++++++- .../AddIndexToCmsMacroTable.cs | 19 +++++++- .../TargetVersionSeven/AlterTagsTable.cs | 43 ++++++++++++++----- 3 files changed, 70 insertions(+), 12 deletions(-) diff --git a/src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionSeven/AddIndexToCmsMacroPropertyTable.cs b/src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionSeven/AddIndexToCmsMacroPropertyTable.cs index 7ba5224e5a..33bb0458db 100644 --- a/src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionSeven/AddIndexToCmsMacroPropertyTable.cs +++ b/src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionSeven/AddIndexToCmsMacroPropertyTable.cs @@ -1,5 +1,8 @@ using System; +using System.Linq; using Umbraco.Core.Configuration; +using Umbraco.Core.Persistence.DatabaseModelDefinitions; +using Umbraco.Core.Persistence.SqlSyntax; namespace Umbraco.Core.Persistence.Migrations.Upgrades.TargetVersionSeven { @@ -11,11 +14,26 @@ namespace Umbraco.Core.Persistence.Migrations.Upgrades.TargetVersionSeven { public override void Up() { - Create.Index("IX_cmsMacroProperty_Alias").OnTable("cmsMacroProperty") + var dbIndexes = SqlSyntaxContext.SqlSyntaxProvider.GetDefinedIndexes(Context.Database) + .Select(x => new DbIndexDefinition() + { + TableName = x.Item1, + IndexName = x.Item2, + ColumnName = x.Item3, + IsUnique = x.Item4 + }).ToArray(); + + //make sure it doesn't already exist + if (dbIndexes.Any(x => x.IndexName == "IX_cmsMacroProperty_Alias") == false) + { + Create.Index("IX_cmsMacroProperty_Alias").OnTable("cmsMacroProperty") .OnColumn("macro") .Ascending() .OnColumn("macroPropertyAlias") .Unique(); + } + + } public override void Down() diff --git a/src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionSeven/AddIndexToCmsMacroTable.cs b/src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionSeven/AddIndexToCmsMacroTable.cs index 3b4f1f8817..71e3bc5b15 100644 --- a/src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionSeven/AddIndexToCmsMacroTable.cs +++ b/src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionSeven/AddIndexToCmsMacroTable.cs @@ -1,5 +1,8 @@ using System; +using System.Linq; using Umbraco.Core.Configuration; +using Umbraco.Core.Persistence.DatabaseModelDefinitions; +using Umbraco.Core.Persistence.SqlSyntax; namespace Umbraco.Core.Persistence.Migrations.Upgrades.TargetVersionSeven { @@ -11,7 +14,21 @@ namespace Umbraco.Core.Persistence.Migrations.Upgrades.TargetVersionSeven { public override void Up() { - Create.Index("IX_cmsMacro_Alias").OnTable("cmsMacro").OnColumn("macroAlias").Unique(); + var dbIndexes = SqlSyntaxContext.SqlSyntaxProvider.GetDefinedIndexes(Context.Database) + .Select(x => new DbIndexDefinition() + { + TableName = x.Item1, + IndexName = x.Item2, + ColumnName = x.Item3, + IsUnique = x.Item4 + }).ToArray(); + + //make sure it doesn't already exist + if (dbIndexes.Any(x => x.IndexName == "IX_cmsMacro_Alias") == false) + { + Create.Index("IX_cmsMacro_Alias").OnTable("cmsMacro").OnColumn("macroAlias").Unique(); + } + } public override void Down() diff --git a/src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionSeven/AlterTagsTable.cs b/src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionSeven/AlterTagsTable.cs index 581fd7ef07..6356206160 100644 --- a/src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionSeven/AlterTagsTable.cs +++ b/src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionSeven/AlterTagsTable.cs @@ -1,6 +1,9 @@ using System; using System.Data; +using System.Linq; using Umbraco.Core.Configuration; +using Umbraco.Core.Persistence.DatabaseModelDefinitions; +using Umbraco.Core.Persistence.SqlSyntax; namespace Umbraco.Core.Persistence.Migrations.Upgrades.TargetVersionSeven { @@ -9,17 +12,37 @@ namespace Umbraco.Core.Persistence.Migrations.Upgrades.TargetVersionSeven { public override void Up() { - //add a foreign key to the parent id column too! - Create.ForeignKey("FK_cmsTags_cmsTags") - .FromTable("cmsTags") - .ForeignColumn("ParentId") - .ToTable("cmsTags") - .PrimaryColumn("id") - .OnDelete(Rule.None) - .OnUpdate(Rule.None); + var dbIndexes = SqlSyntaxContext.SqlSyntaxProvider.GetDefinedIndexes(Context.Database) + .Select(x => new DbIndexDefinition() + { + TableName = x.Item1, + IndexName = x.Item2, + ColumnName = x.Item3, + IsUnique = x.Item4 + }).ToArray(); - //add an index to tag/group since it's queried often - Create.Index("IX_cmsTags").OnTable("cmsTags").OnColumn("tag").Ascending().OnColumn("group").Ascending().WithOptions().NonClustered(); + var constraints = SqlSyntaxContext.SqlSyntaxProvider.GetConstraintsPerColumn(Context.Database).DistinctBy(x => x.Item3).ToList(); + + //make sure it doesn't already exist + if (constraints.Any(x => x.Item3 == "FK_cmsTags_cmsTags") == false) + { + //add a foreign key to the parent id column too! + Create.ForeignKey("FK_cmsTags_cmsTags") + .FromTable("cmsTags") + .ForeignColumn("ParentId") + .ToTable("cmsTags") + .PrimaryColumn("id") + .OnDelete(Rule.None) + .OnUpdate(Rule.None); + } + + //make sure it doesn't already exist + if (dbIndexes.Any(x => x.IndexName == "IX_cmsTags") == false) + { + //add an index to tag/group since it's queried often + Create.Index("IX_cmsTags").OnTable("cmsTags").OnColumn("tag").Ascending().OnColumn("group").Ascending().WithOptions().NonClustered(); + } + } public override void Down()