Merge pull request #290 from doctrine/DDC-1652
[DDC-1652] Fix SqlWalker to include foreign key identifiers in SQL SELEC...
This commit is contained in:
commit
55a9e1e90c
@ -636,11 +636,17 @@ class SqlWalker implements TreeWalker
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Add foreign key columns to SQL, if necessary
|
// Add foreign key columns to SQL, if necessary
|
||||||
if ( ! $addMetaColumns) continue;
|
if ( ! $addMetaColumns && ! $class->containsForeignIdentifier) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
// Add foreign key columns of class and also parent classes
|
// Add foreign key columns of class and also parent classes
|
||||||
foreach ($class->associationMappings as $assoc) {
|
foreach ($class->associationMappings as $assoc) {
|
||||||
if ( ! ($assoc['isOwningSide'] && $assoc['type'] & ClassMetadata::TO_ONE)) continue;
|
if ( ! ($assoc['isOwningSide'] && $assoc['type'] & ClassMetadata::TO_ONE)) {
|
||||||
|
continue;
|
||||||
|
} else if ( !$addMetaColumns && !isset($assoc['id'])) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
$owningClass = (isset($assoc['inherited'])) ? $this->_em->getClassMetadata($assoc['inherited']) : $class;
|
$owningClass = (isset($assoc['inherited'])) ? $this->_em->getClassMetadata($assoc['inherited']) : $class;
|
||||||
$sqlTableAlias = $this->getSQLTableAlias($owningClass->getTableName(), $dqlAlias);
|
$sqlTableAlias = $this->getSQLTableAlias($owningClass->getTableName(), $dqlAlias);
|
||||||
@ -654,6 +660,11 @@ class SqlWalker implements TreeWalker
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Add foreign key columns to SQL, if necessary
|
||||||
|
if ( ! $addMetaColumns) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
// Add foreign key columns of subclasses
|
// Add foreign key columns of subclasses
|
||||||
foreach ($class->subClasses as $subClassName) {
|
foreach ($class->subClasses as $subClassName) {
|
||||||
$subClass = $this->_em->getClassMetadata($subClassName);
|
$subClass = $this->_em->getClassMetadata($subClassName);
|
||||||
|
@ -433,4 +433,32 @@ class DDC117Test extends \Doctrine\Tests\OrmFunctionalTestCase
|
|||||||
$this->assertEquals($this->article1->id(), $refRep->source()->id());
|
$this->assertEquals($this->article1->id(), $refRep->source()->id());
|
||||||
$this->assertEquals($this->article2->id(), $refRep->target()->id());
|
$this->assertEquals($this->article2->id(), $refRep->target()->id());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @group DDC-1652
|
||||||
|
*/
|
||||||
|
public function testArrayHydrationWithCompositeKey()
|
||||||
|
{
|
||||||
|
$dql = "SELECT r,s,t FROM Doctrine\Tests\Models\DDC117\DDC117Reference r INNER JOIN r.source s INNER JOIN r.target t";
|
||||||
|
$before = count($this->_em->createQuery($dql)->getResult());
|
||||||
|
|
||||||
|
$this->article1 = $this->_em->find("Doctrine\Tests\Models\DDC117\DDC117Article", $this->article1->id());
|
||||||
|
$this->article2 = $this->_em->find("Doctrine\Tests\Models\DDC117\DDC117Article", $this->article2->id());
|
||||||
|
|
||||||
|
$this->reference = new DDC117Reference($this->article2, $this->article1, "Test-Description");
|
||||||
|
$this->_em->persist($this->reference);
|
||||||
|
|
||||||
|
$this->reference = new DDC117Reference($this->article1, $this->article1, "Test-Description");
|
||||||
|
$this->_em->persist($this->reference);
|
||||||
|
|
||||||
|
$this->reference = new DDC117Reference($this->article2, $this->article2, "Test-Description");
|
||||||
|
$this->_em->persist($this->reference);
|
||||||
|
|
||||||
|
$this->_em->flush();
|
||||||
|
|
||||||
|
$dql = "SELECT r,s,t FROM Doctrine\Tests\Models\DDC117\DDC117Reference r INNER JOIN r.source s INNER JOIN r.target t";
|
||||||
|
$data = $this->_em->createQuery($dql)->getArrayResult();
|
||||||
|
|
||||||
|
$this->assertEquals($before + 3, count($data));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -1074,7 +1074,7 @@ class SelectSqlGenerationTest extends \Doctrine\Tests\OrmTestCase
|
|||||||
{
|
{
|
||||||
$this->assertSqlGeneration(
|
$this->assertSqlGeneration(
|
||||||
"SELECT t, s, l FROM Doctrine\Tests\Models\DDC117\DDC117Link l INNER JOIN l.target t INNER JOIN l.source s",
|
"SELECT t, s, l FROM Doctrine\Tests\Models\DDC117\DDC117Link l INNER JOIN l.target t INNER JOIN l.source s",
|
||||||
"SELECT d0_.article_id AS article_id0, d0_.title AS title1, d1_.article_id AS article_id2, d1_.title AS title3 FROM DDC117Link d2_ INNER JOIN DDC117Article d0_ ON d2_.target_id = d0_.article_id INNER JOIN DDC117Article d1_ ON d2_.source_id = d1_.article_id"
|
"SELECT d0_.article_id AS article_id0, d0_.title AS title1, d1_.article_id AS article_id2, d1_.title AS title3, d2_.source_id AS source_id4, d2_.target_id AS target_id5 FROM DDC117Link d2_ INNER JOIN DDC117Article d0_ ON d2_.target_id = d0_.article_id INNER JOIN DDC117Article d1_ ON d2_.source_id = d1_.article_id"
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user