1
0
mirror of synced 2025-02-10 17:29:27 +03:00

#6464 code review updates

This commit is contained in:
Stefan Siegl 2017-07-29 12:41:57 +02:00 committed by Marco Pivetta
parent 99fdbf550d
commit 025ed1147b
No known key found for this signature in database
GPG Key ID: 4167D3337FD9D629
2 changed files with 19 additions and 17 deletions

View File

@ -872,11 +872,23 @@ class SqlWalker implements TreeWalker
* Walks down a RangeVariableDeclaration AST node, thereby generating the appropriate SQL. * Walks down a RangeVariableDeclaration AST node, thereby generating the appropriate SQL.
* *
* @param AST\RangeVariableDeclaration $rangeVariableDeclaration * @param AST\RangeVariableDeclaration $rangeVariableDeclaration
*
* @return string
*/
public function walkRangeVariableDeclaration($rangeVariableDeclaration)
{
return $this->generateRangeVariableDeclarationSQL($rangeVariableDeclaration, false);
}
/**
* Generate appropriate SQL for RangeVariableDeclaration AST node
*
* @param AST\RangeVariableDeclaration $rangeVariableDeclaration
* @param bool $buildNestedJoins * @param bool $buildNestedJoins
* *
* @return string * @return string
*/ */
public function walkRangeVariableDeclaration($rangeVariableDeclaration, $buildNestedJoins = false) private function generateRangeVariableDeclarationSQL($rangeVariableDeclaration, $buildNestedJoins)
{ {
$class = $this->em->getClassMetadata($rangeVariableDeclaration->abstractSchemaName); $class = $this->em->getClassMetadata($rangeVariableDeclaration->abstractSchemaName);
$dqlAlias = $rangeVariableDeclaration->aliasIdentificationVariable; $dqlAlias = $rangeVariableDeclaration->aliasIdentificationVariable;
@ -1132,7 +1144,7 @@ class SqlWalker implements TreeWalker
: ' INNER JOIN '; : ' INNER JOIN ';
switch (true) { switch (true) {
case ($joinDeclaration instanceof \Doctrine\ORM\Query\AST\RangeVariableDeclaration): case ($joinDeclaration instanceof AST\RangeVariableDeclaration):
$class = $this->em->getClassMetadata($joinDeclaration->abstractSchemaName); $class = $this->em->getClassMetadata($joinDeclaration->abstractSchemaName);
$dqlAlias = $joinDeclaration->aliasIdentificationVariable; $dqlAlias = $joinDeclaration->aliasIdentificationVariable;
$tableAlias = $this->getSQLTableAlias($class->table['name'], $dqlAlias); $tableAlias = $this->getSQLTableAlias($class->table['name'], $dqlAlias);
@ -1142,11 +1154,12 @@ class SqlWalker implements TreeWalker
$conditions[] = '(' . $this->walkConditionalExpression($join->conditionalExpression) . ')'; $conditions[] = '(' . $this->walkConditionalExpression($join->conditionalExpression) . ')';
} }
$condExprConjunction = ($class->isInheritanceTypeJoined() && $joinType != AST\Join::JOIN_TYPE_LEFT && $joinType != AST\Join::JOIN_TYPE_LEFTOUTER && empty($conditions)) $isUnconditionalJoin = empty($conditions);
$condExprConjunction = ($class->isInheritanceTypeJoined() && $joinType != AST\Join::JOIN_TYPE_LEFT && $joinType != AST\Join::JOIN_TYPE_LEFTOUTER && $isUnconditionalJoin)
? ' AND ' ? ' AND '
: ' ON '; : ' ON ';
$sql .= $this->walkRangeVariableDeclaration($joinDeclaration, !empty($conditions)); $sql .= $this->generateRangeVariableDeclarationSQL($joinDeclaration, !$isUnconditionalJoin);
// Apply remaining inheritance restrictions // Apply remaining inheritance restrictions
$discrSql = $this->_generateDiscriminatorColumnConditionSQL([$dqlAlias]); $discrSql = $this->_generateDiscriminatorColumnConditionSQL([$dqlAlias]);
@ -1168,7 +1181,7 @@ class SqlWalker implements TreeWalker
break; break;
case ($joinDeclaration instanceof \Doctrine\ORM\Query\AST\JoinAssociationDeclaration): case ($joinDeclaration instanceof AST\JoinAssociationDeclaration):
$sql .= $this->walkJoinAssociationDeclaration($joinDeclaration, $joinType, $join->conditionalExpression); $sql .= $this->walkJoinAssociationDeclaration($joinDeclaration, $joinType, $join->conditionalExpression);
break; break;
} }

View File

@ -33,10 +33,7 @@ class GH6464Test extends OrmFunctionalTestCase
*/ */
public function testIssue() public function testIssue()
{ {
$query = $this->_em->createQueryBuilder()
$qb = $this->_em->createQueryBuilder();
$query = $qb
->select('p', 'a') ->select('p', 'a')
->from(GH6464Post::class, 'p') ->from(GH6464Post::class, 'p')
->innerJoin(GH6464Author::class, 'a', 'WITH', 'p.authorId = a.id') ->innerJoin(GH6464Author::class, 'a', 'WITH', 'p.authorId = a.id')
@ -61,12 +58,6 @@ class GH6464Post
/** @Column(type="integer") */ /** @Column(type="integer") */
public $authorId; public $authorId;
/** @Column(length=100) */
public $title;
/** @Column(type="text") */
public $text;
} }
/** /**
@ -84,6 +75,4 @@ abstract class GH6464User
/** @Entity */ /** @Entity */
class GH6464Author extends GH6464User class GH6464Author extends GH6464User
{ {
/** @Column(length=50) */
public $displayName;
} }