Annotation of embedaddon/php/ext/pdo/tests/pdo_014.phpt, revision 1.1.1.1
1.1 misho 1: --TEST--
2: PDO Common: PDOStatement SPL iterator
3: --SKIPIF--
4: <?php # vim:ft=php
5: if (!extension_loaded('pdo')) die('skip');
6: if (!extension_loaded('SPL')) die('skip SPL not available');
7: if (!class_exists('IteratorIterator', false)) die('skip IteratorIterator class not present');
8: $dir = getenv('REDIR_TEST_DIR');
9: if (false == $dir) die('skip no driver');
10: require_once $dir . 'pdo_test.inc';
11: PDOTest::skip();
12: ?>
13: --FILE--
14: <?php
15: if (getenv('REDIR_TEST_DIR') === false) putenv('REDIR_TEST_DIR='.dirname(__FILE__) . '/../../pdo/tests/');
16: require_once getenv('REDIR_TEST_DIR') . 'pdo_test.inc';
17: $db = PDOTest::factory();
18:
19: $db->exec('CREATE TABLE test(id int NOT NULL PRIMARY KEY, val VARCHAR(10), grp VARCHAR(10))');
20: $db->exec('INSERT INTO test VALUES(1, \'A\', \'Group1\')');
21: $db->exec('INSERT INTO test VALUES(2, \'B\', \'Group2\')');
22: $SELECT = 'SELECT val, grp FROM test';
23:
24: class Test
25: {
26: function __construct($name = 'N/A')
27: {
28: echo __METHOD__ . "($name)\n";
29: }
30: }
31:
32: $stmt = $db->query($SELECT, PDO::FETCH_CLASS, 'Test', array('WOW'));
33:
34: $it = new IteratorIterator($stmt); /* check if we can convert that thing */
35:
36: /*** HINT: If YOU plan to do so remember not to call rewind() -> see below ***/
37:
38: foreach($it as $data)
39: {
40: var_dump($data);
41: }
42:
43: $it->next(); /* must be allowed */
44: var_dump($it->current()); /* must return NULL */
45: var_dump($it->valid()); /* must return false */
46:
47: class PDOStatementAggregate extends PDOStatement implements IteratorAggregate
48: {
49: private function __construct()
50: {
51: echo __METHOD__ . "\n";
52: $this->setFetchMode(PDO::FETCH_NUM);
53: /* default fetch mode is BOTH, so we see if the ctor can overwrite that */
54: }
55:
56: function getIterator()
57: {
58: echo __METHOD__ . "\n";
59: $this->execute();
60: return new IteratorIterator($this, 'PDOStatement');
61: }
62: }
63:
64: $stmt = $db->prepare($SELECT, array(PDO::ATTR_STATEMENT_CLASS=>array('PDOStatementAggregate')));
65:
66: foreach($stmt as $data)
67: {
68: var_dump($data);
69: }
70:
71: ?>
72: --EXPECTF--
73: Test::__construct(WOW)
74: object(Test)#4 (2) {
75: ["val"]=>
76: string(1) "A"
77: ["grp"]=>
78: string(6) "Group1"
79: }
80: Test::__construct(WOW)
81: object(Test)#6 (2) {
82: ["val"]=>
83: string(1) "B"
84: ["grp"]=>
85: string(6) "Group2"
86: }
87: NULL
88: bool(false)
89: PDOStatementAggregate::__construct
90: PDOStatementAggregate::getIterator
91: array(2) {
92: [0]=>
93: string(1) "A"
94: [1]=>
95: string(6) "Group1"
96: }
97: array(2) {
98: [0]=>
99: string(1) "B"
100: [1]=>
101: string(6) "Group2"
102: }
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>