소스 검색

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)

git-svn-id: http://svn.code.sf.net/p/itop/code/trunk@4965 a333f486-631f-4898-b8df-5754b55c2be0

eespie 7 년 전
부모
커밋
fcdc097877
1개의 변경된 파일29개의 추가작업 그리고 1개의 파일을 삭제
  1. 29 1
      core/dbobjectset.class.php

+ 29 - 1
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]))
 				{