Portal: ManageBrick optimization by loading "always_in_tables" attributes to avoid unnecessary object reloads

SVN:trunk[4713]
This commit is contained in:
Guillaume Lajarige
2017-04-28 08:20:21 +00:00
parent 6f7d364826
commit 7bbe907edc

View File

@@ -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())
{