Ver Fonte

Fixed regression on latest fix (Hkeys and inheritance)

git-svn-id: http://svn.code.sf.net/p/itop/code/trunk@1500 a333f486-631f-4898-b8df-5754b55c2be0
romainq há 13 anos atrás
pai
commit
4a3a352b64
1 ficheiros alterados com 17 adições e 17 exclusões
  1. 17 17
      core/metamodel.class.php

+ 17 - 17
core/metamodel.class.php

@@ -2441,9 +2441,9 @@ if (!array_key_exists($sAttCode, self::$m_aAttribDefs[$sClass]))
 					// Note: there is no search condition in $oExtFilter, because normalization did merge the condition onto the top of the filter tree 
 
 //echo "MAKEQUERY-array_key_exists($sTableClass, \$aExtKeys)<br/>\n";
-					if (array_key_exists($sTableClass, $aExtKeys) && array_key_exists($sKeyAttCode, $aExtKeys[$sTableClass]))
+					if ($iOperatorCode == TREE_OPERATOR_EQUALS)
 					{
-						if ($iOperatorCode == TREE_OPERATOR_EQUALS)
+						if (array_key_exists($sTableClass, $aExtKeys) && array_key_exists($sKeyAttCode, $aExtKeys[$sTableClass]))
 						{
 							// Specify expected attributes for the target class query
 							// ... and use the current alias !
@@ -2500,23 +2500,23 @@ if (!array_key_exists($sAttCode, self::$m_aAttribDefs[$sClass]))
 								$oSelectBase->AddInnerJoin($oSelectExtKey, $sLocalKeyField, $sExternalKeyField, $sExternalKeyTable);
 							}
 						}
-						else
-						{
-							$oQBExpr->PushJoinField(new FieldExpression($sKeyAttCode, $sKeyClassAlias));
-							$oSelectExtKey = self::MakeQuery($aSelectedClasses, $oQBExpr, $aClassAliases, $aTableAliases, $oExtFilter);
-							$oJoinExpr = $oQBExpr->PopJoinField();
+					}
+					elseif(self::$m_aAttribOrigins[$sKeyClass][$sKeyAttCode] == $sTableClass)
+					{
+						$oQBExpr->PushJoinField(new FieldExpression($sKeyAttCode, $sKeyClassAlias));
+						$oSelectExtKey = self::MakeQuery($aSelectedClasses, $oQBExpr, $aClassAliases, $aTableAliases, $oExtFilter);
+						$oJoinExpr = $oQBExpr->PopJoinField();
 //echo "MAKEQUERY-PopJoinField pour $sKeyAttCode, $sKeyClassAlias: <pre>".print_r($oJoinExpr, true)."</pre><br/>\n";
-							$sExternalKeyTable = $oJoinExpr->GetParent();
-							$sExternalKeyField = $oJoinExpr->GetName();
-							$sLeftIndex = $sExternalKeyField.'_left'; // TODO use GetSQLLeft()
-							$sRightIndex = $sExternalKeyField.'_right'; // TODO use GetSQLRight()
-		
-							$LocalKeyLeft = $oKeyAttDef->GetSQLLeft();
-							$LocalKeyRight = $oKeyAttDef->GetSQLRight();
+						$sExternalKeyTable = $oJoinExpr->GetParent();
+						$sExternalKeyField = $oJoinExpr->GetName();
+						$sLeftIndex = $sExternalKeyField.'_left'; // TODO use GetSQLLeft()
+						$sRightIndex = $sExternalKeyField.'_right'; // TODO use GetSQLRight()
+	
+						$LocalKeyLeft = $oKeyAttDef->GetSQLLeft();
+						$LocalKeyRight = $oKeyAttDef->GetSQLRight();
 //echo "MAKEQUERY-LocalKeyLeft pour $sKeyAttCode => $LocalKeyLeft<br/>\n";
-		
-							$oSelectBase->AddInnerJoinTree($oSelectExtKey, $LocalKeyLeft, $LocalKeyRight, $sLeftIndex, $sRightIndex, $sExternalKeyTable, $iOperatorCode);
-						}
+	
+						$oSelectBase->AddInnerJoinTree($oSelectExtKey, $LocalKeyLeft, $LocalKeyRight, $sLeftIndex, $sRightIndex, $sExternalKeyTable, $iOperatorCode);
 					}
 				}
 			}