From 7bbe907edc8a31b1e028a8ff3efccb507790f6b8 Mon Sep 17 00:00:00 2001 From: Guillaume Lajarige Date: Fri, 28 Apr 2017 08:20:21 +0000 Subject: [PATCH] Portal: ManageBrick optimization by loading "always_in_tables" attributes to avoid unnecessary object reloads SVN:trunk[4713] --- .../managebrickcontroller.class.inc.php | 27 ++++++++++++++++--- 1 file changed, 23 insertions(+), 4 deletions(-) diff --git a/datamodels/2.x/itop-portal-base/portal/src/controllers/managebrickcontroller.class.inc.php b/datamodels/2.x/itop-portal-base/portal/src/controllers/managebrickcontroller.class.inc.php index 4d279845e..a2388f3a4 100644 --- a/datamodels/2.x/itop-portal-base/portal/src/controllers/managebrickcontroller.class.inc.php +++ b/datamodels/2.x/itop-portal-base/portal/src/controllers/managebrickcontroller.class.inc.php @@ -33,6 +33,7 @@ use \AttributeSubItem; use \DBSearch; use \DBObjectSearch; use \DBObjectSet; +use \DBObject; use \FieldExpression; use \BinaryExpression; use \VariableExpression; @@ -301,12 +302,13 @@ class ManageBrickController extends BrickController // Preparing data sets $aSets = array(); - foreach ($aQueries as $sKey => $oQuery) + /** @var DBSearch $oQuery */ + foreach ($aQueries as $sKey => $oQuery) { // Checking if we have a valid query if ($oQuery !== null) { - // Setting query pagination if needed + // Setting query pagination if needed if ($sDataLoading === AbstractBrick::ENUM_DATA_LOADING_LAZY) { // Retrieving parameters @@ -327,7 +329,22 @@ class ManageBrickController extends BrickController { $oSet = new DBObjectSet($oQuery); } - $oSet->OptimizeColumnLoad(array($oQuery->GetClassAlias() => $aColumnsAttrs)); + + // Adding always_in_tables attributes + $aColumnsToLoad = array($oQuery->GetClassAlias() => $aColumnsAttrs); + foreach($oQuery->GetSelectedClasses() as $sAlias => $sClass) + { + /** @var AttributeDefinition $oAttDef */ + foreach(MetaModel::ListAttributeDefs($sClass) as $sAttCode => $oAttDef) + { + if($oAttDef->AlwaysLoadInTables()) + { + $aColumnsToLoad[$sAlias][] = $sAttCode; + } + } + } + + $oSet->OptimizeColumnLoad($aColumnsToLoad); $oSet->SetOrderByClasses(); $aSets[$sKey] = $oSet; } @@ -357,6 +374,7 @@ class ManageBrickController extends BrickController // Getting items $aItems = array(); // ... For each item + /** @var DBObject $oCurrentRow */ while ($oCurrentRow = $oSet->Fetch()) { // ... Retrieving item's attributes values @@ -393,7 +411,8 @@ class ManageBrickController extends BrickController ); } } - + + /** @var AttributeDefinition $oAttDef */ $oAttDef = MetaModel::GetAttributeDef($sCurrentClass, $sItemAttr); if ($oAttDef->IsExternalKey()) {