Skip to content

Commit

Permalink
Bugfix: Count existing media correct (#15206)
Browse files Browse the repository at this point in the history
* #15205
Count media correct

* Fix content should be document

(cherry picked from commit d2ff2ea)
  • Loading branch information
bergmania committed Dec 7, 2023
1 parent d5d4edb commit cb76554
Showing 1 changed file with 33 additions and 8 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -224,7 +224,7 @@ public IEnumerable<ContentNodeKit> GetAllContentSources()
IContentCacheDataSerializer serializer =
_contentCacheDataSerializerFactory.Create(ContentCacheDataSerializerEntityType.Document);

IEnumerable<ContentSourceDto> dtos = GetContentNodeDtos(sql, Constants.ObjectTypes.Document);
IEnumerable<ContentSourceDto> dtos = GetContentNodeDtos(sql);

foreach (ContentSourceDto row in dtos)
{
Expand All @@ -242,7 +242,7 @@ public IEnumerable<ContentNodeKit> GetBranchContentSources(int id)
IContentCacheDataSerializer serializer =
_contentCacheDataSerializerFactory.Create(ContentCacheDataSerializerEntityType.Document);

IEnumerable<ContentSourceDto> dtos = GetContentNodeDtos(sql, Constants.ObjectTypes.Document);
IEnumerable<ContentSourceDto> dtos = GetContentNodeDtos(sql);

foreach (ContentSourceDto row in dtos)
{
Expand All @@ -265,7 +265,7 @@ public IEnumerable<ContentNodeKit> GetTypeContentSources(IEnumerable<int>? ids)
IContentCacheDataSerializer serializer =
_contentCacheDataSerializerFactory.Create(ContentCacheDataSerializerEntityType.Document);

IEnumerable<ContentSourceDto> dtos = GetContentNodeDtos(sql, Constants.ObjectTypes.Document);
IEnumerable<ContentSourceDto> dtos = GetContentNodeDtos(sql);

foreach (ContentSourceDto row in dtos)
{
Expand Down Expand Up @@ -301,7 +301,7 @@ public IEnumerable<ContentNodeKit> GetAllMediaSources()
IContentCacheDataSerializer serializer =
_contentCacheDataSerializerFactory.Create(ContentCacheDataSerializerEntityType.Media);

IEnumerable<ContentSourceDto> dtos = GetContentNodeDtos(sql, Constants.ObjectTypes.Media);
IEnumerable<ContentSourceDto> dtos = GetMediaNodeDtos(sql);

foreach (ContentSourceDto row in dtos)
{
Expand All @@ -319,7 +319,7 @@ public IEnumerable<ContentNodeKit> GetBranchMediaSources(int id)
IContentCacheDataSerializer serializer =
_contentCacheDataSerializerFactory.Create(ContentCacheDataSerializerEntityType.Media);

IEnumerable<ContentSourceDto> dtos = GetContentNodeDtos(sql, Constants.ObjectTypes.Media);
IEnumerable<ContentSourceDto> dtos = GetMediaNodeDtos(sql);

foreach (ContentSourceDto row in dtos)
{
Expand All @@ -342,7 +342,7 @@ public IEnumerable<ContentNodeKit> GetTypeMediaSources(IEnumerable<int> ids)
IContentCacheDataSerializer serializer =
_contentCacheDataSerializerFactory.Create(ContentCacheDataSerializerEntityType.Media);

IEnumerable<ContentSourceDto> dtos = GetContentNodeDtos(sql, Constants.ObjectTypes.Media);
IEnumerable<ContentSourceDto> dtos = GetMediaNodeDtos(sql);

foreach (ContentSourceDto row in dtos)
{
Expand Down Expand Up @@ -990,7 +990,32 @@ private ContentNodeKit CreateMediaNodeKit(ContentSourceDto dto, IContentCacheDat
return s;
}

private IEnumerable<ContentSourceDto> GetContentNodeDtos(Sql<ISqlContext> sql, Guid nodeObjectType)
private IEnumerable<ContentSourceDto> GetMediaNodeDtos(Sql<ISqlContext> sql)
{
// We need to page here. We don't want to iterate over every single row in one connection cuz this can cause an SQL Timeout.
// We also want to read with a db reader and not load everything into memory, QueryPaged lets us do that.
// QueryPaged is very slow on large sites however, so use fetch if UsePagedSqlQuery is disabled.
IEnumerable<ContentSourceDto> dtos;
if (_nucacheSettings.Value.UsePagedSqlQuery)
{
// Use a more efficient COUNT query
Sql<ISqlContext>? sqlCountQuery = SqlMediaSourcesCount()
.Append(SqlObjectTypeNotTrashed(SqlContext, Constants.ObjectTypes.Media));

Sql<ISqlContext>? sqlCount =
SqlContext.Sql("SELECT COUNT(*) FROM (").Append(sqlCountQuery).Append(") npoco_tbl");

dtos = Database.QueryPaged<ContentSourceDto>(_nucacheSettings.Value.SqlPageSize, sql, sqlCount);
}
else
{
dtos = Database.Fetch<ContentSourceDto>(sql);
}

return dtos;
}

private IEnumerable<ContentSourceDto> GetContentNodeDtos(Sql<ISqlContext> sql)
{
// We need to page here. We don't want to iterate over every single row in one connection cuz this can cause an SQL Timeout.
// We also want to read with a db reader and not load everything into memory, QueryPaged lets us do that.
Expand All @@ -1000,7 +1025,7 @@ private IEnumerable<ContentSourceDto> GetContentNodeDtos(Sql<ISqlContext> sql, G
{
// Use a more efficient COUNT query
Sql<ISqlContext>? sqlCountQuery = SqlContentSourcesCount()
.Append(SqlObjectTypeNotTrashed(SqlContext, nodeObjectType));
.Append(SqlObjectTypeNotTrashed(SqlContext, Constants.ObjectTypes.Document));

Sql<ISqlContext>? sqlCount =
SqlContext.Sql("SELECT COUNT(*) FROM (").Append(sqlCountQuery).Append(") npoco_tbl");
Expand Down

0 comments on commit cb76554

Please sign in to comment.