From dc2de4b5e7ba913d31cebb477b04fde488af097a Mon Sep 17 00:00:00 2001 From: Floris Robbemont Date: Wed, 7 Aug 2013 15:06:41 +0200 Subject: [PATCH 1/3] U4-2596: UmbracoControllerFactory method ReleaseController should be virtual --- src/Umbraco.Web/Mvc/UmbracoControllerFactory.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Umbraco.Web/Mvc/UmbracoControllerFactory.cs b/src/Umbraco.Web/Mvc/UmbracoControllerFactory.cs index 63eaaa5e9a..02ff701c8b 100644 --- a/src/Umbraco.Web/Mvc/UmbracoControllerFactory.cs +++ b/src/Umbraco.Web/Mvc/UmbracoControllerFactory.cs @@ -54,7 +54,7 @@ namespace Umbraco.Web.Mvc /// Releases the specified controller. /// /// The controller. - public void ReleaseController(IController controller) + public virtual void ReleaseController(IController controller) { _innerFactory.ReleaseController(controller); } From 89ff7d85e2336a7be4c6c39f8a07e09bf6174beb Mon Sep 17 00:00:00 2001 From: Morten Christensen Date: Fri, 9 Aug 2013 17:44:57 +0200 Subject: [PATCH 2/3] Correcting DELETE FROM query so it works with sql ce as well. --- .../Persistence/Repositories/RecycleBinRepository.cs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/Umbraco.Core/Persistence/Repositories/RecycleBinRepository.cs b/src/Umbraco.Core/Persistence/Repositories/RecycleBinRepository.cs index c62a1c71f6..2c797416ef 100644 --- a/src/Umbraco.Core/Persistence/Repositories/RecycleBinRepository.cs +++ b/src/Umbraco.Core/Persistence/Repositories/RecycleBinRepository.cs @@ -116,9 +116,12 @@ namespace Umbraco.Core.Persistence.Repositories private string FormatDeleteStatement(string tableName, string keyName) { + //This query works with sql ce and sql server: + //DELETE FROM umbracoUser2NodeNotify WHERE umbracoUser2NodeNotify.nodeId IN + //(SELECT nodeId FROM umbracoUser2NodeNotify as TB1 INNER JOIN umbracoNode as TB2 ON TB1.nodeId = TB2.id WHERE TB2.trashed = '1' AND TB2.nodeObjectType = 'C66BA18E-EAF3-4CFF-8A22-41B16D66A972') return string.Format( - "DELETE FROM {0} FROM {0} as TB1 INNER JOIN umbracoNode as TB2 ON TB1.{1} = TB2.id WHERE TB2.trashed = '1' AND TB2.nodeObjectType = @NodeObjectType", + "DELETE FROM {0} WHERE {0}.{1} IN (SELECT TB1.{1} FROM {0} as TB1 INNER JOIN umbracoNode as TB2 ON TB1.{1} = TB2.id WHERE TB2.trashed = '1' AND TB2.nodeObjectType = @NodeObjectType)", tableName, keyName); } From 30e12c1367357ac05bb7b265b0f4d8e71ed3b47d Mon Sep 17 00:00:00 2001 From: Morten Christensen Date: Sun, 11 Aug 2013 21:12:02 +0200 Subject: [PATCH 3/3] Final piece to the puzzle for U4-2571 Need to optimize empty recycle bin. Needed to hack around the ordering of items in the recycle bin because of the self-referencing constraint - parentID to id in the umbracoNode table by updating all parentID entries, which bypasses any reference issues with the foreignkey. --- .../Persistence/Repositories/RecycleBinRepository.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/src/Umbraco.Core/Persistence/Repositories/RecycleBinRepository.cs b/src/Umbraco.Core/Persistence/Repositories/RecycleBinRepository.cs index 2c797416ef..febfb937b0 100644 --- a/src/Umbraco.Core/Persistence/Repositories/RecycleBinRepository.cs +++ b/src/Umbraco.Core/Persistence/Repositories/RecycleBinRepository.cs @@ -56,6 +56,7 @@ namespace Umbraco.Core.Persistence.Repositories FormatDeleteStatement("cmsContentVersion", "ContentId"), FormatDeleteStatement("cmsContentXml", "nodeID"), FormatDeleteStatement("cmsContent", "NodeId"), + "UPDATE umbracoNode SET parentID = '-20' WHERE trashed = '1' AND nodeObjectType = @NodeObjectType", "DELETE FROM umbracoNode WHERE trashed = '1' AND nodeObjectType = @NodeObjectType" };