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>