Passed
Push — master ( 82a58b...d35cf8 )
by Tomasz
02:32
created

DbalWalkablePaginator::getTotal()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 9
Code Lines 6

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 2

Importance

Changes 0
Metric Value
dl 0
loc 9
ccs 0
cts 7
cp 0
rs 9.6666
c 0
b 0
f 0
cc 1
eloc 6
nc 1
nop 0
crap 2
1
<?php
2
declare(strict_types=1);
3
4
namespace ReadModel\Bridge\Doctrine;
5
6
use Doctrine\DBAL\Query\QueryBuilder;
7
use ReadModel\WalkablePaginator;
8
use ReadModel\Walker\ResultWalker;
9
10
class DbalWalkablePaginator extends WalkablePaginator
11
{
12
    /** @var QueryBuilder */
13
    private $qb;
14
15
    public function __construct(QueryBuilder $qb, ?int $limit, int $offset, ResultWalker $resultWalker = null)
16
    {
17
        parent::__construct($limit, $offset, $resultWalker);
18
        $this->qb = $qb;
19
    }
20
21
    protected function findAll(): array
22
    {
23
        $this->qb
24
             ->setMaxResults($this->limit)
25
             ->setFirstResult($this->offset);
26
27
        return $this->qb->execute()->fetchAll();
28
    }
29
30
    protected function getTotal(): int
31
    {
32
        $qb = clone $this->qb;
33
        $qb->select('COUNT(*)')
34
           ->setMaxResults(null)
35
           ->setFirstResult(null)
36
           ->resetQueryPart('orderBy');
37
38
        return (int) $qb->execute()->fetchColumn();
39
    }
40
}
41