From 59c3d6a2069e315afea163ee0ebbba346f12ec3d Mon Sep 17 00:00:00 2001 From: Claus Date: Thu, 4 Aug 2016 13:46:39 +0200 Subject: [PATCH 1/7] cleaning up migrations. we're deleting the table so no need to do a bunch of migration stuff instead of just compiling it into one migration deleting and creating the table again. --- .../AddRedirectUrlTable.cs | 37 +++++++---- .../AddRedirectUrlTable2.cs | 62 ------------------- .../AddRedirectUrlTable3.cs | 57 ----------------- .../AddRedirectUrlTable4.cs | 59 ------------------ .../Migrations/MigrationIssuesTests.cs | 5 +- 5 files changed, 26 insertions(+), 194 deletions(-) delete mode 100644 src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionSevenFiveZero/AddRedirectUrlTable2.cs delete mode 100644 src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionSevenFiveZero/AddRedirectUrlTable3.cs delete mode 100644 src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionSevenFiveZero/AddRedirectUrlTable4.cs diff --git a/src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionSevenFiveZero/AddRedirectUrlTable.cs b/src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionSevenFiveZero/AddRedirectUrlTable.cs index d667d2d91f..983d6709bb 100644 --- a/src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionSevenFiveZero/AddRedirectUrlTable.cs +++ b/src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionSevenFiveZero/AddRedirectUrlTable.cs @@ -1,7 +1,6 @@ using System.Linq; using Umbraco.Core.Configuration; using Umbraco.Core.Logging; -using Umbraco.Core.Persistence.Migrations.Syntax.Create; using Umbraco.Core.Persistence.SqlSyntax; namespace Umbraco.Core.Persistence.Migrations.Upgrades.TargetVersionSevenFiveZero @@ -21,24 +20,38 @@ namespace Umbraco.Core.Persistence.Migrations.Upgrades.TargetVersionSevenFiveZer private string MigrationCode(Database database) { - // don't execute if the table is already there - var tables = SqlSyntax.GetTablesInSchema(database).ToArray(); - if (tables.InvariantContains("umbracoRedirectUrl")) return null; + var umbracoRedirectUrlTableName = "umbracoRedirectUrl"; var localContext = new LocalMigrationContext(Context.CurrentDatabaseProvider, database, SqlSyntax, Logger); - localContext.Create.Table("umbracoRedirectUrl") - .WithColumn("id").AsInt32().Identity().PrimaryKey("PK_umbracoRedirectUrl") - .WithColumn("contentId").AsInt32().NotNullable() + var tables = SqlSyntax.GetTablesInSchema(database).ToArray(); + + if (tables.InvariantContains(umbracoRedirectUrlTableName)) + { + localContext.Delete.Table(umbracoRedirectUrlTableName); + } + + localContext.Create.Table(umbracoRedirectUrlTableName) + .WithColumn("id").AsGuid().NotNullable().PrimaryKey("PK_" + umbracoRedirectUrlTableName) .WithColumn("createDateUtc").AsDateTime().NotNullable() - .WithColumn("url").AsString(2048).NotNullable(); + .WithColumn("url").AsString(2048).NotNullable() + .WithColumn("contentKey").AsGuid().NotNullable() + .WithColumn("urlHash").AsString(16).NotNullable(); - localContext.Create.Index("IX_umbracoRedirectUrl") - .OnTable("umbracoRedirectUrl") - .OnColumn("url").Ascending() - .OnColumn("createDateUtc").Ascending() + localContext.Create.Index("IX_" + umbracoRedirectUrlTableName).OnTable(umbracoRedirectUrlTableName) + .OnColumn("urlHash") + .Ascending() + .OnColumn("contentKey") + .Ascending() + .OnColumn("createDateUtc") + .Descending() .WithOptions().NonClustered(); + localContext.Create.ForeignKey("FK_" + umbracoRedirectUrlTableName) + .FromTable(umbracoRedirectUrlTableName).ForeignColumn("contentKey") + .ToTable("umbracoNode").PrimaryColumn("uniqueID"); + + return localContext.GetSql(); } diff --git a/src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionSevenFiveZero/AddRedirectUrlTable2.cs b/src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionSevenFiveZero/AddRedirectUrlTable2.cs deleted file mode 100644 index 2ea854d824..0000000000 --- a/src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionSevenFiveZero/AddRedirectUrlTable2.cs +++ /dev/null @@ -1,62 +0,0 @@ -using System.Linq; -using Umbraco.Core.Configuration; -using Umbraco.Core.Logging; -using Umbraco.Core.Persistence.Migrations.Syntax.Alter; -using Umbraco.Core.Persistence.Migrations.Syntax.Create; -using Umbraco.Core.Persistence.Migrations.Syntax.Delete; -using Umbraco.Core.Persistence.Migrations.Syntax.Execute; -using Umbraco.Core.Persistence.SqlSyntax; - -namespace Umbraco.Core.Persistence.Migrations.Upgrades.TargetVersionSevenFiveZero -{ - [Migration("7.5.0", 101, GlobalSettings.UmbracoMigrationName)] - public class AddRedirectUrlTable2 : MigrationBase - { - public AddRedirectUrlTable2(ISqlSyntaxProvider sqlSyntax, ILogger logger) - : base(sqlSyntax, logger) - { } - - public override void Up() - { - // defer, because we are making decisions based upon what's in the database - Execute.Code(MigrationCode); - } - - private string MigrationCode(Database database) - { - var columns = SqlSyntax.GetColumnsInSchema(database).ToArray(); - - if (columns.Any(x => x.TableName.InvariantEquals("umbracoRedirectUrl") && x.ColumnName.InvariantEquals("contentKey"))) - return null; - - var localContext = new LocalMigrationContext(Context.CurrentDatabaseProvider, database, SqlSyntax, Logger); - - localContext.Execute.Sql("DELETE FROM umbracoRedirectUrl"); // else cannot add non-nullable field - - var keyConstraints = SqlSyntax.GetConstraintsPerColumn(database).Distinct(); - var fk= keyConstraints - .SingleOrDefault(x => x.Item1 == "umbracoRedirectUrl" && x.Item2 == "contentId" && x.Item3.InvariantStartsWith("PK_") == false); - if (fk != null) - localContext.Delete.ForeignKey(fk.Item3).OnTable("umbracoRedirectUrl"); - localContext.Delete.Column("contentId").FromTable("umbracoRedirectUrl"); - - // SQL CE does not want to alter-add non-nullable columns ;-( - // but it's OK to create as nullable then alter, go figure - //localContext.Alter.Table("umbracoRedirectUrl") - // .AddColumn("contentKey").AsGuid().NotNullable(); - localContext.Alter.Table("umbracoRedirectUrl") - .AddColumn("contentKey").AsGuid().Nullable(); - localContext.Alter.Table("umbracoRedirectUrl") - .AlterColumn("contentKey").AsGuid().NotNullable(); - - localContext.Create.ForeignKey("FK_umbracoRedirectUrl") - .FromTable("umbracoRedirectUrl").ForeignColumn("contentKey") - .ToTable("umbracoNode").PrimaryColumn("uniqueID"); - - return localContext.GetSql(); - } - - public override void Down() - { } - } -} diff --git a/src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionSevenFiveZero/AddRedirectUrlTable3.cs b/src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionSevenFiveZero/AddRedirectUrlTable3.cs deleted file mode 100644 index a9550301b2..0000000000 --- a/src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionSevenFiveZero/AddRedirectUrlTable3.cs +++ /dev/null @@ -1,57 +0,0 @@ -using System.Linq; -using Umbraco.Core.Configuration; -using Umbraco.Core.Logging; -using Umbraco.Core.Persistence.SqlSyntax; - -namespace Umbraco.Core.Persistence.Migrations.Upgrades.TargetVersionSevenFiveZero -{ - [Migration("7.5.0", 102, GlobalSettings.UmbracoMigrationName)] - public class AddRedirectUrlTable3 : MigrationBase - { - public AddRedirectUrlTable3(ISqlSyntaxProvider sqlSyntax, ILogger logger) - : base(sqlSyntax, logger) - { } - - public override void Up() - { - // defer, because we are making decisions based upon what's in the database - Execute.Code(MigrationCode); - } - private string MigrationCode(Database database) - { - var columns = SqlSyntax.GetColumnsInSchema(database).ToArray(); - - if (columns.Any(x => x.TableName.InvariantEquals("umbracoRedirectUrl") && x.ColumnName.InvariantEquals("hurl"))) - return null; - - var localContext = new LocalMigrationContext(Context.CurrentDatabaseProvider, database, SqlSyntax, Logger); - - localContext.Execute.Sql("DELETE FROM umbracoRedirectUrl"); // else cannot add non-nullable field - - localContext.Delete.Index("IX_umbracoRedirectUrl").OnTable("umbracoRedirectUrl"); - - // SQL CE does not want to alter-add non-nullable columns ;-( - // but it's OK to create as nullable then alter, go figure - //localContext.Alter.Table("umbracoRedirectUrl") - // .AddColumn("urlHash").AsString(16).NotNullable(); - localContext.Alter.Table("umbracoRedirectUrl") - .AddColumn("hurl").AsString(16).Nullable(); - localContext.Alter.Table("umbracoRedirectUrl") - .AlterColumn("hurl").AsString(16).NotNullable(); - - localContext.Create.Index("IX_umbracoRedirectUrl").OnTable("umbracoRedirectUrl") - .OnColumn("hurl") - .Ascending() - .OnColumn("contentKey") - .Ascending() - .OnColumn("createDateUtc") - .Descending() - .WithOptions().NonClustered(); - - return localContext.GetSql(); - } - - public override void Down() - { } - } -} diff --git a/src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionSevenFiveZero/AddRedirectUrlTable4.cs b/src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionSevenFiveZero/AddRedirectUrlTable4.cs deleted file mode 100644 index e4724fc48f..0000000000 --- a/src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionSevenFiveZero/AddRedirectUrlTable4.cs +++ /dev/null @@ -1,59 +0,0 @@ -using System.Linq; -using Umbraco.Core.Configuration; -using Umbraco.Core.Logging; -using Umbraco.Core.Persistence.SqlSyntax; - -namespace Umbraco.Core.Persistence.Migrations.Upgrades.TargetVersionSevenFiveZero -{ - [Migration("7.5.0", 103, GlobalSettings.UmbracoMigrationName)] - public class AddRedirectUrlTable4 : MigrationBase - { - public AddRedirectUrlTable4(ISqlSyntaxProvider sqlSyntax, ILogger logger) - : base(sqlSyntax, logger) - { } - - public override void Up() - { - // defer, because we are making decisions based upon what's in the database - Execute.Code(MigrationCode); - } - private string MigrationCode(Database database) - { - var columns = SqlSyntax.GetColumnsInSchema(database).ToArray(); - - if (columns.Any(x => x.TableName.InvariantEquals("umbracoRedirectUrl") && x.ColumnName.InvariantEquals("urlHash"))) - return null; - - var localContext = new LocalMigrationContext(Context.CurrentDatabaseProvider, database, SqlSyntax, Logger); - - localContext.Execute.Sql("DELETE FROM umbracoRedirectUrl"); // else cannot add non-nullable field - - localContext.Delete.Index("IX_umbracoRedirectUrl").OnTable("umbracoRedirectUrl"); - - localContext.Delete.Column("hurl").FromTable("umbracoRedirectUrl"); - - // SQL CE does not want to alter-add non-nullable columns ;-( - // but it's OK to create as nullable then alter, go figure - //localContext.Alter.Table("umbracoRedirectUrl") - // .AddColumn("urlHash").AsString(16).NotNullable(); - localContext.Alter.Table("umbracoRedirectUrl") - .AddColumn("urlHash").AsString(16).Nullable(); - localContext.Alter.Table("umbracoRedirectUrl") - .AlterColumn("urlHash").AsString(16).NotNullable(); - - localContext.Create.Index("IX_umbracoRedirectUrl").OnTable("umbracoRedirectUrl") - .OnColumn("urlHash") - .Ascending() - .OnColumn("contentKey") - .Ascending() - .OnColumn("createDateUtc") - .Descending() - .WithOptions().NonClustered(); - - return localContext.GetSql(); - } - - public override void Down() - { } - } -} diff --git a/src/Umbraco.Tests/Migrations/MigrationIssuesTests.cs b/src/Umbraco.Tests/Migrations/MigrationIssuesTests.cs index d122a3cd25..26db7ef58c 100644 --- a/src/Umbraco.Tests/Migrations/MigrationIssuesTests.cs +++ b/src/Umbraco.Tests/Migrations/MigrationIssuesTests.cs @@ -119,10 +119,7 @@ namespace Umbraco.Tests.Migrations //pass in explicit migrations new DeleteRedirectUrlTable(SqlSyntax, logger), - new AddRedirectUrlTable(SqlSyntax, logger), - new AddRedirectUrlTable2(SqlSyntax, logger), - new AddRedirectUrlTable3(SqlSyntax, logger), - new AddRedirectUrlTable4(SqlSyntax, logger) + new AddRedirectUrlTable(SqlSyntax, logger) ); var db = new UmbracoDatabase("Datasource=|DataDirectory|UmbracoPetaPocoTests.sdf;Flush Interval=1;", "System.Data.SqlServerCe.4.0", Logger); From 66c0d9dc1228f58f5affb6d815da1bd98c2bb087 Mon Sep 17 00:00:00 2001 From: Claus Date: Thu, 4 Aug 2016 13:47:27 +0200 Subject: [PATCH 2/7] removing migrations from solution --- src/Umbraco.Core/Umbraco.Core.csproj | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/Umbraco.Core/Umbraco.Core.csproj b/src/Umbraco.Core/Umbraco.Core.csproj index 5faa31a241..d6b9d4e570 100644 --- a/src/Umbraco.Core/Umbraco.Core.csproj +++ b/src/Umbraco.Core/Umbraco.Core.csproj @@ -427,9 +427,6 @@ - - - From ccaa198e257914d8e2e30894d3d36c94a1321128 Mon Sep 17 00:00:00 2001 From: Claus Date: Thu, 4 Aug 2016 13:51:17 +0200 Subject: [PATCH 3/7] changing integer IDs to guid for RedirectUrls. --- src/Umbraco.Core/Models/Rdbms/RedirectUrlDto.cs | 6 +++--- .../Interfaces/IRedirectUrlRepository.cs | 4 ++-- .../Repositories/RedirectUrlRepository.cs | 16 ++++++++-------- src/Umbraco.Core/Services/IRedirectUrlService.cs | 2 +- src/Umbraco.Core/Services/RedirectUrlService.cs | 4 ++-- 5 files changed, 16 insertions(+), 16 deletions(-) diff --git a/src/Umbraco.Core/Models/Rdbms/RedirectUrlDto.cs b/src/Umbraco.Core/Models/Rdbms/RedirectUrlDto.cs index b23c75aa4b..ed720e8bc1 100644 --- a/src/Umbraco.Core/Models/Rdbms/RedirectUrlDto.cs +++ b/src/Umbraco.Core/Models/Rdbms/RedirectUrlDto.cs @@ -5,7 +5,7 @@ using Umbraco.Core.Persistence.DatabaseAnnotations; namespace Umbraco.Core.Models.Rdbms { [TableName("umbracoRedirectUrl")] - [PrimaryKey("id")] + [PrimaryKey("id", autoIncrement = false)] [ExplicitColumns] class RedirectUrlDto { @@ -22,8 +22,8 @@ namespace Umbraco.Core.Models.Rdbms // inserts, and much faster on reads, so... we have an index on a hash. [Column("id")] - [PrimaryKeyColumn(IdentitySeed = 1, Name = "PK_umbracoRedirectUrl")] - public int Id { get; set; } + [PrimaryKeyColumn(Name = "PK_umbracoRedirectUrl", AutoIncrement = false)] + public Guid Id { get; set; } [ResultColumn] public int ContentId { get; set; } diff --git a/src/Umbraco.Core/Persistence/Repositories/Interfaces/IRedirectUrlRepository.cs b/src/Umbraco.Core/Persistence/Repositories/Interfaces/IRedirectUrlRepository.cs index 82f2e0e516..963128b7da 100644 --- a/src/Umbraco.Core/Persistence/Repositories/Interfaces/IRedirectUrlRepository.cs +++ b/src/Umbraco.Core/Persistence/Repositories/Interfaces/IRedirectUrlRepository.cs @@ -7,7 +7,7 @@ namespace Umbraco.Core.Persistence.Repositories /// /// Defines the repository. /// - public interface IRedirectUrlRepository : IRepositoryQueryable + public interface IRedirectUrlRepository : IRepositoryQueryable { /// /// Gets a redirect url. @@ -21,7 +21,7 @@ namespace Umbraco.Core.Persistence.Repositories /// Deletes a redirect url. /// /// The redirect url identifier. - void Delete(int id); + void Delete(Guid id); /// /// Deletes all redirect urls. diff --git a/src/Umbraco.Core/Persistence/Repositories/RedirectUrlRepository.cs b/src/Umbraco.Core/Persistence/Repositories/RedirectUrlRepository.cs index d66a08c129..eee1ae7a3e 100644 --- a/src/Umbraco.Core/Persistence/Repositories/RedirectUrlRepository.cs +++ b/src/Umbraco.Core/Persistence/Repositories/RedirectUrlRepository.cs @@ -12,7 +12,7 @@ using Umbraco.Core.Persistence.UnitOfWork; namespace Umbraco.Core.Persistence.Repositories { - internal class RedirectUrlRepository : PetaPocoRepositoryBase, IRedirectUrlRepository + internal class RedirectUrlRepository : PetaPocoRepositoryBase, IRedirectUrlRepository { public RedirectUrlRepository(IDatabaseUnitOfWork work, CacheHelper cache, ILogger logger, ISqlSyntaxProvider sqlSyntax) : base(work, cache, logger, sqlSyntax) @@ -23,19 +23,19 @@ namespace Umbraco.Core.Persistence.Repositories throw new NotSupportedException("This repository does not support this method."); } - protected override bool PerformExists(int id) + protected override bool PerformExists(Guid id) { return PerformGet(id) != null; } - protected override IRedirectUrl PerformGet(int id) + protected override IRedirectUrl PerformGet(Guid id) { var sql = GetBaseQuery(false).Where(x => x.Id == id); var dto = Database.Fetch(SqlSyntax.SelectTop(sql, 1)).FirstOrDefault(); return dto == null ? null : Map(dto); } - protected override IEnumerable PerformGetAll(params int[] ids) + protected override IEnumerable PerformGetAll(params Guid[] ids) { if (ids.Length > 2000) throw new NotSupportedException("This repository does not support more than 2000 ids."); @@ -86,7 +86,7 @@ JOIN umbracoNode ON umbracoRedirectUrl.contentKey=umbracoNode.uniqueID"); { var dto = Map(entity); Database.Insert(dto); - entity.Id = dto.Id; + entity.Id = entity.Key.GetHashCode(); } protected override void PersistUpdatedItem(IRedirectUrl entity) @@ -101,7 +101,7 @@ JOIN umbracoNode ON umbracoRedirectUrl.contentKey=umbracoNode.uniqueID"); return new RedirectUrlDto { - Id = redirectUrl.Id, + Id = redirectUrl.Key, ContentKey = redirectUrl.ContentKey, CreateDateUtc = redirectUrl.CreateDateUtc, Url = redirectUrl.Url, @@ -117,7 +117,7 @@ JOIN umbracoNode ON umbracoRedirectUrl.contentKey=umbracoNode.uniqueID"); try { url.DisableChangeTracking(); - url.Id = dto.Id; + url.Id = dto.Id.GetHashCode(); url.ContentId = dto.ContentId; url.ContentKey = dto.ContentKey; url.CreateDateUtc = dto.CreateDateUtc; @@ -148,7 +148,7 @@ JOIN umbracoNode ON umbracoRedirectUrl.contentKey=umbracoNode.uniqueID"); Database.Execute("DELETE FROM umbracoRedirectUrl WHERE contentKey=@contentKey", new { contentKey }); } - public void Delete(int id) + public void Delete(Guid id) { Database.Delete(id); } diff --git a/src/Umbraco.Core/Services/IRedirectUrlService.cs b/src/Umbraco.Core/Services/IRedirectUrlService.cs index 7b21fa9bb7..d359958d63 100644 --- a/src/Umbraco.Core/Services/IRedirectUrlService.cs +++ b/src/Umbraco.Core/Services/IRedirectUrlService.cs @@ -33,7 +33,7 @@ namespace Umbraco.Core.Services /// Deletes a redirect url. /// /// The redirect url identifier. - void Delete(int id); + void Delete(Guid id); /// /// Deletes all redirect urls. diff --git a/src/Umbraco.Core/Services/RedirectUrlService.cs b/src/Umbraco.Core/Services/RedirectUrlService.cs index de698509d0..723532665a 100644 --- a/src/Umbraco.Core/Services/RedirectUrlService.cs +++ b/src/Umbraco.Core/Services/RedirectUrlService.cs @@ -23,7 +23,7 @@ namespace Umbraco.Core.Services if (redir != null) redir.CreateDateUtc = DateTime.UtcNow; else - redir = new RedirectUrl { Url = url, ContentKey = contentKey }; + redir = new RedirectUrl { Key = Guid.NewGuid(), Url = url, ContentKey = contentKey }; repo.AddOrUpdate(redir); uow.Commit(); } @@ -39,7 +39,7 @@ namespace Umbraco.Core.Services } } - public void Delete(int id) + public void Delete(Guid id) { using (var uow = UowProvider.GetUnitOfWork()) using (var repo = RepositoryFactory.CreateRedirectUrlRepository(uow)) From ba11de51e329f55c0856238aa22f4dacd6a4b2fb Mon Sep 17 00:00:00 2001 From: Claus Date: Thu, 4 Aug 2016 15:18:38 +0200 Subject: [PATCH 4/7] deleting through the recycle bin also deletes redirect urls. --- .../Persistence/Repositories/RecycleBinRepository.cs | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/Umbraco.Core/Persistence/Repositories/RecycleBinRepository.cs b/src/Umbraco.Core/Persistence/Repositories/RecycleBinRepository.cs index be1f03a73f..f17a0dd0d2 100644 --- a/src/Umbraco.Core/Persistence/Repositories/RecycleBinRepository.cs +++ b/src/Umbraco.Core/Persistence/Repositories/RecycleBinRepository.cs @@ -49,6 +49,10 @@ namespace Umbraco.Core.Persistence.Repositories INNER JOIN umbracoNode as TB2 ON TB1.nodeId = TB2.id WHERE TB2.trashed = '1' AND TB2.nodeObjectType = @NodeObjectType)", FormatDeleteStatement("umbracoAccess", "nodeId"), + @"DELETE FROM umbracoRedirectUrl WHERE umbracoRedirectUrl.id IN( + SELECT TB1.id FROM umbracoRedirectUrl as TB1 + INNER JOIN umbracoNode as TB2 ON TB1.contentKey = TB2.uniqueId + WHERE TB2.trashed = '1' AND TB2.nodeObjectType = @NodeObjectType)", FormatDeleteStatement("umbracoRelation", "parentId"), FormatDeleteStatement("umbracoRelation", "childId"), FormatDeleteStatement("cmsTagRelationship", "nodeId"), From ae0ad2becfbcaf171d3c0ad153b02684dd4968cd Mon Sep 17 00:00:00 2001 From: Claus Date: Thu, 4 Aug 2016 15:23:57 +0200 Subject: [PATCH 5/7] switching to sha1 instead of md5. --- .../Persistence/Repositories/RedirectUrlRepository.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Umbraco.Core/Persistence/Repositories/RedirectUrlRepository.cs b/src/Umbraco.Core/Persistence/Repositories/RedirectUrlRepository.cs index eee1ae7a3e..2c608592b8 100644 --- a/src/Umbraco.Core/Persistence/Repositories/RedirectUrlRepository.cs +++ b/src/Umbraco.Core/Persistence/Repositories/RedirectUrlRepository.cs @@ -196,7 +196,7 @@ JOIN umbracoNode ON umbracoRedirectUrl.contentKey=umbracoNode.uniqueID"); private static string HashUrl(string url) { - using (var crypto = new MD5CryptoServiceProvider()) + using (var crypto = new SHA1CryptoServiceProvider()) { var inputBytes = Encoding.UTF8.GetBytes(url); var hashedBytes = crypto.ComputeHash(inputBytes); From 6c271d92f98bfc5a9250a8abf878e0d286f69885 Mon Sep 17 00:00:00 2001 From: Claus Date: Fri, 5 Aug 2016 08:25:58 +0200 Subject: [PATCH 6/7] migration should only delete table if it is using a integer id, otherwise leave it alone. --- .../TargetVersionSevenFiveZero/AddRedirectUrlTable.cs | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionSevenFiveZero/AddRedirectUrlTable.cs b/src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionSevenFiveZero/AddRedirectUrlTable.cs index 983d6709bb..d600cc30a4 100644 --- a/src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionSevenFiveZero/AddRedirectUrlTable.cs +++ b/src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionSevenFiveZero/AddRedirectUrlTable.cs @@ -28,9 +28,12 @@ namespace Umbraco.Core.Persistence.Migrations.Upgrades.TargetVersionSevenFiveZer if (tables.InvariantContains(umbracoRedirectUrlTableName)) { + var columns = SqlSyntax.GetColumnsInSchema(database).ToArray(); + if (columns.Any(x => x.TableName.InvariantEquals(umbracoRedirectUrlTableName) && x.ColumnName.InvariantEquals("id") && x.DataType == "uniqueidentifier")) + return null; localContext.Delete.Table(umbracoRedirectUrlTableName); } - + localContext.Create.Table(umbracoRedirectUrlTableName) .WithColumn("id").AsGuid().NotNullable().PrimaryKey("PK_" + umbracoRedirectUrlTableName) .WithColumn("createDateUtc").AsDateTime().NotNullable() @@ -51,7 +54,6 @@ namespace Umbraco.Core.Persistence.Migrations.Upgrades.TargetVersionSevenFiveZer .FromTable(umbracoRedirectUrlTableName).ForeignColumn("contentKey") .ToTable("umbracoNode").PrimaryColumn("uniqueID"); - return localContext.GetSql(); } From 3dcba7a6b0bbcb4effa4dc56880c2d4e8f902cba Mon Sep 17 00:00:00 2001 From: Sebastiaan Janssen Date: Fri, 5 Aug 2016 11:51:08 +0200 Subject: [PATCH 7/7] urlHash column has to be 20 chars because SHA1 uses more bytes than MD5 --- .../Upgrades/TargetVersionSevenFiveZero/AddRedirectUrlTable.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionSevenFiveZero/AddRedirectUrlTable.cs b/src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionSevenFiveZero/AddRedirectUrlTable.cs index d600cc30a4..ce6af9186c 100644 --- a/src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionSevenFiveZero/AddRedirectUrlTable.cs +++ b/src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionSevenFiveZero/AddRedirectUrlTable.cs @@ -39,7 +39,7 @@ namespace Umbraco.Core.Persistence.Migrations.Upgrades.TargetVersionSevenFiveZer .WithColumn("createDateUtc").AsDateTime().NotNullable() .WithColumn("url").AsString(2048).NotNullable() .WithColumn("contentKey").AsGuid().NotNullable() - .WithColumn("urlHash").AsString(16).NotNullable(); + .WithColumn("urlHash").AsString(20).NotNullable(); localContext.Create.Index("IX_" + umbracoRedirectUrlTableName).OnTable(umbracoRedirectUrlTableName) .OnColumn("urlHash")