Skip to content

Commit b8ea50d

Browse files
committed
Merge remote-tracking branch 'origin/6.2.4' into 7.1.8
Conflicts: build/NuSpecs/build/UmbracoCms.targets src/Umbraco.Core/Configuration/UmbracoVersion.cs src/Umbraco.Core/Persistence/Factories/UmbracoEntityFactory.cs src/Umbraco.Core/Persistence/Repositories/EntityRepository.cs src/Umbraco.Tests/Services/EntityServiceTests.cs src/Umbraco.Web.UI/Umbraco.Web.UI.csproj
2 parents 5501c95 + 1eab26c commit b8ea50d

File tree

5 files changed

+51
-33
lines changed

5 files changed

+51
-33
lines changed

src/Umbraco.Core/Persistence/Repositories/EntityRepository.cs

Lines changed: 10 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -193,18 +193,7 @@ private IEnumerable<IUmbracoEntity> PerformGetAll(Guid objectTypeId, Action<Sql>
193193

194194
public virtual IEnumerable<IUmbracoEntity> GetByQuery(IQuery<IUmbracoEntity> query)
195195
{
196-
//TODO: We need to fix all of this and how it handles parameters!
197-
198-
var wheres = query.GetWhereClauses().ToArray();
199-
200-
var sqlClause = GetBase(false, false, sql1 =>
201-
{
202-
//adds the additional filters
203-
foreach (var whereClause in wheres)
204-
{
205-
sql1.Where(whereClause.Item1, whereClause.Item2);
206-
}
207-
});
196+
var sqlClause = GetBase(false, false, null);
208197
var translator = new SqlTranslator<IUmbracoEntity>(sqlClause, query);
209198
var sql = translator.Translate().Append(GetGroupBy(false, false));
210199

@@ -222,17 +211,7 @@ public virtual IEnumerable<IUmbracoEntity> GetByQuery(IQuery<IUmbracoEntity> que
222211
bool isContent = objectTypeId == new Guid(Constants.ObjectTypes.Document);
223212
bool isMedia = objectTypeId == new Guid(Constants.ObjectTypes.Media);
224213

225-
var wheres = query.GetWhereClauses().ToArray();
226-
227-
var sqlClause = GetBaseWhere(GetBase, isContent, isMedia, sql1 =>
228-
{
229-
//adds the additional filters
230-
foreach (var whereClause in wheres)
231-
{
232-
sql1.Where(whereClause.Item1, whereClause.Item2);
233-
}
234-
235-
}, objectTypeId);
214+
var sqlClause = GetBaseWhere(GetBase, isContent, isMedia, null, objectTypeId);
236215

237216
var translator = new SqlTranslator<IUmbracoEntity>(sqlClause, query);
238217
var entitySql = translator.Translate();
@@ -241,6 +220,8 @@ public virtual IEnumerable<IUmbracoEntity> GetByQuery(IQuery<IUmbracoEntity> que
241220

242221
if (isMedia)
243222
{
223+
var wheres = query.GetWhereClauses().ToArray();
224+
244225
var mediaSql = GetFullSqlForMedia(entitySql.Append(GetGroupBy(isContent, true, false)), sql =>
245226
{
246227
//adds the additional filters
@@ -259,7 +240,8 @@ public virtual IEnumerable<IUmbracoEntity> GetByQuery(IQuery<IUmbracoEntity> que
259240
else
260241
{
261242
//use dynamic so that we can get ALL properties from the SQL so we can chuck that data into our AdditionalData
262-
var dtos = _work.Database.Fetch<dynamic>(entitySql.Append(GetGroupBy(isContent, false)));
243+
var finalSql = entitySql.Append(GetGroupBy(isContent, false));
244+
var dtos = _work.Database.Fetch<dynamic>(finalSql);
263245
return dtos.Select(factory.BuildEntityFromDynamic).Cast<IUmbracoEntity>().ToList();
264246
}
265247
}
@@ -362,10 +344,8 @@ protected virtual Sql GetBase(bool isContent, bool isMedia, Action<Sql> customFi
362344

363345
var entitySql = new Sql()
364346
.Select(columns.ToArray())
365-
.From("umbracoNode umbracoNode")
366-
.LeftJoin("umbracoNode parent").On("parent.parentID = umbracoNode.id");
367-
368-
347+
.From("umbracoNode umbracoNode");
348+
369349
if (isContent || isMedia)
370350
{
371351
entitySql.InnerJoin("cmsContent content").On("content.nodeId = umbracoNode.id")
@@ -378,6 +358,8 @@ protected virtual Sql GetBase(bool isContent, bool isMedia, Action<Sql> customFi
378358
.On("umbracoNode.id = latest.nodeId");
379359
}
380360

361+
entitySql.LeftJoin("umbracoNode parent").On("parent.parentID = umbracoNode.id");
362+
381363
if (customFilter != null)
382364
{
383365
customFilter(entitySql);

src/Umbraco.Core/Services/ContentService.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -536,7 +536,8 @@ public IEnumerable<IContent> GetDescendants(IContent content)
536536
{
537537
using (var repository = _repositoryFactory.CreateContentRepository(_uowProvider.GetUnitOfWork()))
538538
{
539-
var query = Query<IContent>.Builder.Where(x => x.Path.StartsWith(content.Path) && x.Id != content.Id);
539+
var pathMatch = content.Path + ",";
540+
var query = Query<IContent>.Builder.Where(x => x.Path.StartsWith(pathMatch) && x.Id != content.Id);
540541
var contents = repository.GetByQuery(query);
541542

542543
return contents;

src/Umbraco.Core/Services/EntityService.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -252,7 +252,8 @@ public virtual IEnumerable<IUmbracoEntity> GetDescendents(int id)
252252
using (var repository = _repositoryFactory.CreateEntityRepository(_uowProvider.GetUnitOfWork()))
253253
{
254254
var entity = repository.Get(id);
255-
var query = Query<IUmbracoEntity>.Builder.Where(x => x.Path.StartsWith(entity.Path) && x.Id != id);
255+
var pathMatch = entity.Path + ",";
256+
var query = Query<IUmbracoEntity>.Builder.Where(x => x.Path.StartsWith(pathMatch) && x.Id != id);
256257
var entities = repository.GetByQuery(query);
257258

258259
return entities;

src/Umbraco.Core/Services/MediaService.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -419,7 +419,8 @@ public IEnumerable<IMedia> GetDescendants(IMedia media)
419419
var uow = _uowProvider.GetUnitOfWork();
420420
using (var repository = _repositoryFactory.CreateMediaRepository(uow))
421421
{
422-
var query = Query<IMedia>.Builder.Where(x => x.Path.StartsWith(media.Path) && x.Id != media.Id);
422+
var pathMatch = media.Path + ",";
423+
var query = Query<IMedia>.Builder.Where(x => x.Path.StartsWith(pathMatch) && x.Id != media.Id);
423424
var medias = repository.GetByQuery(query);
424425

425426
return medias;

src/Umbraco.Tests/Services/EntityServiceTests.cs

Lines changed: 35 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,30 @@ public void EntityService_Can_Get_Child_Content_By_ParentId_And_UmbracoObjectTyp
7676
Assert.That(entities.Any(x => x.Trashed), Is.False);
7777
}
7878

79+
[Test]
80+
public void EntityService_Can_Get_Children_By_ParentId()
81+
{
82+
var service = ServiceContext.EntityService;
83+
84+
var entities = service.GetChildren(folderId);
85+
86+
Assert.That(entities.Any(), Is.True);
87+
Assert.That(entities.Count(), Is.EqualTo(3));
88+
Assert.That(entities.Any(x => x.Trashed), Is.False);
89+
}
90+
91+
[Test]
92+
public void EntityService_Can_Get_Descendants_By_ParentId()
93+
{
94+
var service = ServiceContext.EntityService;
95+
96+
var entities = service.GetDescendents(folderId);
97+
98+
Assert.That(entities.Any(), Is.True);
99+
Assert.That(entities.Count(), Is.EqualTo(4));
100+
Assert.That(entities.Any(x => x.Trashed), Is.False);
101+
}
102+
79103
[Test]
80104
public void EntityService_Throws_When_Getting_All_With_Invalid_Type()
81105
{
@@ -129,7 +153,7 @@ public void EntityService_Can_Find_All_Media_By_UmbracoObjectTypes()
129153
var entities = service.GetAll(UmbracoObjectTypes.Media).ToArray();
130154

131155
Assert.That(entities.Any(), Is.True);
132-
Assert.That(entities.Count(), Is.EqualTo(3));
156+
Assert.That(entities.Count(), Is.EqualTo(5));
133157

134158
Assert.That(
135159
entities.Any(
@@ -150,6 +174,8 @@ public void EntityService_Can_Get_ObjectType()
150174

151175
private static bool _isSetup = false;
152176

177+
private int folderId;
178+
153179
public override void CreateTestData()
154180
{
155181
if (_isSetup == false)
@@ -160,8 +186,9 @@ public override void CreateTestData()
160186

161187
//Create and Save folder-Media -> 1050
162188
var folderMediaType = ServiceContext.ContentTypeService.GetMediaType(1031);
163-
var folder = MockedMedia.CreateMediaFolder(folderMediaType, -1);
189+
var folder = MockedMedia.CreateMediaFolder(folderMediaType, -1);
164190
ServiceContext.MediaService.Save(folder, 0);
191+
folderId = folder.Id;
165192

166193
//Create and Save image-Media -> 1051
167194
var imageMediaType = ServiceContext.ContentTypeService.GetMediaType(1032);
@@ -172,6 +199,12 @@ public override void CreateTestData()
172199
var fileMediaType = ServiceContext.ContentTypeService.GetMediaType(1033);
173200
var file = MockedMedia.CreateMediaFile(fileMediaType, folder.Id);
174201
ServiceContext.MediaService.Save(file, 0);
202+
203+
var subfolder = MockedMedia.CreateMediaFolder(folderMediaType, folder.Id);
204+
ServiceContext.MediaService.Save(subfolder, 0);
205+
var subfolder2 = MockedMedia.CreateMediaFolder(folderMediaType, subfolder.Id);
206+
ServiceContext.MediaService.Save(subfolder2, 0);
207+
175208
}
176209

177210
}

0 commit comments

Comments
 (0)