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

DbalWalkablePaginator   A

Complexity

Total Complexity 3

Size/Duplication

Total Lines 29
Duplicated Lines 0 %

Test Coverage

Coverage 0%

Importance

Changes 0
Metric Value
wmc 3
dl 0
loc 29
ccs 0
cts 16
cp 0
rs 10
c 0
b 0
f 0

3 Methods

Rating   Name   Duplication   Size   Complexity  
A findAll() 0 7 1
A __construct() 0 4 1
A getTotal() 0 9 1
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