From 4ab9413675bb7a77c37503b9bc047d0157d452d1 Mon Sep 17 00:00:00 2001 From: Pierre-Louis FORT Date: Fri, 10 Nov 2017 10:45:57 +0100 Subject: [PATCH] Test that orderByItem is string --- .../ORM/Tools/Pagination/LimitSubqueryWalker.php | 2 +- .../Tools/Pagination/LimitSubqueryWalkerTest.php | 15 +++++++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/lib/Doctrine/ORM/Tools/Pagination/LimitSubqueryWalker.php b/lib/Doctrine/ORM/Tools/Pagination/LimitSubqueryWalker.php index fd90a27f2..659a3bab9 100644 --- a/lib/Doctrine/ORM/Tools/Pagination/LimitSubqueryWalker.php +++ b/lib/Doctrine/ORM/Tools/Pagination/LimitSubqueryWalker.php @@ -95,7 +95,7 @@ class LimitSubqueryWalker extends TreeWalkerAdapter if (isset($AST->orderByClause)) { foreach ($AST->orderByClause->orderByItems as $item) { if ( ! $item->expression instanceof PathExpression) { - if(isset($queryComponents[$item->expression])) { + if(is_string($item->expression) && isset($queryComponents[$item->expression])) { $qComp = $queryComponents[$item->expression]; if (isset($qComp['resultVariable'])) { $AST->selectClause->selectExpressions[] = new SelectExpression($qComp['resultVariable'], $item->expression); diff --git a/tests/Doctrine/Tests/ORM/Tools/Pagination/LimitSubqueryWalkerTest.php b/tests/Doctrine/Tests/ORM/Tools/Pagination/LimitSubqueryWalkerTest.php index 7bde63895..81866f8c0 100644 --- a/tests/Doctrine/Tests/ORM/Tools/Pagination/LimitSubqueryWalkerTest.php +++ b/tests/Doctrine/Tests/ORM/Tools/Pagination/LimitSubqueryWalkerTest.php @@ -38,6 +38,21 @@ class LimitSubqueryWalkerTest extends PaginationTestCase ); } + public function testLimitSubqueryWithSortFunction() + { + $dql = 'SELECT p FROM Doctrine\Tests\ORM\Tools\Pagination\MyBlogPost p JOIN p.category c GROUP BY p.id ORDER BY COUNT(c.id)'; + $query = $this->entityManager->createQuery($dql); + $limitQuery = clone $query; + + $limitQuery->setHint(Query::HINT_CUSTOM_TREE_WALKERS, [LimitSubqueryWalker::class]); + + $this->assertEquals( + "SELECT DISTINCT m0_.id AS id_0 FROM MyBlogPost m0_ INNER JOIN Category c1_ ON m0_.category_id = c1_.id GROUP BY m0_.id ORDER BY COUNT(c1_.id) ASC", + $limitQuery->getSQL() + ); + } + + public function testCountQuery_MixedResultsWithName() { $dql = 'SELECT a, sum(a.name) as foo FROM Doctrine\Tests\ORM\Tools\Pagination\Author a';