PdoIterator::__construct()   A
last analyzed

Complexity

Conditions 5
Paths 1

Size

Total Lines 23

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 23
rs 9.2408
c 0
b 0
f 0
cc 5
nc 1
nop 4
1
<?php
2
3
namespace itertools;
4
5
use Exception;
6
use PDO;
7
8
9
class PdoIterator extends TakeWhileIterator
10
{
11
	public function __construct(PDO $pdo, $query, $params = array(), $fetchMode = PDO::FETCH_OBJ)
12
	{
13
		$pdoStatement = null;
14
		$it = new CallbackIterator(function() use (& $pdoStatement, $pdo, $query, $params, $fetchMode) {
15
			if(null === $pdoStatement) {
16
				if(count($params) != 0) {
17
					$pdoStatement = $pdo->prepare($query);
18
					if(false === $pdoStatement) {
19
						throw new Exception('Invalid query');
20
					}
21
					$pdoStatement->execute($params);
22
				} else {
23
					$pdoStatement = $pdo->query($query);
24
				}
25
				if(false === $pdoStatement) {
26
					throw new Exception('Invalid query');
27
				}
28
				$pdoStatement->setFetchMode($fetchMode);
29
			}
30
			return $pdoStatement->fetch();
31
		});
32
		parent::__construct($it, function($r) { return $r !== false; });
33
	}
34
}
35
36