From 196632978cf39bc3914e14739767cb5b72a8df9d Mon Sep 17 00:00:00 2001 From: Benjamin Eberlei Date: Wed, 27 Jul 2011 23:22:20 +0200 Subject: [PATCH] DDC-1298 - Fix bug in SQLWalker with derived entities that have no fields of their own. --- lib/Doctrine/ORM/Query/SqlWalker.php | 2 +- tests/Doctrine/Tests/Models/DDC117/DDC117Article.php | 5 +++++ .../Tests/ORM/Query/SelectSqlGenerationTest.php | 11 +++++++++++ tests/Doctrine/Tests/OrmFunctionalTestCase.php | 2 ++ 4 files changed, 19 insertions(+), 1 deletion(-) diff --git a/lib/Doctrine/ORM/Query/SqlWalker.php b/lib/Doctrine/ORM/Query/SqlWalker.php index 7393ba893..b4e8b3f15 100644 --- a/lib/Doctrine/ORM/Query/SqlWalker.php +++ b/lib/Doctrine/ORM/Query/SqlWalker.php @@ -511,7 +511,7 @@ class SqlWalker implements TreeWalker public function walkSelectClause($selectClause) { $sql = 'SELECT ' . (($selectClause->isDistinct) ? 'DISTINCT ' : '') . implode( - ', ', array_map(array($this, 'walkSelectExpression'), $selectClause->selectExpressions) + ', ', array_filter(array_map(array($this, 'walkSelectExpression'), $selectClause->selectExpressions)) ); $addMetaColumns = ! $this->_query->getHint(Query::HINT_FORCE_PARTIAL_LOAD) && diff --git a/tests/Doctrine/Tests/Models/DDC117/DDC117Article.php b/tests/Doctrine/Tests/Models/DDC117/DDC117Article.php index 111c4fabe..51ea2278d 100644 --- a/tests/Doctrine/Tests/Models/DDC117/DDC117Article.php +++ b/tests/Doctrine/Tests/Models/DDC117/DDC117Article.php @@ -27,6 +27,11 @@ class DDC117Article */ private $translations; + /** + * @OneToMany(targetEntity="DDC117Link", mappedBy="source") + */ + private $links; + public function __construct($title) { $this->title = $title; diff --git a/tests/Doctrine/Tests/ORM/Query/SelectSqlGenerationTest.php b/tests/Doctrine/Tests/ORM/Query/SelectSqlGenerationTest.php index ad5ce1329..6319f85fd 100644 --- a/tests/Doctrine/Tests/ORM/Query/SelectSqlGenerationTest.php +++ b/tests/Doctrine/Tests/ORM/Query/SelectSqlGenerationTest.php @@ -965,6 +965,17 @@ class SelectSqlGenerationTest extends \Doctrine\Tests\OrmTestCase "SELECT c0_.id AS id0, c0_.status AS status1, c0_.username AS username2, c0_.name AS name3, (SELECT c1_.name FROM cms_users c1_ WHERE c1_.id = c0_.id AND c1_.name IN (SELECT c2_.name FROM cms_users c2_)) AS sclr4 FROM cms_users c0_" ); } + + /** + * @group DDC-1298 + */ + public function testSelectForeignKeyPKWithoutFields() + { + $this->assertSqlGeneration( + "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" + ); + } } diff --git a/tests/Doctrine/Tests/OrmFunctionalTestCase.php b/tests/Doctrine/Tests/OrmFunctionalTestCase.php index 1f8032aeb..876f13954 100644 --- a/tests/Doctrine/Tests/OrmFunctionalTestCase.php +++ b/tests/Doctrine/Tests/OrmFunctionalTestCase.php @@ -98,6 +98,7 @@ abstract class OrmFunctionalTestCase extends OrmTestCase 'Doctrine\Tests\Models\DDC117\DDC117ArticleDetails', 'Doctrine\Tests\Models\DDC117\DDC117ApproveChanges', 'Doctrine\Tests\Models\DDC117\DDC117Editor', + 'Doctrine\Tests\Models\DDC117\DDC117Link', ), 'stockexchange' => array( 'Doctrine\Tests\Models\StockExchange\Bond', @@ -191,6 +192,7 @@ abstract class OrmFunctionalTestCase extends OrmTestCase $conn->executeUpdate('DELETE FROM ddc117editor_ddc117translation'); $conn->executeUpdate('DELETE FROM DDC117Editor'); $conn->executeUpdate('DELETE FROM DDC117ApproveChanges'); + $conn->executeUpdate('DELETE FROM DDC117Link'); $conn->executeUpdate('DELETE FROM DDC117Reference'); $conn->executeUpdate('DELETE FROM DDC117ArticleDetails'); $conn->executeUpdate('DELETE FROM DDC117Translation');