/** * Generate Join condition for join wothout "on" statement * * @param Join $join * @param JoinAssociationCondition $condition * @return Join */ protected function getJoinFromJoinAssociationCondition(Join $join, JoinAssociationCondition $condition) { $joinAssociationPathExpression = $join->joinAssociationDeclaration->joinAssociationPathExpression; $leftExpression = new ArithmeticExpression(); $pathExpression = new PathExpression(self::EXPECTED_TYPE, $joinAssociationPathExpression->identificationVariable, $joinAssociationPathExpression->associationField); $pathExpression->type = PathExpression::TYPE_SINGLE_VALUED_ASSOCIATION; $leftExpression->simpleArithmeticExpression = $pathExpression; $conditionalFactors = []; $joinConditionsArray = is_array($condition->getJoinConditions()) ? $condition->getJoinConditions() : array($condition->getJoinConditions()); foreach ($joinConditionsArray as $joinCondition) { $rightExpression = new ArithmeticExpression(); $pathExpression = new PathExpression(self::EXPECTED_TYPE, $condition->getEntityAlias(), is_string($joinCondition) ? $joinCondition : $joinCondition['referencedColumnName']); $pathExpression->type = PathExpression::TYPE_STATE_FIELD; $rightExpression->simpleArithmeticExpression = $pathExpression; $factor = new ConditionalPrimary(); $factor->simpleConditionalExpression = new ComparisonExpression($leftExpression, '=', $rightExpression); $conditionalFactors[] = $factor; } $conditionalFactors[] = $this->getConditionalFactor($condition); $associationDeclaration = new RangeVariableDeclaration($condition->getEntityClass(), $condition->getEntityAlias()); $newJoin = new Join($join->joinType, $associationDeclaration); $newJoin->conditionalExpression = new ConditionalTerm($conditionalFactors); return $newJoin; }