From bfde101f6bc0fb98f3a0b09b511fb117bb0986b7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Eric=20Espi=C3=A9?= Date: Thu, 5 Oct 2017 09:10:00 +0000 Subject: [PATCH] N.1065 Fix performance issues (unexpected objects reload). * Fix regression in 2.4 into attribute optimization (archive_flag, obsolescence_flag). * Fix attribute optimization (friendlyname for ExternalField pointing to ExternalKey) SVN:trunk[4965] --- core/dbobjectset.class.php | 30 +++++++++++++++++++++++++++++- 1 file changed, 29 insertions(+), 1 deletion(-) diff --git a/core/dbobjectset.class.php b/core/dbobjectset.class.php index fc7d649c6..d7df1bef7 100644 --- a/core/dbobjectset.class.php +++ b/core/dbobjectset.class.php @@ -195,11 +195,25 @@ class DBObjectSet implements iDBObjectSetIterator { $oAttDef = MetaModel::GetAttributeDef($sClass, $sAttToLoad); $aAttToLoadWithAttDef[$sClassAlias][$sAttToLoad] = $oAttDef; - if ($oAttDef->IsExternalKey()) + if ($oAttDef->IsExternalKey(EXTKEY_ABSOLUTE)) { // Add the external key friendly name anytime $oFriendlyNameAttDef = MetaModel::GetAttributeDef($sClass, $sAttToLoad.'_friendlyname'); $aAttToLoadWithAttDef[$sClassAlias][$sAttToLoad.'_friendlyname'] = $oFriendlyNameAttDef; + + if (MetaModel::IsArchivable($oAttDef->GetTargetClass(EXTKEY_ABSOLUTE))) + { + // Add the archive flag if necessary + $oArchiveFlagAttDef = MetaModel::GetAttributeDef($sClass, $sAttToLoad.'_archive_flag'); + $aAttToLoadWithAttDef[$sClassAlias][$sAttToLoad.'_archive_flag'] = $oArchiveFlagAttDef; + } + + if (MetaModel::IsObsoletable($oAttDef->GetTargetClass(EXTKEY_ABSOLUTE))) + { + // Add the obsolescence flag if necessary + $oObsoleteFlagAttDef = MetaModel::GetAttributeDef($sClass, $sAttToLoad.'_obsolescence_flag'); + $aAttToLoadWithAttDef[$sClassAlias][$sAttToLoad.'_obsolescence_flag'] = $oObsoleteFlagAttDef; + } } } } @@ -207,6 +221,20 @@ class DBObjectSet implements iDBObjectSetIterator $oFriendlyNameAttDef = MetaModel::GetAttributeDef($sClass, 'friendlyname'); $aAttToLoadWithAttDef[$sClassAlias]['friendlyname'] = $oFriendlyNameAttDef; + if (MetaModel::IsArchivable($sClass)) + { + // Add the archive flag if necessary + $oArchiveFlagAttDef = MetaModel::GetAttributeDef($sClass, 'archive_flag'); + $aAttToLoadWithAttDef[$sClassAlias]['archive_flag'] = $oArchiveFlagAttDef; + } + + if (MetaModel::IsObsoletable($sClass)) + { + // Add the obsolescence flag if necessary + $oObsoleteFlagAttDef = MetaModel::GetAttributeDef($sClass, 'obsolescence_flag'); + $aAttToLoadWithAttDef[$sClassAlias]['obsolescence_flag'] = $oObsoleteFlagAttDef; + } + // Make sure that the final class is requested anytime, whatever the specification (needed for object construction!) if (!MetaModel::IsStandaloneClass($sClass) && !array_key_exists('finalclass', $aAttToLoadWithAttDef[$sClassAlias])) {