mirror of
https://github.com/Combodo/iTop.git
synced 2026-04-24 11:08:45 +02:00
Portal: ManageBrick optimization by loading "always_in_tables" attributes to avoid unnecessary object reloads
SVN:trunk[4713]
This commit is contained in:
@@ -33,6 +33,7 @@ use \AttributeSubItem;
|
|||||||
use \DBSearch;
|
use \DBSearch;
|
||||||
use \DBObjectSearch;
|
use \DBObjectSearch;
|
||||||
use \DBObjectSet;
|
use \DBObjectSet;
|
||||||
|
use \DBObject;
|
||||||
use \FieldExpression;
|
use \FieldExpression;
|
||||||
use \BinaryExpression;
|
use \BinaryExpression;
|
||||||
use \VariableExpression;
|
use \VariableExpression;
|
||||||
@@ -301,12 +302,13 @@ class ManageBrickController extends BrickController
|
|||||||
|
|
||||||
// Preparing data sets
|
// Preparing data sets
|
||||||
$aSets = array();
|
$aSets = array();
|
||||||
foreach ($aQueries as $sKey => $oQuery)
|
/** @var DBSearch $oQuery */
|
||||||
|
foreach ($aQueries as $sKey => $oQuery)
|
||||||
{
|
{
|
||||||
// Checking if we have a valid query
|
// Checking if we have a valid query
|
||||||
if ($oQuery !== null)
|
if ($oQuery !== null)
|
||||||
{
|
{
|
||||||
// Setting query pagination if needed
|
// Setting query pagination if needed
|
||||||
if ($sDataLoading === AbstractBrick::ENUM_DATA_LOADING_LAZY)
|
if ($sDataLoading === AbstractBrick::ENUM_DATA_LOADING_LAZY)
|
||||||
{
|
{
|
||||||
// Retrieving parameters
|
// Retrieving parameters
|
||||||
@@ -327,7 +329,22 @@ class ManageBrickController extends BrickController
|
|||||||
{
|
{
|
||||||
$oSet = new DBObjectSet($oQuery);
|
$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();
|
$oSet->SetOrderByClasses();
|
||||||
$aSets[$sKey] = $oSet;
|
$aSets[$sKey] = $oSet;
|
||||||
}
|
}
|
||||||
@@ -357,6 +374,7 @@ class ManageBrickController extends BrickController
|
|||||||
// Getting items
|
// Getting items
|
||||||
$aItems = array();
|
$aItems = array();
|
||||||
// ... For each item
|
// ... For each item
|
||||||
|
/** @var DBObject $oCurrentRow */
|
||||||
while ($oCurrentRow = $oSet->Fetch())
|
while ($oCurrentRow = $oSet->Fetch())
|
||||||
{
|
{
|
||||||
// ... Retrieving item's attributes values
|
// ... Retrieving item's attributes values
|
||||||
@@ -393,7 +411,8 @@ class ManageBrickController extends BrickController
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** @var AttributeDefinition $oAttDef */
|
||||||
$oAttDef = MetaModel::GetAttributeDef($sCurrentClass, $sItemAttr);
|
$oAttDef = MetaModel::GetAttributeDef($sCurrentClass, $sItemAttr);
|
||||||
if ($oAttDef->IsExternalKey())
|
if ($oAttDef->IsExternalKey())
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user