From 7362aa2f88626343ed2eb71d5503e90f8a225a37 Mon Sep 17 00:00:00 2001 From: Sebastien Ros Date: Fri, 10 Aug 2012 16:02:49 -0700 Subject: [PATCH] Optimization widget queries --HG-- branch : 1.x --- .../Orchard.Widgets/Filters/WidgetFilter.cs | 9 +++-- .../Orchard.Widgets/Orchard.Widgets.csproj | 1 + .../Services/IWidgetsService.cs | 1 + .../Services/WidgetsService.cs | 35 ++++++++++++------- 4 files changed, 29 insertions(+), 17 deletions(-) diff --git a/src/Orchard.Web/Modules/Orchard.Widgets/Filters/WidgetFilter.cs b/src/Orchard.Web/Modules/Orchard.Widgets/Filters/WidgetFilter.cs index 295c00576..117fba1d1 100644 --- a/src/Orchard.Web/Modules/Orchard.Widgets/Filters/WidgetFilter.cs +++ b/src/Orchard.Web/Modules/Orchard.Widgets/Filters/WidgetFilter.cs @@ -46,7 +46,6 @@ namespace Orchard.Widgets.Filters { // Once the Rule Engine is done: // Get Layers and filter by zone and rule - IEnumerable widgetParts = _widgetsService.GetWidgets(); IEnumerable activeLayers = _contentManager.Query().List(); var activeLayerIds = new List(); @@ -62,6 +61,8 @@ namespace Orchard.Widgets.Filters { } } + IEnumerable widgetParts = _widgetsService.GetWidgets(activeLayerIds.ToArray()); + // Build and add shape to zone. var zones = workContext.Layout.Zones; foreach (var widgetPart in widgetParts) { @@ -77,10 +78,8 @@ namespace Orchard.Widgets.Filters { continue; } - if (activeLayerIds.Contains(commonPart.Container.ContentItem.Id)) { - var widgetShape = _contentManager.BuildDisplay(widgetPart); - zones[widgetPart.Record.Zone].Add(widgetShape, widgetPart.Record.Position); - } + var widgetShape = _contentManager.BuildDisplay(widgetPart); + zones[widgetPart.Record.Zone].Add(widgetShape, widgetPart.Record.Position); } } diff --git a/src/Orchard.Web/Modules/Orchard.Widgets/Orchard.Widgets.csproj b/src/Orchard.Web/Modules/Orchard.Widgets/Orchard.Widgets.csproj index 83f116810..a1a0499b3 100644 --- a/src/Orchard.Web/Modules/Orchard.Widgets/Orchard.Widgets.csproj +++ b/src/Orchard.Web/Modules/Orchard.Widgets/Orchard.Widgets.csproj @@ -36,6 +36,7 @@ + diff --git a/src/Orchard.Web/Modules/Orchard.Widgets/Services/IWidgetsService.cs b/src/Orchard.Web/Modules/Orchard.Widgets/Services/IWidgetsService.cs index 93ffab762..5b4d7d46d 100644 --- a/src/Orchard.Web/Modules/Orchard.Widgets/Services/IWidgetsService.cs +++ b/src/Orchard.Web/Modules/Orchard.Widgets/Services/IWidgetsService.cs @@ -16,6 +16,7 @@ namespace Orchard.Widgets.Services { IEnumerable GetWidgets(); IEnumerable GetOrphanedWidgets(); IEnumerable GetWidgets(int layerId); + IEnumerable GetWidgets(int[] layerIds); WidgetPart GetWidget(int widgetId); WidgetPart CreateWidget(int layerId, string widgetType, string title, string position, string zone); diff --git a/src/Orchard.Web/Modules/Orchard.Widgets/Services/WidgetsService.cs b/src/Orchard.Web/Modules/Orchard.Widgets/Services/WidgetsService.cs index 92a79369e..a1925b343 100644 --- a/src/Orchard.Web/Modules/Orchard.Widgets/Services/WidgetsService.cs +++ b/src/Orchard.Web/Modules/Orchard.Widgets/Services/WidgetsService.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Linq; using JetBrains.Annotations; +using NHibernate.Criterion; using Orchard.ContentManagement; using Orchard.ContentManagement.Aspects; using Orchard.Environment.Extensions; @@ -47,24 +48,34 @@ namespace Orchard.Widgets.Services { .List(); } - private IEnumerable GetAllWidgets() { + public IEnumerable GetWidgets() { return _contentManager .Query() + .WithQueryHints(new QueryHints().ExpandRecords()). + List(); + } + + public IEnumerable GetOrphanedWidgets() { + return _contentManager + .Query() + .Where(x => x.Container == null) + .List(); + } + + public IEnumerable GetWidgets(int layerId) { + return _contentManager + .Query() + .Where(x => x.Container.Id == layerId) .WithQueryHints(new QueryHints().ExpandRecords()) .List(); } - public IEnumerable GetWidgets() { - return GetAllWidgets().Where(w => w.Has()); - } - - // info: (heskew) Just including invalid widgets for now. Eventually need to include any in a layer which no longer exists if possible. - public IEnumerable GetOrphanedWidgets() { - return GetAllWidgets().Where(w => !w.Has()); - } - - public IEnumerable GetWidgets(int layerId) { - return GetWidgets().Where(widgetPart => widgetPart.As().Container.ContentItem.Id == layerId); + public IEnumerable GetWidgets(int[] layerIds) { + return _contentManager + .Query() + .Where(x => x.Container.Id.IsIn(layerIds)) + .WithQueryHints(new QueryHints().ExpandRecords()) + .List(); } public IEnumerable GetZones() {