Annotation of embedaddon/php/ext/pdo/tests/pdo_014.phpt, revision 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>