PdoReader::valid()   A
last analyzed

Complexity

Conditions 2
Paths 2

Size

Total Lines 6
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 3
CRAP Score 2

Importance

Changes 0
Metric Value
dl 0
loc 6
ccs 3
cts 3
cp 1
rs 9.4285
c 0
b 0
f 0
cc 2
eloc 3
nc 2
nop 0
crap 2
1
<?php
2
3
namespace Port\Pdo;
4
5
use Port\Reader\CountableReader;
6
7
/**
8
 * Reads data through PDO
9
 *
10
 * @author Robbie Mackay
11
 */
12
class PdoReader implements CountableReader
13
{
14
    /**
15
     * @var \PDO
16
     */
17
    protected $pdo;
18
19
    /**
20
     * @var string
21
     */
22
    protected $tableName;
23
24
    /**
25
     * @var \PDOStatement
26
     */
27
    protected $statement;
28
29
    /**
30
     * @var array
31
     */
32
    private $data;
33
34
    /**
35
     * @param \PDO   $pdo
36
     * @param string $sql
37
     * @param array  $params
38
     */
39 3
    public function __construct(\PDO $pdo, $sql, array $params = [])
40
    {
41 3
        $this->pdo = $pdo;
42 3
        $this->statement = $this->pdo->prepare($sql);
43
44 3
        foreach ($params as $key => $value) {
45
            $this->statement->bindValue($key, $value);
46 3
        }
47 3
    }
48
49
    /**
50
     * {@inheritdoc}
51
     */
52 2
    public function current()
53
    {
54 2
        return current($this->data);
55
    }
56
57
    /**
58
     * {@inheritdoc}
59
     */
60 2
    public function next()
61
    {
62 2
        next($this->data);
63 2
    }
64
65
    /**
66
     * {@inheritdoc}
67
     */
68
    public function key()
69
    {
70
        return key($this->data);
71
    }
72
73
    /**
74
     * {@inheritdoc}
75
     */
76 2
    public function valid()
77
    {
78 2
        $key = key($this->data);
79
80 2
        return ($key !== null && $key !== false);
81
    }
82
83
    /**
84
     * {@inheritdoc}
85
     */
86 2
    public function rewind()
87
    {
88 2
        $this->loadData();
89
90 2
        reset($this->data);
91 2
    }
92
93
    /**
94
     * {@inheritdoc}
95
     */
96 1
    public function count()
97
    {
98 1
        $this->loadData();
99
100 1
        return count($this->data);
101
    }
102
103
    /**
104
     * Load data if it hasn't been loaded yet
105
     */
106 3
    protected function loadData()
107
    {
108 3
        if (null === $this->data) {
109 3
            $this->statement->execute();
110 3
            $this->data = $this->statement->fetchAll(\PDO::FETCH_ASSOC);
111 3
        }
112 3
    }
113
}
114