From 808e58b60f97e7b2a7015656bfffd293bed22a6e Mon Sep 17 00:00:00 2001 From: Shannon Date: Fri, 22 Jan 2021 16:14:25 +1100 Subject: [PATCH] fixes up inconsistencies --- src/Umbraco.Core/Constants-SqlTemplates.cs | 6 ++-- .../NuCache/DataSource/DatabaseDataSource.cs | 28 +++++++++++++------ 2 files changed, 23 insertions(+), 11 deletions(-) diff --git a/src/Umbraco.Core/Constants-SqlTemplates.cs b/src/Umbraco.Core/Constants-SqlTemplates.cs index 940524cd1a..8529e6bfbc 100644 --- a/src/Umbraco.Core/Constants-SqlTemplates.cs +++ b/src/Umbraco.Core/Constants-SqlTemplates.cs @@ -27,8 +27,10 @@ internal static class NuCacheDatabaseDataSource { - public const string ContentSourcesSelect = "Umbraco.Web.PublishedCache.NuCache.DataSource.ContentSourcesSelect"; - public const string ContentSourcesSelectUmbracoNodeJoin = "Umbraco.Web.PublishedCache.NuCache.DataSource.ContentSourcesSelectUmbracoNodeJoin"; + public const string WhereNodeId = "Umbraco.Web.PublishedCache.NuCache.DataSource.WhereNodeId"; + public const string WhereNodeIdX = "Umbraco.Web.PublishedCache.NuCache.DataSource.WhereNodeIdX"; + public const string SourcesSelectUmbracoNodeJoin = "Umbraco.Web.PublishedCache.NuCache.DataSource.SourcesSelectUmbracoNodeJoin"; + public const string ContentSourcesSelect = "Umbraco.Web.PublishedCache.NuCache.DataSource.ContentSourcesSelect"; public const string ContentSourcesCount = "Umbraco.Web.PublishedCache.NuCache.DataSource.ContentSourcesCount"; public const string MediaSourcesSelect = "Umbraco.Web.PublishedCache.NuCache.DataSource.MediaSourcesSelect"; public const string MediaSourcesCount = "Umbraco.Web.PublishedCache.NuCache.DataSource.MediaSourcesCount"; diff --git a/src/Umbraco.Web/PublishedCache/NuCache/DataSource/DatabaseDataSource.cs b/src/Umbraco.Web/PublishedCache/NuCache/DataSource/DatabaseDataSource.cs index 88e364634e..3bd30d2d73 100644 --- a/src/Umbraco.Web/PublishedCache/NuCache/DataSource/DatabaseDataSource.cs +++ b/src/Umbraco.Web/PublishedCache/NuCache/DataSource/DatabaseDataSource.cs @@ -78,8 +78,9 @@ namespace Umbraco.Web.PublishedCache.NuCache.DataSource private Sql SqlContentSourcesSelectUmbracoNodeJoin(Sql s) { var syntax = s.SqlContext.SqlSyntax; - var sqlTemplate = s.SqlContext.Templates.Get(Constants.SqlTemplates.NuCacheDatabaseDataSource.ContentSourcesSelectUmbracoNodeJoin, s => - s.InnerJoin("x").On((left, right) => left.NodeId == right.NodeId || SqlText(left.Path, right.Path, (lp, rp) => $"({lp} LIKE {syntax.GetConcat(rp, "',%'")})"), aliasRight: "x")); + var sqlTemplate = s.SqlContext.Templates.Get(Constants.SqlTemplates.NuCacheDatabaseDataSource.SourcesSelectUmbracoNodeJoin, s => + s.InnerJoin("x") + .On((left, right) => left.NodeId == right.NodeId || SqlText(left.Path, right.Path, (lp, rp) => $"({lp} LIKE {syntax.GetConcat(rp, "',%'")})"), aliasRight: "x")); var sql = sqlTemplate.Sql(); return sql; } @@ -87,7 +88,16 @@ namespace Umbraco.Web.PublishedCache.NuCache.DataSource private Sql SqlWhereNodeId(Sql s, int id) { var syntax = s.SqlContext.SqlSyntax; - var sqlTemplate = s.SqlContext.Templates.Get(Constants.SqlTemplates.NuCacheDatabaseDataSource.ContentSourcesSelectUmbracoNodeJoin, s => + var sqlTemplate = s.SqlContext.Templates.Get(Constants.SqlTemplates.NuCacheDatabaseDataSource.WhereNodeId, s => + s.Where(x => x.NodeId == SqlTemplate.Arg("id"))); + var sql = sqlTemplate.Sql(id); + return sql; + } + + private Sql SqlWhereNodeIdX(Sql s, int id) + { + var syntax = s.SqlContext.SqlSyntax; + var sqlTemplate = s.SqlContext.Templates.Get(Constants.SqlTemplates.NuCacheDatabaseDataSource.WhereNodeIdX, s => s.Where(x => x.NodeId == SqlTemplate.Arg("id"), "x")); var sql = sqlTemplate.Sql(id); return sql; @@ -225,13 +235,13 @@ namespace Umbraco.Web.PublishedCache.NuCache.DataSource { var sql = SqlContentSourcesSelect(scope, SqlContentSourcesSelectUmbracoNodeJoin) .Append(SqlObjectTypeNotTrashed(scope.SqlContext.Sql(), Constants.ObjectTypes.Document)) - .Append(SqlWhereNodeId(scope.SqlContext.Sql(), id)) + .Append(SqlWhereNodeIdX(scope.SqlContext.Sql(), id)) .Append(SqlOrderByLevelIdSortOrder(scope.SqlContext.Sql())); // Use a more efficient COUNT query var sqlCountQuery = SqlContentSourcesCount(scope, SqlContentSourcesSelectUmbracoNodeJoin) .Append(SqlObjectTypeNotTrashed(scope.SqlContext.Sql(), Constants.ObjectTypes.Document)) - .Append(SqlWhereNodeId(scope.SqlContext.Sql(), id)); + .Append(SqlWhereNodeIdX(scope.SqlContext.Sql(), id)); var sqlCount = scope.SqlContext.Sql("SELECT COUNT(*) FROM (").Append(sqlCountQuery).Append(") npoco_tbl"); var serializer = _contentCacheDataSerializerFactory.Create(ContentCacheDataSerializerEntityType.Document); @@ -255,7 +265,7 @@ namespace Umbraco.Web.PublishedCache.NuCache.DataSource .Append(SqlOrderByLevelIdSortOrder(scope.SqlContext.Sql())); // Use a more efficient COUNT query - var sqlCountQuery = SqlContentSourcesCount(scope, SqlContentSourcesSelectUmbracoNodeJoin) + var sqlCountQuery = SqlContentSourcesCount(scope) .Append(SqlObjectTypeNotTrashed(scope.SqlContext.Sql(), Constants.ObjectTypes.Document)) .WhereIn(x => x.ContentTypeId, ids); var sqlCount = scope.SqlContext.Sql("SELECT COUNT(*) FROM (").Append(sqlCountQuery).Append(") npoco_tbl"); @@ -312,13 +322,13 @@ namespace Umbraco.Web.PublishedCache.NuCache.DataSource { var sql = SqlMediaSourcesSelect(scope, SqlContentSourcesSelectUmbracoNodeJoin) .Append(SqlObjectTypeNotTrashed(scope.SqlContext.Sql(), Constants.ObjectTypes.Media)) - .Append(SqlWhereNodeId(scope.SqlContext.Sql(), id)) + .Append(SqlWhereNodeIdX(scope.SqlContext.Sql(), id)) .Append(SqlOrderByLevelIdSortOrder(scope.SqlContext.Sql())); // Use a more efficient COUNT query - var sqlCountQuery = SqlMediaSourcesCount(scope) + var sqlCountQuery = SqlMediaSourcesCount(scope, SqlContentSourcesSelectUmbracoNodeJoin) .Append(SqlObjectTypeNotTrashed(scope.SqlContext.Sql(), Constants.ObjectTypes.Media)) - .Append(SqlWhereNodeId(scope.SqlContext.Sql(), id)); + .Append(SqlWhereNodeIdX(scope.SqlContext.Sql(), id)); var sqlCount = scope.SqlContext.Sql("SELECT COUNT(*) FROM (").Append(sqlCountQuery).Append(") npoco_tbl"); var serializer = _contentCacheDataSerializerFactory.Create(ContentCacheDataSerializerEntityType.Media);