From 085a678266b87dc92b20cbf845d1414db22916ec Mon Sep 17 00:00:00 2001 From: Stephan Date: Thu, 23 Mar 2017 17:44:07 +0100 Subject: [PATCH 1/3] U4-9617 - perf for published date --- src/Umbraco.Core/Models/Content.cs | 3 +++ .../Rdbms/DocumentPublishedReadOnlyDto.cs | 3 +++ .../Persistence/Factories/ContentFactory.cs | 3 +++ .../Repositories/ContentRepository.cs | 7 ++++-- .../Models/Mapping/ContentModelMapper.cs | 22 +------------------ 5 files changed, 15 insertions(+), 23 deletions(-) diff --git a/src/Umbraco.Core/Models/Content.cs b/src/Umbraco.Core/Models/Content.cs index ec73e1ff5e..cef06ec4f7 100644 --- a/src/Umbraco.Core/Models/Content.cs +++ b/src/Umbraco.Core/Models/Content.cs @@ -274,6 +274,9 @@ namespace Umbraco.Core.Models /// public bool HasPublishedVersion { get { return PublishedVersionGuid != default(Guid); } } + [IgnoreDataMember] + internal DateTime PublishedDate { get; set; } + /// /// Changes the Trashed state of the content object /// diff --git a/src/Umbraco.Core/Models/Rdbms/DocumentPublishedReadOnlyDto.cs b/src/Umbraco.Core/Models/Rdbms/DocumentPublishedReadOnlyDto.cs index 4a7e359d91..7c6507f499 100644 --- a/src/Umbraco.Core/Models/Rdbms/DocumentPublishedReadOnlyDto.cs +++ b/src/Umbraco.Core/Models/Rdbms/DocumentPublishedReadOnlyDto.cs @@ -19,5 +19,8 @@ namespace Umbraco.Core.Models.Rdbms [Column("newest")] public bool Newest { get; set; } + + [Column("updateDate")] + public DateTime VersionDate { get; set; } } } \ No newline at end of file diff --git a/src/Umbraco.Core/Persistence/Factories/ContentFactory.cs b/src/Umbraco.Core/Persistence/Factories/ContentFactory.cs index 0532eab6b1..512f02e8b5 100644 --- a/src/Umbraco.Core/Persistence/Factories/ContentFactory.cs +++ b/src/Umbraco.Core/Persistence/Factories/ContentFactory.cs @@ -72,6 +72,9 @@ namespace Umbraco.Core.Persistence.Factories content.PublishedVersionGuid = publishedDto == null ? (dto.DocumentPublishedReadOnlyDto == null ? default(Guid) : dto.DocumentPublishedReadOnlyDto.VersionId) : publishedDto.VersionId; + content.PublishedDate = publishedDto == null + ? (dto.DocumentPublishedReadOnlyDto == null ? default(DateTime) : dto.DocumentPublishedReadOnlyDto.VersionDate) + : publishedDto.VersionDate; //on initial construction we don't want to have dirty properties tracked // http://issues.umbraco.org/issue/U4-1946 diff --git a/src/Umbraco.Core/Persistence/Repositories/ContentRepository.cs b/src/Umbraco.Core/Persistence/Repositories/ContentRepository.cs index f95c295243..b5d3fb6986 100644 --- a/src/Umbraco.Core/Persistence/Repositories/ContentRepository.cs +++ b/src/Umbraco.Core/Persistence/Repositories/ContentRepository.cs @@ -513,9 +513,10 @@ namespace Umbraco.Core.Persistence.Repositories dto.DocumentPublishedReadOnlyDto = new DocumentPublishedReadOnlyDto { VersionId = dto.VersionId, + VersionDate = dto.UpdateDate, Newest = true, NodeId = dto.NodeId, - Published = true + Published = true }; ((Content)entity).PublishedVersionGuid = dto.VersionId; } @@ -687,6 +688,7 @@ namespace Umbraco.Core.Persistence.Repositories dto.DocumentPublishedReadOnlyDto = new DocumentPublishedReadOnlyDto { VersionId = dto.VersionId, + VersionDate = dto.UpdateDate, Newest = true, NodeId = dto.NodeId, Published = true @@ -698,6 +700,7 @@ namespace Umbraco.Core.Persistence.Repositories dto.DocumentPublishedReadOnlyDto = new DocumentPublishedReadOnlyDto { VersionId = default(Guid), + VersionDate = default(DateTime), Newest = false, NodeId = dto.NodeId, Published = false @@ -974,7 +977,7 @@ order by umbracoNode.{2}, umbracoNode.parentID, umbracoNode.sortOrder", } //order by update date DESC, if there is corrupted published flags we only want the latest! - var publishedSql = new Sql(@"SELECT cmsDocument.nodeId, cmsDocument.published, cmsDocument.versionId, cmsDocument.newest + var publishedSql = new Sql(@"SELECT cmsDocument.nodeId, cmsDocument.published, cmsDocument.versionId, cmsDocument.updateDate, cmsDocument.newest FROM cmsDocument INNER JOIN cmsContentVersion ON cmsContentVersion.VersionId = cmsDocument.versionId WHERE cmsDocument.published = 1 AND cmsDocument.nodeId IN (" + parsedOriginalSql + @") diff --git a/src/Umbraco.Web/Models/Mapping/ContentModelMapper.cs b/src/Umbraco.Web/Models/Mapping/ContentModelMapper.cs index e179159e7c..b95fefe6f9 100644 --- a/src/Umbraco.Web/Models/Mapping/ContentModelMapper.cs +++ b/src/Umbraco.Web/Models/Mapping/ContentModelMapper.cs @@ -36,7 +36,7 @@ namespace Umbraco.Web.Models.Mapping .ForMember(display => display.IsContainer, expression => expression.MapFrom(content => content.ContentType.IsContainer)) .ForMember(display => display.IsChildOfListView, expression => expression.Ignore()) .ForMember(display => display.Trashed, expression => expression.MapFrom(content => content.Trashed)) - .ForMember(display => display.PublishDate, expression => expression.MapFrom(content => GetPublishedDate(content, applicationContext))) + .ForMember(display => display.PublishDate, expression => expression.MapFrom(content => ((Content)content).PublishedDate)) .ForMember(display => display.TemplateAlias, expression => expression.MapFrom(content => content.Template.Alias)) .ForMember(display => display.HasPublishedVersion, expression => expression.MapFrom(content => content.HasPublishedVersion)) .ForMember(display => display.Urls, @@ -222,26 +222,6 @@ namespace Umbraco.Web.Models.Mapping }); } - /// - /// Gets the published date value for the IContent object - /// - /// - /// - /// - private static DateTime? GetPublishedDate(IContent content, ApplicationContext applicationContext) - { - if (content.Published) - { - return content.UpdateDate; - } - if (content.HasPublishedVersion) - { - var published = applicationContext.Services.ContentService.GetPublishedVersion(content.Id); - return published.UpdateDate; - } - return null; - } - /// /// Creates the list of action buttons allowed for this user - Publish, Send to publish, save, unpublish returned as the button's 'letter' /// From a23c1507383de522156a1b9c085639fb41207fc3 Mon Sep 17 00:00:00 2001 From: Stephan Date: Thu, 23 Mar 2017 17:51:30 +0100 Subject: [PATCH 2/3] U4-9617 - fix --- src/Umbraco.Web/Models/Mapping/ContentModelMapper.cs | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/Umbraco.Web/Models/Mapping/ContentModelMapper.cs b/src/Umbraco.Web/Models/Mapping/ContentModelMapper.cs index b95fefe6f9..737d38096e 100644 --- a/src/Umbraco.Web/Models/Mapping/ContentModelMapper.cs +++ b/src/Umbraco.Web/Models/Mapping/ContentModelMapper.cs @@ -36,7 +36,7 @@ namespace Umbraco.Web.Models.Mapping .ForMember(display => display.IsContainer, expression => expression.MapFrom(content => content.ContentType.IsContainer)) .ForMember(display => display.IsChildOfListView, expression => expression.Ignore()) .ForMember(display => display.Trashed, expression => expression.MapFrom(content => content.Trashed)) - .ForMember(display => display.PublishDate, expression => expression.MapFrom(content => ((Content)content).PublishedDate)) + .ForMember(display => display.PublishDate, expression => expression.MapFrom(content => GetPublishedDate(content))) .ForMember(display => display.TemplateAlias, expression => expression.MapFrom(content => content.Template.Alias)) .ForMember(display => display.HasPublishedVersion, expression => expression.MapFrom(content => content.HasPublishedVersion)) .ForMember(display => display.Urls, @@ -75,6 +75,12 @@ namespace Umbraco.Web.Models.Mapping .ForMember(dto => dto.Alias, expression => expression.Ignore()); } + private static DateTime? GetPublishedDate(IContent content) + { + var date = ((Content) content).PublishedDate; + return date == default (DateTime) ? (DateTime?) null : date; + } + /// /// Maps the generic tab with custom properties for content /// From af10ae9e343a02e46f229cfbf3e208822dc87698 Mon Sep 17 00:00:00 2001 From: Stephan Date: Thu, 23 Mar 2017 18:00:58 +0100 Subject: [PATCH 3/3] U4-9617 - fix --- .../Persistence/Repositories/ContentRepository.cs | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/src/Umbraco.Core/Persistence/Repositories/ContentRepository.cs b/src/Umbraco.Core/Persistence/Repositories/ContentRepository.cs index b5d3fb6986..ed55bbeeb1 100644 --- a/src/Umbraco.Core/Persistence/Repositories/ContentRepository.cs +++ b/src/Umbraco.Core/Persistence/Repositories/ContentRepository.cs @@ -518,7 +518,8 @@ namespace Umbraco.Core.Persistence.Repositories NodeId = dto.NodeId, Published = true }; - ((Content)entity).PublishedVersionGuid = dto.VersionId; + ((Content) entity).PublishedVersionGuid = dto.VersionId; + ((Content) entity).PublishedDate = dto.UpdateDate; } entity.ResetDirtyProperties(); @@ -693,19 +694,21 @@ namespace Umbraco.Core.Persistence.Repositories NodeId = dto.NodeId, Published = true }; - ((Content)entity).PublishedVersionGuid = dto.VersionId; + ((Content) entity).PublishedVersionGuid = dto.VersionId; + ((Content) entity).PublishedDate = dto.UpdateDate; } else if (publishedStateChanged) { dto.DocumentPublishedReadOnlyDto = new DocumentPublishedReadOnlyDto { - VersionId = default(Guid), - VersionDate = default(DateTime), + VersionId = default (Guid), + VersionDate = default (DateTime), Newest = false, NodeId = dto.NodeId, Published = false }; - ((Content)entity).PublishedVersionGuid = default(Guid); + ((Content) entity).PublishedVersionGuid = default(Guid); + ((Content) entity).PublishedDate = default (DateTime); } entity.ResetDirtyProperties();