Fixes issue with U4-9456 when we use the withCache flag we do not add that to the defs collection so an error would occur if one was resolved from cache.

This commit is contained in:
Shannon
2017-03-02 16:54:25 +01:00
parent 41d91ae791
commit 6c271e7af9
4 changed files with 40 additions and 18 deletions

View File

@@ -960,8 +960,8 @@ ORDER BY cmsContentVersion.id DESC
publishedDataCollection.Add(publishedDto);
}
var content = new List<IContent>();
//This is a tuple list identifying if the content item came from the cache or not
var content = new List<Tuple<IContent, bool>>();
var defs = new DocumentDefinitionCollection(includeAllVersions);
var templateIds = new List<int>();
@@ -982,7 +982,7 @@ ORDER BY cmsContentVersion.id DESC
//only use this cached version if the dto returned is also the publish version, they must match and be teh same version
if (cached != null && cached.Version == dto.VersionId && cached.Published && dto.Published)
{
content.Add(cached);
content.Add(new Tuple<IContent, bool>(cached, true));
continue;
}
}
@@ -1008,7 +1008,7 @@ ORDER BY cmsContentVersion.id DESC
if (dto.TemplateId.HasValue && dto.TemplateId.Value > 0)
templateIds.Add(dto.TemplateId.Value);
content.Add(ContentFactory.BuildEntity(dto, contentType, publishedDto));
content.Add(new Tuple<IContent, bool>(ContentFactory.BuildEntity(dto, contentType, publishedDto), false));
}
}
@@ -1020,8 +1020,14 @@ ORDER BY cmsContentVersion.id DESC
var propertyData = GetPropertyCollection(pagingSqlQuery, defs);
// assign template and property data
foreach (var cc in content)
foreach (var contentItem in content)
{
var cc = contentItem.Item1;
var fromCache = contentItem.Item2;
//if this has come from cache, we do not need to build up it's structure
if (fromCache) continue;
var def = defs[includeAllVersions ? (ValueType)cc.Version : cc.Id];
ITemplate template = null;
@@ -1033,9 +1039,9 @@ ORDER BY cmsContentVersion.id DESC
//on initial construction we don't want to have dirty properties tracked
// http://issues.umbraco.org/issue/U4-1946
cc.ResetDirtyProperties(false);
}
}
return content;
return content.Select(x => x.Item1).ToArray();
}
/// <summary>

View File

@@ -164,7 +164,9 @@ namespace Umbraco.Core.Persistence.Repositories
{
// fetch returns a list so it's ok to iterate it in this method
var dtos = Database.Fetch<ContentVersionDto, ContentDto, NodeDto>(sqlFull);
var content = new List<IMedia>();
//This is a tuple list identifying if the content item came from the cache or not
var content = new List<Tuple<IMedia, bool>>();
var defs = new DocumentDefinitionCollection();
//track the looked up content types, even though the content types are cached
@@ -182,7 +184,7 @@ namespace Umbraco.Core.Persistence.Repositories
//store different versions, but just in case someone corrupts some data we'll double check to be sure.
if (cached != null && cached.Version == dto.VersionId)
{
content.Add(cached);
content.Add(new Tuple<IMedia, bool>(cached, true));
continue;
}
}
@@ -204,7 +206,7 @@ namespace Umbraco.Core.Persistence.Repositories
// track the definition and if it's successfully added or updated then processed
if (defs.AddOrUpdate(new DocumentDefinition(dto, contentType)))
{
content.Add(MediaFactory.BuildEntity(dto, contentType));
content.Add(new Tuple<IMedia, bool>(MediaFactory.BuildEntity(dto, contentType), false));
}
}
@@ -212,16 +214,22 @@ namespace Umbraco.Core.Persistence.Repositories
var propertyData = GetPropertyCollection(pagingSqlQuery, defs);
// assign property data
foreach (var cc in content)
foreach (var contentItem in content)
{
var cc = contentItem.Item1;
var fromCache = contentItem.Item2;
//if this has come from cache, we do not need to build up it's structure
if (fromCache) continue;
cc.Properties = propertyData[cc.Version];
//on initial construction we don't want to have dirty properties tracked
// http://issues.umbraco.org/issue/U4-1946
cc.ResetDirtyProperties(false);
}
}
return content;
return content.Select(x => x.Item1).ToArray();
}
public override IMedia GetByVersion(Guid versionId)

View File

@@ -681,7 +681,8 @@ namespace Umbraco.Core.Persistence.Repositories
// fetch returns a list so it's ok to iterate it in this method
var dtos = Database.Fetch<MemberDto, ContentVersionDto, ContentDto, NodeDto>(sqlFull);
var content = new List<IMember>();
//This is a tuple list identifying if the content item came from the cache or not
var content = new List<Tuple<IMember, bool>>();
var defs = new DocumentDefinitionCollection();
foreach (var dto in dtos)
@@ -694,7 +695,7 @@ namespace Umbraco.Core.Persistence.Repositories
//store different versions, but just in case someone corrupts some data we'll double check to be sure.
if (cached != null && cached.Version == dto.ContentVersionDto.VersionId)
{
content.Add(cached);
content.Add(new Tuple<IMember, bool>(cached, true));
continue;
}
}
@@ -706,7 +707,7 @@ namespace Umbraco.Core.Persistence.Repositories
// need properties
if (defs.AddOrUpdate(new DocumentDefinition(dto.ContentVersionDto, contentType)))
{
content.Add(MemberFactory.BuildEntity(dto, contentType));
content.Add(new Tuple<IMember, bool>(MemberFactory.BuildEntity(dto, contentType), false));
}
}
@@ -714,8 +715,14 @@ namespace Umbraco.Core.Persistence.Repositories
var propertyData = GetPropertyCollection(pagingSqlQuery, defs);
// assign property data
foreach (var cc in content)
foreach (var contentItem in content)
{
var cc = contentItem.Item1;
var fromCache = contentItem.Item2;
//if this has come from cache, we do not need to build up it's structure
if (fromCache) continue;
cc.Properties = propertyData[cc.Version];
//on initial construction we don't want to have dirty properties tracked
@@ -723,7 +730,7 @@ namespace Umbraco.Core.Persistence.Repositories
cc.ResetDirtyProperties(false);
}
return content;
return content.Select(x => x.Item1).ToArray();
}
/// <summary>