diff --git a/lib/Doctrine/ORM/Query/SqlWalker.php b/lib/Doctrine/ORM/Query/SqlWalker.php index 3c4fc8ed1..eec9b6cc3 100644 --- a/lib/Doctrine/ORM/Query/SqlWalker.php +++ b/lib/Doctrine/ORM/Query/SqlWalker.php @@ -1093,6 +1093,10 @@ class SqlWalker implements TreeWalker $this->orderedColumnsMap[$sql] = $type; + if ($expr instanceof Query\AST\Subselect) { + $sql = "($sql)"; + } + return $sql . ' ' . $type; } diff --git a/tests/Doctrine/Tests/ORM/Functional/PaginationTest.php b/tests/Doctrine/Tests/ORM/Functional/PaginationTest.php index efd8a7c2c..eea2e8375 100644 --- a/tests/Doctrine/Tests/ORM/Functional/PaginationTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/PaginationTest.php @@ -669,6 +669,28 @@ class PaginationTest extends \Doctrine\Tests\OrmFunctionalTestCase $this->assertCount(9, $paginator); } + /** + * @dataProvider useOutputWalkersAndFetchJoinCollection + */ + public function testPaginationWithSubSelectOrderByExpression($useOutputWalker, $fetchJoinCollection) + { + $query = $this->_em->createQuery( + "SELECT u, + ( + SELECT MAX(a.version) + FROM Doctrine\\Tests\\Models\\CMS\\CmsArticle a + WHERE a.user = u + ) AS HIDDEN max_version + FROM Doctrine\\Tests\\Models\\CMS\\CmsUser u + ORDER BY max_version DESC" + ); + + $paginator = new Paginator($query, $fetchJoinCollection); + $paginator->setUseOutputWalkers($useOutputWalker); + + $this->assertCount(9, $paginator->getIterator()); + } + public function populate() { $groups = array();