From 441c5d138c3120f2a8359564409a9e0e519d5b7f Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Lu=C3=ADs=20Cobucci?= <lcobucci@gmail.com>
Date: Sat, 16 Dec 2017 23:31:50 +0100
Subject: [PATCH] Reduce complexity of
 LimitSubqueryWalker#walkSelectStatement()

Ensuring that the code follows our code standards.
---
 .../Tools/Pagination/LimitSubqueryWalker.php  | 44 ++++++++++---------
 .../Pagination/LimitSubqueryWalkerTest.php    | 37 ++++++++--------
 2 files changed, 42 insertions(+), 39 deletions(-)

diff --git a/lib/Doctrine/ORM/Tools/Pagination/LimitSubqueryWalker.php b/lib/Doctrine/ORM/Tools/Pagination/LimitSubqueryWalker.php
index 659a3bab9..f1f06e9e1 100644
--- a/lib/Doctrine/ORM/Tools/Pagination/LimitSubqueryWalker.php
+++ b/lib/Doctrine/ORM/Tools/Pagination/LimitSubqueryWalker.php
@@ -90,29 +90,33 @@ class LimitSubqueryWalker extends TreeWalkerAdapter
 
         $pathExpression->type = PathExpression::TYPE_STATE_FIELD;
 
-        $AST->selectClause->selectExpressions = array(new SelectExpression($pathExpression, '_dctrn_id'));
+        $AST->selectClause->selectExpressions = [new SelectExpression($pathExpression, '_dctrn_id')];
+        $AST->selectClause->isDistinct        = true;
 
-        if (isset($AST->orderByClause)) {
-            foreach ($AST->orderByClause->orderByItems as $item) {
-                if ( ! $item->expression instanceof PathExpression) {
-                    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);
-                        }
-                    }
-                } else {
-
-                    $AST->selectClause->selectExpressions[] = new SelectExpression(
-                        $this->createSelectExpressionItem($item->expression),
-                        '_dctrn_ord' . $this->_aliasCounter++
-                    );
-                }
-
-            }
+        if ( ! isset($AST->orderByClause)) {
+            return;
         }
 
-        $AST->selectClause->isDistinct = true;
+        foreach ($AST->orderByClause->orderByItems as $item) {
+            if ($item->expression instanceof PathExpression) {
+                $AST->selectClause->selectExpressions[] = new SelectExpression(
+                    $this->createSelectExpressionItem($item->expression), '_dctrn_ord' . $this->_aliasCounter++
+                );
+
+                continue;
+            }
+
+            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 81866f8c0..32ad2a354 100644
--- a/tests/Doctrine/Tests/ORM/Tools/Pagination/LimitSubqueryWalkerTest.php
+++ b/tests/Doctrine/Tests/ORM/Tools/Pagination/LimitSubqueryWalkerTest.php
@@ -38,21 +38,20 @@ class LimitSubqueryWalkerTest extends PaginationTestCase
         );
     }
 
-    public function testLimitSubqueryWithSortFunction()
+    public function testLimitSubqueryWithSortFunction() : void
     {
-        $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;
+        $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",
+        self::assertSame(
+            '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';
@@ -67,30 +66,30 @@ class LimitSubqueryWalkerTest extends PaginationTestCase
         );
     }
 
-    public function testAggQuery_MixedResultsWithNameAndSort()
+    public function testAggQuery_MixedResultsWithNameAndSort() : void
     {
-        $dql        = 'SELECT a, sum(a.name) as foo FROM Doctrine\Tests\ORM\Tools\Pagination\Author a ORDER BY foo DESC';
-        $query      = $this->entityManager->createQuery($dql);
-        $limitQuery = clone $query;
+        $dql   = 'SELECT a, sum(a.name) as foo FROM Doctrine\Tests\ORM\Tools\Pagination\Author a ORDER BY foo DESC';
+        $query = $this->entityManager->createQuery($dql);
 
+        $limitQuery = clone $query;
         $limitQuery->setHint(Query::HINT_CUSTOM_TREE_WALKERS, [LimitSubqueryWalker::class]);
 
-        $this->assertEquals(
-            "SELECT DISTINCT a0_.id AS id_0, sum(a0_.name) AS sclr_1 FROM Author a0_ ORDER BY sclr_1 DESC",
+        self::assertSame(
+            'SELECT DISTINCT a0_.id AS id_0, sum(a0_.name) AS sclr_1 FROM Author a0_ ORDER BY sclr_1 DESC',
             $limitQuery->getSQL()
         );
     }
 
-    public function testAggQuery_MultipleMixedResultsWithSort()
+    public function testAggQuery_MultipleMixedResultsWithSort() : void
     {
-        $dql        = 'SELECT a, sum(a.name) as foo, (SELECT count(subA.id) FROM Doctrine\Tests\ORM\Tools\Pagination\Author subA WHERE subA.id = a.id ) as bar FROM Doctrine\Tests\ORM\Tools\Pagination\Author a ORDER BY foo DESC, bar ASC';
-        $query      = $this->entityManager->createQuery($dql);
-        $limitQuery = clone $query;
+        $dql   = 'SELECT a, sum(a.name) as foo, (SELECT count(subA.id) FROM Doctrine\Tests\ORM\Tools\Pagination\Author subA WHERE subA.id = a.id ) as bar FROM Doctrine\Tests\ORM\Tools\Pagination\Author a ORDER BY foo DESC, bar ASC';
+        $query = $this->entityManager->createQuery($dql);
 
+        $limitQuery = clone $query;
         $limitQuery->setHint(Query::HINT_CUSTOM_TREE_WALKERS, [LimitSubqueryWalker::class]);
 
-        $this->assertEquals(
-            "SELECT DISTINCT a0_.id AS id_0, sum(a0_.name) AS sclr_1, (SELECT count(a1_.id) AS sclr_3 FROM Author a1_ WHERE a1_.id = a0_.id) AS sclr_2 FROM Author a0_ ORDER BY sclr_1 DESC, sclr_2 ASC",
+        self::assertSame(
+            'SELECT DISTINCT a0_.id AS id_0, sum(a0_.name) AS sclr_1, (SELECT count(a1_.id) AS sclr_3 FROM Author a1_ WHERE a1_.id = a0_.id) AS sclr_2 FROM Author a0_ ORDER BY sclr_1 DESC, sclr_2 ASC',
             $limitQuery->getSQL()
         );
     }