From 61488d955e7c25dabedcd35649855e6e4c993764 Mon Sep 17 00:00:00 2001 From: Andy Cook Date: Thu, 16 Jul 2015 11:20:22 +0100 Subject: [PATCH] Fixed issue when paginator orders by a subselect expression on platforms supporting ROW_NUMBER OVER() function. --- lib/Doctrine/ORM/Query/SqlWalker.php | 4 ++++ .../Tests/ORM/Functional/PaginationTest.php | 22 +++++++++++++++++++ 2 files changed, 26 insertions(+) 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();