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

DbalPaginator   A

Complexity

Total Complexity 3

Size/Duplication

Total Lines 30
Duplicated Lines 0 %

Test Coverage

Coverage 0%

Importance

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