PaginationWalker::walkSelectClause()   A
last analyzed

Complexity

Conditions 3
Paths 3

Size

Total Lines 13
Code Lines 7

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 12

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 3
eloc 7
c 1
b 0
f 0
nc 3
nop 1
dl 0
loc 13
ccs 0
cts 11
cp 0
crap 12
rs 10
1
<?php declare(strict_types=1);
2
3
namespace Artprima\QueryFilterBundle\Query\Mysql;
4
5
use Doctrine\ORM\Query\SqlWalker;
6
use Doctrine\ORM\Query\AST\SelectClause;
7
8
/**
9
 * Class PaginationWalker
10
 *
11
 * @author Denis Voytyuk <[email protected]>
12
 */
13
class PaginationWalker extends SqlWalker
14
{
15
    /**
16
     * Walks down a SelectClause AST node, thereby generating the appropriate SQL.
17
     *
18
     * @param SelectClause $selectClause
19
     * @return string The SQL.
20
     *
21
     * Usage:
22
     *
23
     * <pre>
24
     * $query->setHint(DoctrineQuery::HINT_CUSTOM_OUTPUT_WALKER, PaginationWalker::class);
25
     * $query->setHint('mysqlWalker.sqlCalcFoundRows', true);
26
     * </pre>
27
     */
28
    public function walkSelectClause($selectClause): string
29
    {
30
        $sql = parent::walkSelectClause($selectClause);
31
32
        if ($this->getQuery()->getHint('mysqlWalker.sqlCalcFoundRows') === true) {
33
            if ($selectClause->isDistinct) {
34
                $sql = str_replace('SELECT DISTINCT', 'SELECT DISTINCT SQL_CALC_FOUND_ROWS', $sql);
35
            } else {
36
                $sql = str_replace('SELECT', 'SELECT SQL_CALC_FOUND_ROWS', $sql);
37
            }
38
        }
39
40
        return $sql;
41
    }
42
}
43