Revert "Change EntityService GetDescendents to lookup the item path to use in the LIKE query to be a 'prefix' query not a 'contains' query which will be much better for SQL"

This reverts commit ecc761a232.
This commit is contained in:
Shannon
2017-09-01 00:46:01 +10:00
parent 1cec38c679
commit 66da774bf7
3 changed files with 14 additions and 66 deletions

View File

@@ -676,17 +676,7 @@ namespace Umbraco.Core.Services
// get query - if the id is System Root, then just get all
var query = Query<IContent>.Builder;
if (id != Constants.System.Root)
{
var entityRepository = RepositoryFactory.CreateEntityRepository(uow);
var contentPath = entityRepository.GetAllPaths(Constants.ObjectTypes.DocumentGuid, id).ToArray();
if (contentPath.Length == 0)
{
totalChildren = 0;
return Enumerable.Empty<IContent>();
}
query.Where(x => x.Path.SqlStartsWith(string.Format("{0},", contentPath[0]), TextColumnType.NVarchar));
}
query.Where(x => x.Path.SqlContains(string.Format(",{0},", id), TextColumnType.NVarchar));
// get filter
IQuery<IContent> filterQuery = null;
@@ -721,16 +711,7 @@ namespace Umbraco.Core.Services
// get query - if the id is System Root, then just get all
var query = Query<IContent>.Builder;
if (id != Constants.System.Root)
{
var entityRepository = RepositoryFactory.CreateEntityRepository(uow);
var contentPath = entityRepository.GetAllPaths(Constants.ObjectTypes.DocumentGuid, id).ToArray();
if (contentPath.Length == 0)
{
totalChildren = 0;
return Enumerable.Empty<IContent>();
}
query.Where(x => x.Path.SqlStartsWith(string.Format("{0},", contentPath[0]), TextColumnType.NVarchar));
}
query.Where(x => x.Path.SqlContains(string.Format(",{0},", id), TextColumnType.NVarchar));
return repository.GetPagedResultsByQuery(query, pageIndex, pageSize, out totalChildren, orderBy, orderDirection, orderBySystemField, filter);
}
@@ -1664,7 +1645,7 @@ namespace Umbraco.Core.Services
{
using (new WriteLock(Locker))
{
var nodeObjectType = Constants.ObjectTypes.DocumentGuid;
var nodeObjectType = new Guid(Constants.ObjectTypes.Document);
using (var uow = UowProvider.GetUnitOfWork())
{

View File

@@ -348,22 +348,11 @@ namespace Umbraco.Core.Services
using (var uow = UowProvider.GetUnitOfWork(readOnly:true))
{
var repository = RepositoryFactory.CreateEntityRepository(uow);
var query = Query<IUmbracoEntity>.Builder;
//if the id is System Root, then just get all
if (id != Constants.System.Root)
{
//lookup the path so we can use it in the prefix query below
var itemPaths = repository.GetAllPaths(objectTypeId, id).ToArray();
if (itemPaths.Length == 0)
{
totalRecords = 0;
return Enumerable.Empty<IUmbracoEntity>();
}
var itemPath = itemPaths[0].Path;
query.Where(x => x.Path.SqlStartsWith(string.Format("{0},", itemPath), TextColumnType.NVarchar));
}
query.Where(x => x.Path.SqlContains(string.Format(",{0},", id), TextColumnType.NVarchar));
IQuery<IUmbracoEntity> filterQuery = null;
if (filter.IsNullOrWhiteSpace() == false)
@@ -392,30 +381,15 @@ namespace Umbraco.Core.Services
using (var uow = UowProvider.GetUnitOfWork(readOnly: true))
{
var repository = RepositoryFactory.CreateEntityRepository(uow);
var query = Query<IUmbracoEntity>.Builder;
if (idsA.All(x => x != Constants.System.Root))
{
//lookup the paths so we can use it in the prefix query below
var itemPaths = repository.GetAllPaths(objectTypeId, idsA).ToArray();
if (itemPaths.Length == 0)
{
totalRecords = 0;
return Enumerable.Empty<IUmbracoEntity>();
}
var clauses = new List<Expression<Func<IUmbracoEntity, bool>>>();
foreach (var id in idsA)
{
//if the id is root then don't add any clauses
if (id != Constants.System.Root)
{
var itemPath = itemPaths.FirstOrDefault(x => x.Id == id);
if (itemPath == null) continue;
var path = itemPath.Path;
var qid = id;
clauses.Add(x => x.Path.SqlStartsWith(string.Format("{0},", path), TextColumnType.NVarchar) || x.Path.SqlEndsWith(string.Format(",{0}", qid), TextColumnType.NVarchar));
}
{
var qid = id;
clauses.Add(x => x.Path.SqlContains(string.Format(",{0},", qid), TextColumnType.NVarchar) || x.Path.SqlEndsWith(string.Format(",{0}", qid), TextColumnType.NVarchar));
}
query.WhereAny(clauses);
}
@@ -468,7 +442,7 @@ namespace Umbraco.Core.Services
return contents;
}
}
/// <summary>
/// Gets a collection of descendents by the parents Id
/// </summary>
@@ -627,13 +601,13 @@ namespace Umbraco.Core.Services
return repository.GetAllPaths(objectTypeId, keys);
}
}
/// <summary>
/// Gets a collection of <see cref="T:Umbraco.Core.Models.EntityBase.IUmbracoEntity" />
/// Gets a collection of <see cref="IUmbracoEntity"/>
/// </summary>
/// <param name="objectTypeId">Guid id of the UmbracoObjectType</param>
/// <param name="ids"></param>
/// <returns>An enumerable list of <see cref="T:Umbraco.Core.Models.EntityBase.IUmbracoEntity" /> objects</returns>
/// <returns>An enumerable list of <see cref="IUmbracoEntity"/> objects</returns>
public virtual IEnumerable<IUmbracoEntity> GetAll(Guid objectTypeId, params int[] ids)
{
var umbracoObjectType = UmbracoObjectTypesExtensions.GetUmbracoObjectType(objectTypeId);

View File

@@ -593,14 +593,7 @@ namespace Umbraco.Core.Services
//if the id is System Root, then just get all
if (id != Constants.System.Root)
{
var entityRepository = RepositoryFactory.CreateEntityRepository(uow);
var mediaPath = entityRepository.GetAllPaths(Constants.ObjectTypes.MediaGuid, id).ToArray();
if (mediaPath.Length == 0)
{
totalChildren = 0;
return Enumerable.Empty<IMedia>();
}
query.Where(x => x.Path.SqlStartsWith(string.Format("{0},", mediaPath[0]), TextColumnType.NVarchar));
query.Where(x => x.Path.SqlContains(string.Format(",{0},", id), TextColumnType.NVarchar));
}
IQuery<IMedia> filterQuery = null;
if (filter.IsNullOrWhiteSpace() == false)