wez             Wed Jul  6 02:07:27 2005 EDT

  Added files:                 
    /php-src/ext/pdo/tests      pdo_001.phpt pdo_002.phpt pdo_003.phpt 
                                pdo_004.phpt pdo_005.phpt pdo_006.phpt 
                                pdo_007.phpt pdo_008.phpt pdo_009.phpt 
                                pdo_010.phpt pdo_011.phpt pdo_012.phpt 
                                pdo_013.phpt pdo_014.phpt pdo_015.phpt 
                                pdo_016.phpt pdo_017.phpt pdo_018.phpt 
                                pdo_019.phpt pdo_020.phpt pdo_021.phpt 
                                pdo_022.phpt pdo_023.phpt pdo_024.phpt 
                                pdo_025.phpt pdo_026.phpt 
  Log:
  Add tests that can be redirected to with new test harness feature.
  
  
http://cvs.php.net/co.php/php-src/ext/pdo/tests/pdo_001.phpt?r=1.1&p=1
Index: php-src/ext/pdo/tests/pdo_001.phpt
+++ php-src/ext/pdo/tests/pdo_001.phpt
--TEST--
PDO Common: PDO_FETCH_ASSOC
--SKIPIF--
<?php # vim:ft=php
if (!extension_loaded('pdo')) print 'skip';
if (false == getenv('REDIR_TEST_DIR')) print 'skip no driver'; ?>
--FILE--
<?php
require getenv('REDIR_TEST_DIR') . 'pdo_test.php';
$db = PDOTest::factory();

$db->exec('CREATE TABLE test(id int NOT NULL PRIMARY KEY, val VARCHAR(10))');
$db->exec("INSERT INTO test VALUES(1, 'A')");
$db->exec("INSERT INTO test VALUES(2, 'B')");
$db->exec("INSERT INTO test VALUES(3, 'C')");

$stmt = $db->prepare('SELECT * from test');
$stmt->execute();

var_dump($stmt->fetchAll(PDO_FETCH_ASSOC));
?>
--EXPECT--
array(3) {
  [0]=>
  array(2) {
    ["id"]=>
    string(1) "1"
    ["val"]=>
    string(1) "A"
  }
  [1]=>
  array(2) {
    ["id"]=>
    string(1) "2"
    ["val"]=>
    string(1) "B"
  }
  [2]=>
  array(2) {
    ["id"]=>
    string(1) "3"
    ["val"]=>
    string(1) "C"
  }
}

http://cvs.php.net/co.php/php-src/ext/pdo/tests/pdo_002.phpt?r=1.1&p=1
Index: php-src/ext/pdo/tests/pdo_002.phpt
+++ php-src/ext/pdo/tests/pdo_002.phpt
--TEST--
PDO Common: PDO_FETCH_NUM
--SKIPIF--
<?php # vim:ft=php
if (!extension_loaded('pdo')) print 'skip';
if (false == getenv('REDIR_TEST_DIR')) print 'skip no driver'; ?>
--FILE--
<?php
require getenv('REDIR_TEST_DIR') . 'pdo_test.php';
$db = PDOTest::factory();

$db->exec('CREATE TABLE test(id int NOT NULL PRIMARY KEY, val VARCHAR(10))');
$db->exec("INSERT INTO test VALUES(1, 'A')");
$db->exec("INSERT INTO test VALUES(2, 'B')");
$db->exec("INSERT INTO test VALUES(3, 'C')");

$stmt = $db->prepare('SELECT * from test');
$stmt->execute();

var_dump($stmt->fetchAll(PDO_FETCH_NUM));
?>
--EXPECT--
array(3) {
  [0]=>
  array(2) {
    [0]=>
    string(1) "1"
    [1]=>
    string(1) "A"
  }
  [1]=>
  array(2) {
    [0]=>
    string(1) "2"
    [1]=>
    string(1) "B"
  }
  [2]=>
  array(2) {
    [0]=>
    string(1) "3"
    [1]=>
    string(1) "C"
  }
}

http://cvs.php.net/co.php/php-src/ext/pdo/tests/pdo_003.phpt?r=1.1&p=1
Index: php-src/ext/pdo/tests/pdo_003.phpt
+++ php-src/ext/pdo/tests/pdo_003.phpt
--TEST--
PDO Common: PDO_FETCH_BOTH
--SKIPIF--
<?php # vim:ft=php
if (!extension_loaded('pdo')) print 'skip';
if (false == getenv('REDIR_TEST_DIR')) print 'skip no driver'; ?>
--FILE--
<?php
require getenv('REDIR_TEST_DIR') . 'pdo_test.php';
$db = PDOTest::factory();

$db->exec('CREATE TABLE test(id int NOT NULL PRIMARY KEY, val VARCHAR(10))');
$db->exec("INSERT INTO test VALUES(1, 'A')");
$db->exec("INSERT INTO test VALUES(2, 'B')");
$db->exec("INSERT INTO test VALUES(3, 'C')");

$stmt = $db->prepare('SELECT * from test');
$stmt->execute();

var_dump($stmt->fetchAll(PDO_FETCH_BOTH));
?>
--EXPECT--
array(3) {
  [0]=>
  array(4) {
    ["id"]=>
    string(1) "1"
    [0]=>
    string(1) "1"
    ["val"]=>
    string(1) "A"
    [1]=>
    string(1) "A"
  }
  [1]=>
  array(4) {
    ["id"]=>
    string(1) "2"
    [0]=>
    string(1) "2"
    ["val"]=>
    string(1) "B"
    [1]=>
    string(1) "B"
  }
  [2]=>
  array(4) {
    ["id"]=>
    string(1) "3"
    [0]=>
    string(1) "3"
    ["val"]=>
    string(1) "C"
    [1]=>
    string(1) "C"
  }
}

http://cvs.php.net/co.php/php-src/ext/pdo/tests/pdo_004.phpt?r=1.1&p=1
Index: php-src/ext/pdo/tests/pdo_004.phpt
+++ php-src/ext/pdo/tests/pdo_004.phpt
--TEST--
PDO Common: PDO_FETCH_OBJ
--SKIPIF--
<?php # vim:ft=php
if (!extension_loaded('pdo')) print 'skip';
if (false == getenv('REDIR_TEST_DIR')) print 'skip no driver'; ?>
--FILE--
<?php
require getenv('REDIR_TEST_DIR') . 'pdo_test.php';
$db = PDOTest::factory();

$db->exec('CREATE TABLE test(id int NOT NULL PRIMARY KEY, val VARCHAR(10))');
$db->exec("INSERT INTO test VALUES(1, 'A')");
$db->exec("INSERT INTO test VALUES(2, 'B')");
$db->exec("INSERT INTO test VALUES(3, 'C')");

$stmt = $db->prepare('SELECT * from test');
$stmt->execute();

var_dump($stmt->fetchAll(PDO_FETCH_OBJ));
?>
--EXPECTF--
array(3) {
  [0]=>
  object(stdClass)#%d (2) {
    ["id"]=>
    string(1) "1"
    ["val"]=>
    string(1) "A"
  }
  [1]=>
  object(stdClass)#%d (2) {
    ["id"]=>
    string(1) "2"
    ["val"]=>
    string(1) "B"
  }
  [2]=>
  object(stdClass)#%d (2) {
    ["id"]=>
    string(1) "3"
    ["val"]=>
    string(1) "C"
  }
}

http://cvs.php.net/co.php/php-src/ext/pdo/tests/pdo_005.phpt?r=1.1&p=1
Index: php-src/ext/pdo/tests/pdo_005.phpt
+++ php-src/ext/pdo/tests/pdo_005.phpt
--TEST--
PDO Common: PDO_FETCH_CLASS
--SKIPIF--
<?php # vim:ft=php
if (!extension_loaded('pdo')) print 'skip';
if (false == getenv('REDIR_TEST_DIR')) print 'skip no driver'; ?>
--FILE--
<?php
require getenv('REDIR_TEST_DIR') . 'pdo_test.php';
$db = PDOTest::factory();

$db->exec('CREATE TABLE test(id int NOT NULL PRIMARY KEY, val VARCHAR(10), val2 
VARCHAR(10))');
$db->exec("INSERT INTO test VALUES(1, 'A', 'AA')");
$db->exec("INSERT INTO test VALUES(2, 'B', 'BB')");
$db->exec("INSERT INTO test VALUES(3, 'C', 'CC')");

$stmt = $db->prepare('SELECT id, val, val2 from test');

class TestBase
{
        public $id;
        protected $val;
        private $val2;
}

class TestDerived extends TestBase
{
        protected $row;

        public function __construct(&$row)
        {
                echo __METHOD__ . "($row,{$this->id})\n";
                $this->row = $row++;
        }
}

$stmt->execute();
var_dump($stmt->fetchAll(PDO_FETCH_CLASS));

$stmt->execute();
var_dump($stmt->fetchAll(PDO_FETCH_CLASS, 'TestBase'));

$stmt->execute();
var_dump($stmt->fetchAll(PDO_FETCH_CLASS, 'TestDerived', array(0)));

?>
--EXPECTF--
array(3) {
  [0]=>
  object(stdClass)#%d (3) {
    ["id"]=>
    string(1) "1"
    ["val"]=>
    string(1) "A"
    ["val2"]=>
    string(2) "AA"
  }
  [1]=>
  object(stdClass)#%d (3) {
    ["id"]=>
    string(1) "2"
    ["val"]=>
    string(1) "B"
    ["val2"]=>
    string(2) "BB"
  }
  [2]=>
  object(stdClass)#%d (3) {
    ["id"]=>
    string(1) "3"
    ["val"]=>
    string(1) "C"
    ["val2"]=>
    string(2) "CC"
  }
}
array(3) {
  [0]=>
  object(TestBase)#%d (3) {
    ["id"]=>
    string(1) "1"
    ["val:protected"]=>
    string(1) "A"
    ["val2:private"]=>
    string(2) "AA"
  }
  [1]=>
  object(TestBase)#%d (3) {
    ["id"]=>
    string(1) "2"
    ["val:protected"]=>
    string(1) "B"
    ["val2:private"]=>
    string(2) "BB"
  }
  [2]=>
  object(TestBase)#%d (3) {
    ["id"]=>
    string(1) "3"
    ["val:protected"]=>
    string(1) "C"
    ["val2:private"]=>
    string(2) "CC"
  }
}
TestDerived::__construct(0,1)
TestDerived::__construct(1,2)
TestDerived::__construct(2,3)
array(3) {
  [0]=>
  object(TestDerived)#%d (5) {
    ["row:protected"]=>
    int(0)
    ["id"]=>
    string(1) "1"
    ["val:protected"]=>
    string(1) "A"
    ["val2:private"]=>
    NULL
    ["val2"]=>
    string(2) "AA"
  }
  [1]=>
  object(TestDerived)#%d (5) {
    ["row:protected"]=>
    int(1)
    ["id"]=>
    string(1) "2"
    ["val:protected"]=>
    string(1) "B"
    ["val2:private"]=>
    NULL
    ["val2"]=>
    string(2) "BB"
  }
  [2]=>
  object(TestDerived)#%d (5) {
    ["row:protected"]=>
    int(2)
    ["id"]=>
    string(1) "3"
    ["val:protected"]=>
    string(1) "C"
    ["val2:private"]=>
    NULL
    ["val2"]=>
    string(2) "CC"
  }
}

http://cvs.php.net/co.php/php-src/ext/pdo/tests/pdo_006.phpt?r=1.1&p=1
Index: php-src/ext/pdo/tests/pdo_006.phpt
+++ php-src/ext/pdo/tests/pdo_006.phpt
--TEST--
PDO Common: PDO_FETCH_GROUP
--SKIPIF--
<?php # vim:ft=php
if (!extension_loaded('pdo')) print 'skip';
if (false == getenv('REDIR_TEST_DIR')) print 'skip no driver'; ?>
--FILE--
<?php
require getenv('REDIR_TEST_DIR') . 'pdo_test.php';
$db = PDOTest::factory();

$db->exec('CREATE TABLE test(id int NOT NULL PRIMARY KEY, val VARCHAR(10))');
$db->exec("INSERT INTO test VALUES(1, 'A')");
$db->exec("INSERT INTO test VALUES(2, 'A')");
$db->exec("INSERT INTO test VALUES(3, 'C')");

$stmt = $db->prepare('SELECT val, id from test');

$stmt->execute();
var_dump($stmt->fetchAll(PDO_FETCH_NUM|PDO_FETCH_GROUP));

$stmt->execute();
var_dump($stmt->fetchAll(PDO_FETCH_ASSOC|PDO_FETCH_GROUP));

?>
--EXPECT--
array(2) {
  ["A"]=>
  array(2) {
    [0]=>
    array(1) {
      [0]=>
      string(1) "1"
    }
    [1]=>
    array(1) {
      [0]=>
      string(1) "2"
    }
  }
  ["C"]=>
  array(1) {
    [0]=>
    array(1) {
      [0]=>
      string(1) "3"
    }
  }
}
array(2) {
  ["A"]=>
  array(2) {
    [0]=>
    array(1) {
      ["id"]=>
      string(1) "1"
    }
    [1]=>
    array(1) {
      ["id"]=>
      string(1) "2"
    }
  }
  ["C"]=>
  array(1) {
    [0]=>
    array(1) {
      ["id"]=>
      string(1) "3"
    }
  }
}

http://cvs.php.net/co.php/php-src/ext/pdo/tests/pdo_007.phpt?r=1.1&p=1
Index: php-src/ext/pdo/tests/pdo_007.phpt
+++ php-src/ext/pdo/tests/pdo_007.phpt
--TEST--
PDO Common: PDO_FETCH_UNIQUE
--SKIPIF--
<?php # vim:ft=php
if (!extension_loaded('pdo')) print 'skip';
if (false == getenv('REDIR_TEST_DIR')) print 'skip no driver'; ?>
--FILE--
<?php
require getenv('REDIR_TEST_DIR') . 'pdo_test.php';
$db = PDOTest::factory();

$db->exec('CREATE TABLE test(id CHAR(1) NOT NULL PRIMARY KEY, val 
VARCHAR(10))');
$db->exec("INSERT INTO test VALUES('A', 'A')");
$db->exec("INSERT INTO test VALUES('B', 'A')");
$db->exec("INSERT INTO test VALUES('C', 'C')");

$stmt = $db->prepare('SELECT id, val from test');

$stmt->execute();
var_dump($stmt->fetchAll(PDO_FETCH_NUM|PDO_FETCH_UNIQUE));

$stmt->execute();
var_dump($stmt->fetchAll(PDO_FETCH_ASSOC|PDO_FETCH_UNIQUE));

?>
--EXPECT--
array(3) {
  ["A"]=>
  array(1) {
    [0]=>
    string(1) "A"
  }
  ["B"]=>
  array(1) {
    [0]=>
    string(1) "A"
  }
  ["C"]=>
  array(1) {
    [0]=>
    string(1) "C"
  }
}
array(3) {
  ["A"]=>
  array(1) {
    ["val"]=>
    string(1) "A"
  }
  ["B"]=>
  array(1) {
    ["val"]=>
    string(1) "A"
  }
  ["C"]=>
  array(1) {
    ["val"]=>
    string(1) "C"
  }
}

http://cvs.php.net/co.php/php-src/ext/pdo/tests/pdo_008.phpt?r=1.1&p=1
Index: php-src/ext/pdo/tests/pdo_008.phpt
+++ php-src/ext/pdo/tests/pdo_008.phpt
--TEST--
PDO Common: PDO_FETCH_UNIQUE conflict
--SKIPIF--
<?php # vim:ft=php
if (!extension_loaded('pdo')) print 'skip';
if (false == getenv('REDIR_TEST_DIR')) print 'skip no driver'; ?>
--FILE--
<?php
require getenv('REDIR_TEST_DIR') . 'pdo_test.php';
$db = PDOTest::factory();

$db->exec('CREATE TABLE test(id CHAR(1) NOT NULL PRIMARY KEY, val 
VARCHAR(10))');
$db->exec("INSERT INTO test VALUES('A', 'A')");
$db->exec("INSERT INTO test VALUES('B', 'A')");
$db->exec("INSERT INTO test VALUES('C', 'C')");

$stmt = $db->prepare('SELECT val, id from test');

$stmt->execute();
var_dump($stmt->fetchAll(PDO_FETCH_NUM|PDO_FETCH_UNIQUE));

?>
--EXPECT--
array(2) {
  ["A"]=>
  array(1) {
    [0]=>
    string(1) "B"
  }
  ["C"]=>
  array(1) {
    [0]=>
    string(1) "C"
  }
}

http://cvs.php.net/co.php/php-src/ext/pdo/tests/pdo_009.phpt?r=1.1&p=1
Index: php-src/ext/pdo/tests/pdo_009.phpt
+++ php-src/ext/pdo/tests/pdo_009.phpt
--TEST--
PDO Common: PDO_FETCH_CLASSTYPE
--SKIPIF--
<?php # vim:ft=php
if (!extension_loaded('pdo')) print 'skip';
if (false == getenv('REDIR_TEST_DIR')) print 'skip no driver'; ?>
--FILE--
<?php
require getenv('REDIR_TEST_DIR') . 'pdo_test.php';
$db = PDOTest::factory();

$db->exec('CREATE TABLE classtypes(id int NOT NULL PRIMARY KEY, name 
VARCHAR(10) UNIQUE)');
$db->exec('INSERT INTO classtypes VALUES(0, \'stdClass\')'); 
$db->exec('INSERT INTO classtypes VALUES(1, \'Test1\')'); 
$db->exec('INSERT INTO classtypes VALUES(2, \'Test2\')'); 
$db->exec('CREATE TABLE test(id int NOT NULL PRIMARY KEY, classtype int, val 
VARCHAR(10))');
$db->exec('INSERT INTO test VALUES(1, 0, \'A\')'); 
$db->exec('INSERT INTO test VALUES(2, 1, \'B\')'); 
$db->exec('INSERT INTO test VALUES(3, 2, \'C\')'); 
$db->exec('INSERT INTO test VALUES(4, 3, \'D\')'); 

$stmt = $db->prepare('SELECT classtypes.name, test.id AS id, test.val AS val 
FROM test LEFT JOIN classtypes ON test.classtype=classtypes.id');

class Test1
{
        public function __construct()
        {
                echo __METHOD__ . "()\n";
        }
}

class Test2
{
        public function __construct()
        {
                echo __METHOD__ . "()\n";
        }
}

class Test3
{
        public function __construct()
        {
                echo __METHOD__ . "()\n";
        }
}

$stmt->execute();
var_dump($stmt->fetchAll(PDO_FETCH_NUM));

$stmt->execute();
var_dump($stmt->fetchAll(PDO_FETCH_CLASS|PDO_FETCH_CLASSTYPE, 'Test3'));

?>
--EXPECTF--
array(4) {
  [0]=>
  array(3) {
    [0]=>
    string(8) "stdClass"
    [1]=>
    string(1) "1"
    [2]=>
    string(1) "A"
  }
  [1]=>
  array(3) {
    [0]=>
    string(5) "Test1"
    [1]=>
    string(1) "2"
    [2]=>
    string(1) "B"
  }
  [2]=>
  array(3) {
    [0]=>
    string(5) "Test2"
    [1]=>
    string(1) "3"
    [2]=>
    string(1) "C"
  }
  [3]=>
  array(3) {
    [0]=>
    NULL
    [1]=>
    string(1) "4"
    [2]=>
    string(1) "D"
  }
}
Test1::__construct()
Test2::__construct()
Test3::__construct()
array(4) {
  [0]=>
  object(stdClass)#%d (2) {
    ["id"]=>
    string(1) "1"
    ["val"]=>
    string(1) "A"
  }
  [1]=>
  object(Test1)#%d (2) {
    ["id"]=>
    string(1) "2"
    ["val"]=>
    string(1) "B"
  }
  [2]=>
  object(Test2)#%d (2) {
    ["id"]=>
    string(1) "3"
    ["val"]=>
    string(1) "C"
  }
  [3]=>
  object(Test3)#%d (2) {
    ["id"]=>
    string(1) "4"
    ["val"]=>
    string(1) "D"
  }
}

http://cvs.php.net/co.php/php-src/ext/pdo/tests/pdo_010.phpt?r=1.1&p=1
Index: php-src/ext/pdo/tests/pdo_010.phpt
+++ php-src/ext/pdo/tests/pdo_010.phpt
--TEST--
PDO Common: PDO_FETCH_CLASSTYPE and GROUP/UNIQUE
--SKIPIF--
<?php # vim:ft=php
if (!extension_loaded('pdo')) print 'skip';
if (false == getenv('REDIR_TEST_DIR')) print 'skip no driver'; ?>
--FILE--
<?php
require getenv('REDIR_TEST_DIR') . 'pdo_test.php';
$db = PDOTest::factory();

$db->exec('CREATE TABLE classtypes(id int NOT NULL PRIMARY KEY, name 
VARCHAR(10) UNIQUE)');
$db->exec('INSERT INTO classtypes VALUES(0, \'stdClass\')'); 
$db->exec('INSERT INTO classtypes VALUES(1, \'Test1\')'); 
$db->exec('INSERT INTO classtypes VALUES(2, \'Test2\')'); 
$db->exec('CREATE TABLE test(id int NOT NULL PRIMARY KEY, classtype int, val 
VARCHAR(10), grp VARCHAR(10))');
$db->exec('INSERT INTO test VALUES(1, 0, \'A\', \'Group1\')'); 
$db->exec('INSERT INTO test VALUES(2, 1, \'B\', \'Group1\')'); 
$db->exec('INSERT INTO test VALUES(3, 2, \'C\', \'Group2\')'); 
$db->exec('INSERT INTO test VALUES(4, 3, \'D\', \'Group2\')'); 

$stmt = $db->prepare('SELECT classtypes.name, test.grp AS grp, test.id AS id, 
test.val AS val FROM test LEFT JOIN classtypes ON 
test.classtype=classtypes.id');

class Test1
{
        public function __construct()
        {
                echo __METHOD__ . "()\n";
        }
}

class Test2
{
        public function __construct()
        {
                echo __METHOD__ . "()\n";
        }
}

class Test3
{
        public function __construct()
        {
                echo __METHOD__ . "()\n";
        }
}


$stmt->execute();
var_dump($stmt->fetchAll(PDO_FETCH_CLASS|PDO_FETCH_CLASSTYPE|PDO_FETCH_GROUP, 
'Test3'));

$stmt->execute();
var_dump($stmt->fetchAll(PDO_FETCH_CLASS|PDO_FETCH_CLASSTYPE|PDO_FETCH_UNIQUE, 
'Test3'));

?>
--EXPECTF--
Test1::__construct()
Test2::__construct()
Test3::__construct()
array(2) {
  ["Group1"]=>
  array(2) {
    [0]=>
    object(stdClass)#%d (2) {
      ["id"]=>
      string(1) "1"
      ["val"]=>
      string(1) "A"
    }
    [1]=>
    object(Test1)#%d (2) {
      ["id"]=>
      string(1) "2"
      ["val"]=>
      string(1) "B"
    }
  }
  ["Group2"]=>
  array(2) {
    [0]=>
    object(Test2)#%d (2) {
      ["id"]=>
      string(1) "3"
      ["val"]=>
      string(1) "C"
    }
    [1]=>
    object(Test3)#%d (2) {
      ["id"]=>
      string(1) "4"
      ["val"]=>
      string(1) "D"
    }
  }
}
Test1::__construct()
Test2::__construct()
Test3::__construct()
array(2) {
  ["Group1"]=>
  object(Test1)#%d (2) {
    ["id"]=>
    string(1) "2"
    ["val"]=>
    string(1) "B"
  }
  ["Group2"]=>
  object(Test3)#%d (2) {
    ["id"]=>
    string(1) "4"
    ["val"]=>
    string(1) "D"
  }
}

http://cvs.php.net/co.php/php-src/ext/pdo/tests/pdo_011.phpt?r=1.1&p=1
Index: php-src/ext/pdo/tests/pdo_011.phpt
+++ php-src/ext/pdo/tests/pdo_011.phpt
--TEST--
PDO Common: PDO_FETCH_FUNC and statement overloading
--SKIPIF--
<?php # vim:ft=php
if (!extension_loaded('pdo')) print 'skip';
if (false == getenv('REDIR_TEST_DIR')) print 'skip no driver'; ?>
--FILE--
<?php
require getenv('REDIR_TEST_DIR') . 'pdo_test.php';
$db = PDOTest::factory();

$db->exec('CREATE TABLE test(id int NOT NULL PRIMARY KEY, val VARCHAR(10), grp 
VARCHAR(10))');
$db->exec('INSERT INTO test VALUES(1, \'A\', \'Group1\')'); 
$db->exec('INSERT INTO test VALUES(2, \'B\', \'Group1\')'); 
$db->exec('INSERT INTO test VALUES(3, \'C\', \'Group2\')'); 
$db->exec('INSERT INTO test VALUES(4, \'D\', \'Group2\')'); 

class DerivedStatement extends PDOStatement
{
        private function __construct($name, $db)
        {
                $this->name = $name;
                echo __METHOD__ . "($name)\n";
        }

        function retrieve($id, $val) {
                echo __METHOD__ . "($id,$val)\n";
                return array($id=>$val);
        }
}

$select1 = $db->prepare('SELECT grp, id FROM test');
$select2 = $db->prepare('SELECT id, val FROM test');
$derived = $db->prepare('SELECT id, val FROM test', 
array(PDO_ATTR_STATEMENT_CLASS=>array('DerivedStatement', array('Overloaded', 
$db))));

class Test1
{
        public function __construct($id, $val)
        {
                echo __METHOD__ . "($id,$val)\n";
                $this->id = $id;
                $this->val = $val;
        }

        static public function factory($id, $val)
        {
                echo __METHOD__ . "($id,$val)\n";
                return new self($id, $val);
        }
}

function test($id,$val='N/A')
{
        echo __METHOD__ . "($id,$val)\n";
        return array($id=>$val);
}

$f = new Test1(0,0);

$select1->execute();
var_dump($select1->fetchAll(PDO_FETCH_FUNC|PDO_FETCH_GROUP, 'test'));

$select2->execute();
var_dump($select2->fetchAll(PDO_FETCH_FUNC, 'test'));

$select2->execute();
var_dump($select2->fetchAll(PDO_FETCH_FUNC, array('Test1','factory')));

$select2->execute();
var_dump($select2->fetchAll(PDO_FETCH_FUNC, array($f, 'factory')));

var_dump(get_class($derived));
$derived->execute();
var_dump($derived->fetchAll(PDO_FETCH_FUNC, array($derived, 'retrieve')));

?>
--EXPECTF--
DerivedStatement::__construct(Overloaded)
Test1::__construct(0,0)
test(1,N/A)
test(2,N/A)
test(3,N/A)
test(4,N/A)
array(2) {
  ["Group1"]=>
  array(2) {
    [0]=>
    array(1) {
      [1]=>
      string(3) "N/A"
    }
    [1]=>
    array(1) {
      [2]=>
      string(3) "N/A"
    }
  }
  ["Group2"]=>
  array(2) {
    [0]=>
    array(1) {
      [3]=>
      string(3) "N/A"
    }
    [1]=>
    array(1) {
      [4]=>
      string(3) "N/A"
    }
  }
}
test(1,A)
test(2,B)
test(3,C)
test(4,D)
array(4) {
  [0]=>
  array(1) {
    [1]=>
    string(1) "A"
  }
  [1]=>
  array(1) {
    [2]=>
    string(1) "B"
  }
  [2]=>
  array(1) {
    [3]=>
    string(1) "C"
  }
  [3]=>
  array(1) {
    [4]=>
    string(1) "D"
  }
}
Test1::factory(1,A)
Test1::__construct(1,A)
Test1::factory(2,B)
Test1::__construct(2,B)
Test1::factory(3,C)
Test1::__construct(3,C)
Test1::factory(4,D)
Test1::__construct(4,D)
array(4) {
  [0]=>
  object(Test1)#%d (2) {
    ["id"]=>
    string(1) "1"
    ["val"]=>
    string(1) "A"
  }
  [1]=>
  object(Test1)#%d (2) {
    ["id"]=>
    string(1) "2"
    ["val"]=>
    string(1) "B"
  }
  [2]=>
  object(Test1)#%d (2) {
    ["id"]=>
    string(1) "3"
    ["val"]=>
    string(1) "C"
  }
  [3]=>
  object(Test1)#%d (2) {
    ["id"]=>
    string(1) "4"
    ["val"]=>
    string(1) "D"
  }
}
Test1::factory(1,A)
Test1::__construct(1,A)
Test1::factory(2,B)
Test1::__construct(2,B)
Test1::factory(3,C)
Test1::__construct(3,C)
Test1::factory(4,D)
Test1::__construct(4,D)
array(4) {
  [0]=>
  object(Test1)#%d (2) {
    ["id"]=>
    string(1) "1"
    ["val"]=>
    string(1) "A"
  }
  [1]=>
  object(Test1)#%d (2) {
    ["id"]=>
    string(1) "2"
    ["val"]=>
    string(1) "B"
  }
  [2]=>
  object(Test1)#%d (2) {
    ["id"]=>
    string(1) "3"
    ["val"]=>
    string(1) "C"
  }
  [3]=>
  object(Test1)#%d (2) {
    ["id"]=>
    string(1) "4"
    ["val"]=>
    string(1) "D"
  }
}
string(16) "DerivedStatement"
DerivedStatement::retrieve(1,A)
DerivedStatement::retrieve(2,B)
DerivedStatement::retrieve(3,C)
DerivedStatement::retrieve(4,D)
array(4) {
  [0]=>
  array(1) {
    [1]=>
    string(1) "A"
  }
  [1]=>
  array(1) {
    [2]=>
    string(1) "B"
  }
  [2]=>
  array(1) {
    [3]=>
    string(1) "C"
  }
  [3]=>
  array(1) {
    [4]=>
    string(1) "D"
  }
}

http://cvs.php.net/co.php/php-src/ext/pdo/tests/pdo_012.phpt?r=1.1&p=1
Index: php-src/ext/pdo/tests/pdo_012.phpt
+++ php-src/ext/pdo/tests/pdo_012.phpt
--TEST--
PDO Common: PDOStatement::setFetchMode
--SKIPIF--
<?php # vim:ft=php
if (!extension_loaded('pdo')) print 'skip';
if (false == getenv('REDIR_TEST_DIR')) print 'skip no driver'; ?>
--FILE--
<?php
require getenv('REDIR_TEST_DIR') . 'pdo_test.php';
$db = PDOTest::factory();

$db->exec('CREATE TABLE test(id int NOT NULL PRIMARY KEY, val VARCHAR(10), grp 
VARCHAR(10))');
$db->exec('INSERT INTO test VALUES(1, \'A\', \'Group1\')'); 
$db->exec('INSERT INTO test VALUES(2, \'B\', \'Group2\')'); 

$SELECT = 'SELECT val, grp FROM test';

$stmt = $db->query($SELECT, PDO_FETCH_NUM);
var_dump($stmt->fetchAll());

class Test
{
        function __construct($name = 'N/A')
        {
                echo __METHOD__ . "($name)\n";
        }
}

$stmt = $db->query($SELECT, PDO_FETCH_CLASS, 'Test');
var_dump($stmt->fetchAll());

$stmt = $db->query($SELECT, PDO_FETCH_NUM);
$stmt->setFetchMode(PDO_FETCH_CLASS, 'Test', array('Changed'));
var_dump($stmt->fetchAll());

?>
--EXPECTF--
array(2) {
  [0]=>
  array(2) {
    [0]=>
    string(1) "A"
    [1]=>
    string(6) "Group1"
  }
  [1]=>
  array(2) {
    [0]=>
    string(1) "B"
    [1]=>
    string(6) "Group2"
  }
}
Test::__construct(N/A)
Test::__construct(N/A)
array(2) {
  [0]=>
  object(Test)#%d (2) {
    ["val"]=>
    string(1) "A"
    ["grp"]=>
    string(6) "Group1"
  }
  [1]=>
  object(Test)#%d (2) {
    ["val"]=>
    string(1) "B"
    ["grp"]=>
    string(6) "Group2"
  }
}
Test::__construct(Changed)
Test::__construct(Changed)
array(2) {
  [0]=>
  object(Test)#%d (2) {
    ["val"]=>
    string(1) "A"
    ["grp"]=>
    string(6) "Group1"
  }
  [1]=>
  object(Test)#%d (2) {
    ["val"]=>
    string(1) "B"
    ["grp"]=>
    string(6) "Group2"
  }
}

http://cvs.php.net/co.php/php-src/ext/pdo/tests/pdo_013.phpt?r=1.1&p=1
Index: php-src/ext/pdo/tests/pdo_013.phpt
+++ php-src/ext/pdo/tests/pdo_013.phpt
--TEST--
PDO Common: PDOStatement iterator
--SKIPIF--
<?php # vim:ft=php
if (!extension_loaded('pdo')) print 'skip';
if (false == getenv('REDIR_TEST_DIR')) print 'skip no driver'; ?>
--FILE--
<?php
require getenv('REDIR_TEST_DIR') . 'pdo_test.php';
$db = PDOTest::factory();

$db->exec('CREATE TABLE test(id int NOT NULL PRIMARY KEY, val VARCHAR(10), grp 
VARCHAR(10))');
$db->exec('INSERT INTO test VALUES(1, \'A\', \'Group1\')'); 
$db->exec('INSERT INTO test VALUES(2, \'B\', \'Group2\')'); 

$SELECT = 'SELECT val, grp FROM test';

$stmt = $db->prepare($SELECT);

$stmt->execute();
$stmt->setFetchMode(PDO_FETCH_NUM);
foreach ($stmt as $data)
{
        var_dump($data);
}

class Test
{
        function __construct($name = 'N/A')
        {
                echo __METHOD__ . "($name)\n";
        }
}

foreach ($db->query($SELECT, PDO_FETCH_CLASS, 'Test') as $data)
{
        var_dump($data);
}

$stmt = $db->query($SELECT, PDO_FETCH_CLASS, 'Test', array('WOW'));

foreach($stmt as $data)
{
        var_dump($data);
}
?>
--EXPECTF--
array(2) {
  [0]=>
  string(1) "A"
  [1]=>
  string(6) "Group1"
}
array(2) {
  [0]=>
  string(1) "B"
  [1]=>
  string(6) "Group2"
}
Test::__construct(N/A)
object(Test)#%d (2) {
  ["val"]=>
  string(1) "A"
  ["grp"]=>
  string(6) "Group1"
}
Test::__construct(N/A)
object(Test)#%d (2) {
  ["val"]=>
  string(1) "B"
  ["grp"]=>
  string(6) "Group2"
}
Test::__construct(WOW)
object(Test)#%d (2) {
  ["val"]=>
  string(1) "A"
  ["grp"]=>
  string(6) "Group1"
}
Test::__construct(WOW)
object(Test)#%d (2) {
  ["val"]=>
  string(1) "B"
  ["grp"]=>
  string(6) "Group2"
}

http://cvs.php.net/co.php/php-src/ext/pdo/tests/pdo_014.phpt?r=1.1&p=1
Index: php-src/ext/pdo/tests/pdo_014.phpt
+++ php-src/ext/pdo/tests/pdo_014.phpt
--TEST--
PDO Common: PDOStatement SPL iterator
--SKIPIF--
<?php # vim:ft=php
if (!extension_loaded('pdo')) print 'skip';
if (false == getenv('REDIR_TEST_DIR')) print 'skip no driver';
if (!extension_loaded('SPL')) print 'skip SPL not available';
if (!class_exists('IteratorIterator')) print 'skip IteratorIterator class not 
present';
?>
--FILE--
<?php
require getenv('REDIR_TEST_DIR') . 'pdo_test.php';
$db = PDOTest::factory();

$db->exec('CREATE TABLE test(id int NOT NULL PRIMARY KEY, val VARCHAR(10), grp 
VARCHAR(10))');
$db->exec('INSERT INTO test VALUES(1, \'A\', \'Group1\')'); 
$db->exec('INSERT INTO test VALUES(2, \'B\', \'Group2\')'); 
$SELECT = 'SELECT val, grp FROM test';

class Test
{
        function __construct($name = 'N/A')
        {
                echo __METHOD__ . "($name)\n";
        }
}

$stmt = $db->query($SELECT, PDO_FETCH_CLASS, 'Test', array('WOW'));

$it = new IteratorIterator($stmt); /* check if we can convert that thing */

/*** HINT: If YOU plan to do so remember not to call rewind() -> see below ***/

foreach($it as $data)
{
        var_dump($data);
}

$it->next();              /* must be allowed */
var_dump($it->current()); /* must return NULL */
var_dump($it->valid());   /* must return false */

class PDOStatementAggregate extends PDOStatement implements IteratorAggregate
{
        private function __construct()
        {
                echo __METHOD__ . "\n";
                $this->setFetchMode(PDO_FETCH_NUM);   
                /* default fetch mode is BOTH, so we see if the ctor can 
overwrite that */
        }

        function getIterator()
        {
                echo __METHOD__ . "\n";
                $this->execute();
                return new IteratorIterator($this, 'PDOStatement');
        }
}

$stmt = $db->prepare($SELECT, 
array(PDO_ATTR_STATEMENT_CLASS=>array('PDOStatementAggregate')));

foreach($stmt as $data)
{
        var_dump($data);
}

?>
--EXPECTF--
Test::__construct(WOW)
object(Test)#4 (2) {
  ["val"]=>
  string(1) "A"
  ["grp"]=>
  string(6) "Group1"
}
Test::__construct(WOW)
object(Test)#6 (2) {
  ["val"]=>
  string(1) "B"
  ["grp"]=>
  string(6) "Group2"
}
NULL
bool(false)
PDOStatementAggregate::__construct
PDOStatementAggregate::getIterator
array(2) {
  [0]=>
  string(1) "A"
  [1]=>
  string(6) "Group1"
}
array(2) {
  [0]=>
  string(1) "B"
  [1]=>
  string(6) "Group2"
}

http://cvs.php.net/co.php/php-src/ext/pdo/tests/pdo_015.phpt?r=1.1&p=1
Index: php-src/ext/pdo/tests/pdo_015.phpt
+++ php-src/ext/pdo/tests/pdo_015.phpt
--TEST--
PDO Common: PDO_FETCH_COLUMN
--SKIPIF--
<?php # vim:ft=php
if (!extension_loaded('pdo')) print 'skip';
if (false == getenv('REDIR_TEST_DIR')) print 'skip no driver'; ?>
--FILE--
<?php
require getenv('REDIR_TEST_DIR') . 'pdo_test.php';
$db = PDOTest::factory();

$db->exec('CREATE TABLE test(id int NOT NULL PRIMARY KEY, val VARCHAR(10), val2 
VARCHAR(20))');
$db->exec('INSERT INTO test VALUES(1, \'A\', \'A2\')'); 
$db->exec('INSERT INTO test VALUES(2, \'A\', \'B2\')'); 

$select1 = $db->prepare('SELECT id, val, val2 FROM test');
$select2 = $db->prepare('SELECT val, val2 FROM test');

$select1->execute();
var_dump($select1->fetchAll(PDO_FETCH_COLUMN));
$select1->execute();
var_dump($select1->fetchAll(PDO_FETCH_COLUMN, 2));
$select1->execute();
var_dump($select1->fetchAll(PDO_FETCH_COLUMN|PDO_FETCH_GROUP));
$select1->execute();
var_dump($select1->fetchAll(PDO_FETCH_COLUMN|PDO_FETCH_UNIQUE));
$select1->execute();
var_dump($select1->fetchAll(PDO_FETCH_COLUMN|PDO_FETCH_UNIQUE, 0));
$select1->execute();
var_dump($select1->fetchAll(PDO_FETCH_COLUMN|PDO_FETCH_UNIQUE, 1));
$select1->execute();
var_dump($select1->fetchAll(PDO_FETCH_COLUMN|PDO_FETCH_UNIQUE, 2));

$select2->execute();
var_dump($select2->fetchAll(PDO_FETCH_COLUMN|PDO_FETCH_GROUP));

?>
--EXPECT--
array(2) {
  [0]=>
  string(1) "1"
  [1]=>
  string(1) "2"
}
array(2) {
  [0]=>
  string(2) "A2"
  [1]=>
  string(2) "B2"
}
array(2) {
  [1]=>
  array(1) {
    [0]=>
    string(1) "A"
  }
  [2]=>
  array(1) {
    [0]=>
    string(1) "A"
  }
}
array(2) {
  [1]=>
  string(1) "A"
  [2]=>
  string(1) "A"
}
array(2) {
  [1]=>
  string(1) "1"
  [2]=>
  string(1) "2"
}
array(2) {
  [1]=>
  string(1) "A"
  [2]=>
  string(1) "A"
}
array(2) {
  [1]=>
  string(2) "A2"
  [2]=>
  string(2) "B2"
}
array(1) {
  ["A"]=>
  array(2) {
    [0]=>
    string(2) "A2"
    [1]=>
    string(2) "B2"
  }
}

http://cvs.php.net/co.php/php-src/ext/pdo/tests/pdo_016.phpt?r=1.1&p=1
Index: php-src/ext/pdo/tests/pdo_016.phpt
+++ php-src/ext/pdo/tests/pdo_016.phpt
--TEST--
PDO Common: PDO_FETCH_BOUND
--SKIPIF--
<?php # vim:ft=php
if (!extension_loaded('pdo')) print 'skip';
if (false == getenv('REDIR_TEST_DIR')) print 'skip no driver'; ?>
--FILE--
<?php
require getenv('REDIR_TEST_DIR') . 'pdo_test.php';
$db = PDOTest::factory();

$db->exec('CREATE TABLE test(idx int NOT NULL PRIMARY KEY, txt VARCHAR(20))');
$db->exec('INSERT INTO test VALUES(0, \'String0\')'); 
$db->exec('INSERT INTO test VALUES(1, \'String1\')'); 
$db->exec('INSERT INTO test VALUES(2, \'String2\')'); 
$stmt1 = $db->prepare('SELECT COUNT(idx) FROM test'); 
$stmt2 = $db->prepare('SELECT idx, txt FROM test ORDER by idx'); 

$stmt1->execute();
var_dump($stmt1->fetchColumn());

$stmt2->execute();
$cont = $stmt2->fetchAll();
var_dump($cont);

$stmt2->execute();
$cont = $stmt2->fetchAll(PDO_FETCH_COLUMN|PDO_FETCH_UNIQUE);
var_dump($cont);

echo "===WHILE===\n";

$stmt2->bindColumn('idx', $idx);
$stmt2->bindColumn('txt', $txt);
$stmt2->execute();

while($stmt2->fetch(PDO_FETCH_BOUND)) {
        var_dump(array($idx=>$txt));
}

echo "===ALONE===\n";

$stmt3 = $db->prepare('SELECT txt FROM test WHERE idx=:inp'); 
$stmt3->bindParam(':inp', $idx); /* by foreign name */

$stmt4 = $db->prepare('SELECT idx FROM test WHERE txt=:txt'); 
$stmt4->bindParam(':txt', $txt);  /* using same name */

foreach($cont as $idx => $txt)
{
        var_dump(array($idx=>$txt));
        var_dump($stmt3->execute());

        if ($idx == 0) {
                /* portability-wise, you may only bindColumn()s
                 * after execute() has been called at least once */
                $stmt3->bindColumn('txt', $col1);
        }
        var_dump($stmt3->fetch(PDO_FETCH_BOUND));

        var_dump($stmt4->execute());
        if ($idx == 0) {
                /* portability-wise, you may only bindColumn()s
                 * after execute() has been called at least once */
                $stmt4->bindColumn('idx', $col2);
        }
        var_dump($stmt4->fetch(PDO_FETCH_BOUND));
        var_dump(array($col2=>$col1));
}

echo "===REBIND/SAME===\n";

$stmt4->bindColumn('idx', $col1);

foreach($cont as $idx => $txt)
{
        var_dump(array($idx=>$txt));
        var_dump($stmt3->execute());
        var_dump($stmt3->fetch(PDO_FETCH_BOUND));
        var_dump($col1);
        var_dump($stmt4->execute());
        var_dump($stmt4->fetch(PDO_FETCH_BOUND));
        var_dump($col1);
}

echo "===REBIND/CONFLICT===\n";

$stmt2->bindColumn('idx', $col1);
$stmt2->bindColumn('txt', $col1);
$stmt2->execute();

while($stmt2->fetch(PDO_FETCH_BOUND))
{
        var_dump($col1);
}


?>
--EXPECT--
string(1) "3"
array(3) {
  [0]=>
  string(7) "String0"
  [1]=>
  string(7) "String1"
  [2]=>
  string(7) "String2"
}
===WHILE===
array(1) {
  [0]=>
  string(7) "String0"
}
array(1) {
  [1]=>
  string(7) "String1"
}
array(1) {
  [2]=>
  string(7) "String2"
}
===ALONE===
array(1) {
  [0]=>
  string(7) "String0"
}
bool(true)
bool(true)
bool(true)
bool(true)
array(1) {
  [0]=>
  string(7) "String0"
}
array(1) {
  [1]=>
  string(7) "String1"
}
bool(true)
bool(true)
bool(true)
bool(true)
array(1) {
  [1]=>
  string(7) "String1"
}
array(1) {
  [2]=>
  string(7) "String2"
}
bool(true)
bool(true)
bool(true)
bool(true)
array(1) {
  [2]=>
  string(7) "String2"
}
===REBIND/SAME===
array(1) {
  [0]=>
  string(7) "String0"
}
bool(true)
bool(true)
string(7) "String0"
bool(true)
bool(true)
string(1) "0"
array(1) {
  [1]=>
  string(7) "String1"
}
bool(true)
bool(true)
string(7) "String1"
bool(true)
bool(true)
string(1) "1"
array(1) {
  [2]=>
  string(7) "String2"
}
bool(true)
bool(true)
string(7) "String2"
bool(true)
bool(true)
string(1) "2"
===REBIND/CONFLICT===
string(7) "String0"
string(7) "String1"
string(7) "String2"

http://cvs.php.net/co.php/php-src/ext/pdo/tests/pdo_017.phpt?r=1.1&p=1
Index: php-src/ext/pdo/tests/pdo_017.phpt
+++ php-src/ext/pdo/tests/pdo_017.phpt
--TEST--
PDO Common: transactions
--SKIPIF--
<?php # vim:ft=php
if (!extension_loaded('pdo')) print 'skip';
if (false == getenv('REDIR_TEST_DIR')) print 'skip no driver';
/* TODO:
$db = PDOTest::factory();
try {
  $db->beginTransaction();
} catch (PDOException $e) {
  # check sqlstate to see if transactions
  # are not implemented; if so, skip
}
*/
?>
--FILE--
<?php
require getenv('REDIR_TEST_DIR') . 'pdo_test.php';
$db = PDOTest::factory();

$db->exec('CREATE TABLE test(id INT NOT NULL PRIMARY KEY, val VARCHAR(10))');
$db->exec("INSERT INTO test VALUES(1, 'A')"); 
$db->exec("INSERT INTO test VALUES(2, 'B')"); 
$db->exec("INSERT INTO test VALUES(3, 'C')");
$delete = $db->prepare('DELETE FROM test');

function countRows($action) {
    global $db;
        $select = $db->prepare('SELECT COUNT(*) FROM test');
        $select->execute();
    $res = $select->fetchColumn();
    return "Counted $res rows after $action.\n";
}

echo countRows('insert');

$db->beginTransaction();
$delete->execute();
echo countRows('delete');
$db->rollBack();

echo countRows('rollback');

?>
--EXPECT--
Counted 3 rows after insert.
Counted 0 rows after delete.
Counted 3 rows after rollback.

http://cvs.php.net/co.php/php-src/ext/pdo/tests/pdo_018.phpt?r=1.1&p=1
Index: php-src/ext/pdo/tests/pdo_018.phpt
+++ php-src/ext/pdo/tests/pdo_018.phpt
--TEST--
PDO Common: serializing
--SKIPIF--
<?php # vim:ft=php
if (!extension_loaded('pdo')) print 'skip';
if (false == getenv('REDIR_TEST_DIR')) print 'skip no driver';
if (!interface_exists('Serializable')) print 'skip no Serializable interface';
?>
--FILE--
<?php
require getenv('REDIR_TEST_DIR') . 'pdo_test.php';
$db = PDOTest::factory();

class TestBase implements Serializable
{
        public    $BasePub = 'Public';
        protected $BasePro = 'Protected';
        private   $BasePri = 'Private';
        
        function serialize()
        {
                $serialized = array();
                foreach($this as $prop => $val) {
                        $serialized[$prop] = $val;
                }
                $serialized = serialize($serialized);
                echo __METHOD__ . "() = '$serialized'\n";
                return $serialized;
        }
        
        function unserialize($serialized)
        {
                echo __METHOD__ . "($serialized)\n";
                foreach(unserialize($serialized) as $prop => $val) {
                        $this->$prop = '#'.$val;
                }
                return true;
        }
}

class TestDerived extends TestBase
{
        public    $BasePub    = 'DerivedPublic';
        protected $BasePro    = 'DerivdeProtected';
        public    $DerivedPub = 'Public';
        protected $DerivedPro = 'Protected';
        private   $DerivedPri = 'Private';

        function serialize()
        {
                echo __METHOD__ . "()\n";
                return TestBase::serialize();
        }
        
        function unserialize($serialized)
        {
                echo __METHOD__ . "()\n";
                return TestBase::unserialize($serialized);
        }
}

class TestLeaf extends TestDerived
{
}

$db->exec('CREATE TABLE classtypes(id int NOT NULL PRIMARY KEY, name 
VARCHAR(20) UNIQUE)');
$db->exec('INSERT INTO classtypes VALUES(0, \'stdClass\')'); 
$db->exec('INSERT INTO classtypes VALUES(1, \'TestBase\')'); 
$db->exec('INSERT INTO classtypes VALUES(2, \'TestDerived\')'); 
$db->exec('CREATE TABLE test(id int NOT NULL PRIMARY KEY, classtype int, val 
VARCHAR(255))');

$db->setAttribute(PDO_ATTR_ERRMODE, PDO_ERRMODE_EXCEPTION);

var_dump($db->query('SELECT COUNT(*) FROM classtypes')->fetchColumn());
var_dump($db->query('SELECT id, name FROM classtypes ORDER by 
id')->fetchAll(PDO_FETCH_COLUMN|PDO_FETCH_UNIQUE));

$objs = array();
$objs[0] = new stdClass;
$objs[1] = new TestBase;
$objs[2] = new TestDerived;
$objs[3] = new TestLeaf;

$stmt = $db->prepare('SELECT id FROM classtypes WHERE name=:cname');
$stmt->bindParam(':cname', $cname);
$stmt->bindColumn('id', $ctype);

$ctypes = array();

foreach($objs as $obj)
{
        $cname = get_class($obj);
        $ctype = NULL; /* set default for non stored class name */
        $stmt->execute();
        $stmt->fetch(PDO_FETCH_BOUND);
        $ctypes[$cname] = $ctype;
}

echo "===TYPES===\n";
var_dump($ctypes);

echo "===INSERT===\n";
$stmt = $db->prepare('INSERT INTO test VALUES(:id, :classtype, :val)');
$stmt->bindParam(':id', $idx);
$stmt->bindParam(':classtype', $ctype);
$stmt->bindParam(':val', $val);

foreach($objs as $idx => $obj)
{
        $ctype = $ctypes[get_class($obj)];
        if (method_exists($obj, 'serialize'))
        {
                $val = $obj->serialize();
        }
        else
        {
                $val = NULL;
        }
        $stmt->execute();       
}

echo "===DATA===\n";
var_dump($db->query('SELECT test.val FROM test')->fetchAll(PDO_FETCH_COLUMN));

echo "===FAILURE===\n";
try
{
        $db->query('SELECT classtypes.name AS name, test.val AS val FROM test 
LEFT JOIN classtypes ON 
test.classtype=classtypes.id')->fetchAll(PDO_FETCH_CLASS|PDO_FETCH_CLASSTYPE|PDO_FETCH_SERIALIZE,
 'TestLeaf', array());
}
catch (PDOException $e)
{
        echo 'Exception:';
        echo $e->getMessage()."\n";
}

echo "===COUNT===\n";
var_dump($db->query('SELECT COUNT(*) FROM test LEFT JOIN classtypes ON 
test.classtype=classtypes.id WHERE (classtypes.id IS NULL OR classtypes.id > 
0)')->fetchColumn());

echo "===DATABASE===\n";
$stmt = $db->prepare('SELECT classtypes.name AS name, test.val AS val FROM test 
LEFT JOIN classtypes ON test.classtype=classtypes.id WHERE (classtypes.id IS 
NULL OR classtypes.id > 0)');

$stmt->execute();
var_dump($stmt->fetchAll(PDO_FETCH_ASSOC));

echo "===FETCHCLASS===\n";
$stmt->execute();
var_dump($stmt->fetchAll(PDO_FETCH_CLASS|PDO_FETCH_CLASSTYPE|PDO_FETCH_SERIALIZE,
 'TestLeaf'));


?>
--EXPECTF--
string(1) "3"
array(3) {
  [0]=>
  string(8) "stdClass"
  [1]=>
  string(8) "TestBase"
  [2]=>
  string(11) "TestDerived"
}
===TYPES===
array(4) {
  ["stdClass"]=>
  string(1) "0"
  ["TestBase"]=>
  string(1) "1"
  ["TestDerived"]=>
  string(1) "2"
  ["TestLeaf"]=>
  NULL
}
===INSERT===
TestBase::serialize() = 
'a:3:{s:7:"BasePub";s:6:"Public";s:7:"BasePro";s:9:"Protected";s:7:"BasePri";s:7:"Private";}'
TestDerived::serialize()
TestBase::serialize() = 
'a:4:{s:7:"BasePub";s:13:"DerivedPublic";s:7:"BasePro";s:16:"DerivdeProtected";s:10:"DerivedPub";s:6:"Public";s:10:"DerivedPro";s:9:"Protected";}'
TestDerived::serialize()
TestBase::serialize() = 
'a:4:{s:7:"BasePub";s:13:"DerivedPublic";s:7:"BasePro";s:16:"DerivdeProtected";s:10:"DerivedPub";s:6:"Public";s:10:"DerivedPro";s:9:"Protected";}'
===DATA===
array(4) {
  [0]=>
  NULL
  [1]=>
  string(91) 
"a:3:{s:7:"BasePub";s:6:"Public";s:7:"BasePro";s:9:"Protected";s:7:"BasePri";s:7:"Private";}"
  [2]=>
  string(144) 
"a:4:{s:7:"BasePub";s:13:"DerivedPublic";s:7:"BasePro";s:16:"DerivdeProtected";s:10:"DerivedPub";s:6:"Public";s:10:"DerivedPro";s:9:"Protected";}"
  [3]=>
  string(144) 
"a:4:{s:7:"BasePub";s:13:"DerivedPublic";s:7:"BasePro";s:16:"DerivdeProtected";s:10:"DerivedPub";s:6:"Public";s:10:"DerivedPro";s:9:"Protected";}"
}
===FAILURE===
Exception:SQLSTATE[HY000]: General error: cannot unserialize class
===COUNT===
string(1) "3"
===DATABASE===
array(3) {
  [0]=>
  array(2) {
    ["name"]=>
    string(8) "TestBase"
    ["val"]=>
    string(91) 
"a:3:{s:7:"BasePub";s:6:"Public";s:7:"BasePro";s:9:"Protected";s:7:"BasePri";s:7:"Private";}"
  }
  [1]=>
  array(2) {
    ["name"]=>
    string(11) "TestDerived"
    ["val"]=>
    string(144) 
"a:4:{s:7:"BasePub";s:13:"DerivedPublic";s:7:"BasePro";s:16:"DerivdeProtected";s:10:"DerivedPub";s:6:"Public";s:10:"DerivedPro";s:9:"Protected";}"
  }
  [2]=>
  array(2) {
    ["name"]=>
    NULL
    ["val"]=>
    string(144) 
"a:4:{s:7:"BasePub";s:13:"DerivedPublic";s:7:"BasePro";s:16:"DerivdeProtected";s:10:"DerivedPub";s:6:"Public";s:10:"DerivedPro";s:9:"Protected";}"
  }
}
===FETCHCLASS===
TestBase::unserialize(a:3:{s:7:"BasePub";s:6:"Public";s:7:"BasePro";s:9:"Protected";s:7:"BasePri";s:7:"Private";})
TestDerived::unserialize()
TestBase::unserialize(a:4:{s:7:"BasePub";s:13:"DerivedPublic";s:7:"BasePro";s:16:"DerivdeProtected";s:10:"DerivedPub";s:6:"Public";s:10:"DerivedPro";s:9:"Protected";})
TestDerived::unserialize()
TestBase::unserialize(a:4:{s:7:"BasePub";s:13:"DerivedPublic";s:7:"BasePro";s:16:"DerivdeProtected";s:10:"DerivedPub";s:6:"Public";s:10:"DerivedPro";s:9:"Protected";})
array(3) {
  [0]=>
  object(TestBase)#%d (3) {
    ["BasePub"]=>
    string(7) "#Public"
    ["BasePro:protected"]=>
    string(10) "#Protected"
    ["BasePri:private"]=>
    string(8) "#Private"
  }
  [1]=>
  object(TestDerived)#%d (6) {
    ["BasePub"]=>
    string(14) "#DerivedPublic"
    ["BasePro:protected"]=>
    string(17) "#DerivdeProtected"
    ["DerivedPub"]=>
    string(7) "#Public"
    ["DerivedPro:protected"]=>
    string(10) "#Protected"
    ["DerivedPri:private"]=>
    string(7) "Private"
    ["BasePri:private"]=>
    string(7) "Private"
  }
  [2]=>
  object(TestLeaf)#%d (6) {
    ["BasePub"]=>
    string(14) "#DerivedPublic"
    ["BasePro:protected"]=>
    string(17) "#DerivdeProtected"
    ["DerivedPub"]=>
    string(7) "#Public"
    ["DerivedPro:protected"]=>
    string(10) "#Protected"
    ["DerivedPri:private"]=>
    string(7) "Private"
    ["BasePri:private"]=>
    string(7) "Private"
  }
}

http://cvs.php.net/co.php/php-src/ext/pdo/tests/pdo_019.phpt?r=1.1&p=1
Index: php-src/ext/pdo/tests/pdo_019.phpt
+++ php-src/ext/pdo/tests/pdo_019.phpt
--TEST--
PDO Common: fetch() and while()
--SKIPIF--
<?php # vim:ft=php
if (!extension_loaded('pdo')) print 'skip';
if (false == getenv('REDIR_TEST_DIR')) print 'skip no driver';
?>
--FILE--
<?php
require getenv('REDIR_TEST_DIR') . 'pdo_test.php';
$db = PDOTest::factory();

$db->exec('CREATE TABLE test(idx int NOT NULL PRIMARY KEY, txt VARCHAR(20))');
$db->exec('INSERT INTO test VALUES(0, \'String0\')'); 
$db->exec('INSERT INTO test VALUES(1, \'String1\')'); 
$db->exec('INSERT INTO test VALUES(2, \'String2\')'); 
$db->exec('INSERT INTO test VALUES(3, \'String3\')'); 


var_dump($db->query('SELECT COUNT(*) FROM test')->fetchColumn());

$stmt = $db->prepare('SELECT idx, txt FROM test ORDER by idx');

$stmt->execute();
$cont = $stmt->fetchAll(PDO_FETCH_COLUMN|PDO_FETCH_UNIQUE);
var_dump($cont);

echo "===WHILE===\n";

$stmt->bindColumn('idx', $idx);
$stmt->bindColumn('txt', $txt);
$stmt->execute();

while($stmt->fetch(PDO_FETCH_BOUND)) {
        var_dump(array($idx=>$txt));
}

?>
--EXPECT--
string(1) "4"
array(4) {
  [0]=>
  string(7) "String0"
  [1]=>
  string(7) "String1"
  [2]=>
  string(7) "String2"
  [3]=>
  string(7) "String3"
}
===WHILE===
array(1) {
  [0]=>
  string(7) "String0"
}
array(1) {
  [1]=>
  string(7) "String1"
}
array(1) {
  [2]=>
  string(7) "String2"
}
array(1) {
  [3]=>
  string(7) "String3"
}

http://cvs.php.net/co.php/php-src/ext/pdo/tests/pdo_020.phpt?r=1.1&p=1
Index: php-src/ext/pdo/tests/pdo_020.phpt
+++ php-src/ext/pdo/tests/pdo_020.phpt
--TEST--
PDO Common: PDOStatement::columnCount
--SKIPIF--
<?php # vim:ft=php
if (!extension_loaded('pdo')) print 'skip';
if (false == getenv('REDIR_TEST_DIR')) print 'skip no driver';
?>
--FILE--
<?php
require getenv('REDIR_TEST_DIR') . 'pdo_test.php';
$db = PDOTest::factory();

$db->exec('CREATE TABLE test(id INT NOT NULL PRIMARY KEY, val VARCHAR(10), val2 
VARCHAR(16))');
$db->exec("INSERT INTO test VALUES(1, 'A', 'A')"); 
$db->exec("INSERT INTO test VALUES(2, 'B', 'B')"); 
$db->exec("INSERT INTO test VALUES(3, 'C', 'C')");

foreach (array('SELECT id, val FROM test', 'SELECT id, val, val2 FROM test', 
'SELECT COUNT(*) FROM test') as $sql) {

        $stmt = $db->query($sql);
        $res = $stmt->columnCount();
    echo "Counted $res columns after $sql.\n";
        $stmt = null;
}

?>
--EXPECT--
Counted 2 columns after SELECT id, val FROM test.
Counted 3 columns after SELECT id, val, val2 FROM test.
Counted 1 columns after SELECT COUNT(*) FROM test.

http://cvs.php.net/co.php/php-src/ext/pdo/tests/pdo_021.phpt?r=1.1&p=1
Index: php-src/ext/pdo/tests/pdo_021.phpt
+++ php-src/ext/pdo/tests/pdo_021.phpt
--TEST--
PDO Common: PDOStatement::execute with parameters
--SKIPIF--
<?php # vim:ft=php
if (!extension_loaded('pdo')) print 'skip';
if (false == getenv('REDIR_TEST_DIR')) print 'skip no driver';
?>
--FILE--
<?php
require getenv('REDIR_TEST_DIR') . 'pdo_test.php';
$db = PDOTest::factory();

$db->exec('CREATE TABLE test(id INT NOT NULL PRIMARY KEY, val VARCHAR(10), val2 
VARCHAR(16))');

$select = $db->prepare('SELECT COUNT(*) FROM test');

$data = array(
    array('10', 'Abc', 'zxy'),
    array('20', 'Def', 'wvu'),
    array('30', 'Ghi', 'tsr'),
    array('40', 'Jkl', 'qpo'),
    array('50', 'Mno', 'nml'),
    array('60', 'Pqr', 'kji'),
);


// Insert using question mark placeholders
$stmt = $db->prepare("INSERT INTO test VALUES(?, ?, ?)");
foreach ($data as $row) {
    $stmt->execute($row);
}

$select->execute();
$num = $select->fetchColumn();
echo 'There are ' . $num . " rows in the table.\n";

// Insert using named parameters
$stmt2 = $db->prepare("INSERT INTO test VALUES(:first, :second, :third)");
foreach ($data as $row) {
    $stmt2->execute(array(':first'=>($row[0] + 5), ':second'=>$row[1], 
        ':third'=>$row[2]));
}

$select->execute();
$num = $select->fetchColumn();
echo 'There are ' . $num . " rows in the table.\n";


?>
--EXPECT--
There are 6 rows in the table.
There are 12 rows in the table.

http://cvs.php.net/co.php/php-src/ext/pdo/tests/pdo_022.phpt?r=1.1&p=1
Index: php-src/ext/pdo/tests/pdo_022.phpt
+++ php-src/ext/pdo/tests/pdo_022.phpt
--TEST--
PDO Common: PDOStatement::getColumnMeta
--SKIPIF--
<?php # vim:ft=php
die('skip this feature is not yet finalized, no test makes sense');
if (!extension_loaded('pdo')) print 'skip';
if (false == getenv('REDIR_TEST_DIR')) print 'skip no driver';
/*
 * Note well: meta information is a nightmare to handle portably.
 * it's not really PDOs job.
 * We've not yet defined exactly what makes sense for getColumnMeta,
 * so no tests make any sense to anyone.  When they do, we can enable
 * this test file.
 * TODO: filter out driver dependent components from this common core
 * test file.
 */
?>
--FILE--
<?php
require getenv('REDIR_TEST_DIR') . 'pdo_test.php';
$db = PDOTest::factory();

$db->exec('CREATE TABLE test(id INT NOT NULL PRIMARY KEY, val VARCHAR(10), val2 
VARCHAR(16))');
$db->exec('insert2', "INSERT INTO test VALUES(:first, :second, :third)"); 

$data = array(
    array('10', 'Abc', 'zxy'),
    array('20', 'Def', 'wvu'),
    array('30', 'Ghi', 'tsr'),
    array('40', 'Jkl', 'qpo'),
    array('50', 'Mno', 'nml'),
    array('60', 'Pqr', 'kji'),
);


// Insert using question mark placeholders
$stmt = $db->prepare("INSERT INTO test VALUES(?, ?, ?)");
foreach ($data as $row) {
    $stmt->execute($row);
}

// Retrieve column metadata for a result set returned by explicit SELECT
$select = $db->query('SELECT id, val, val2 FROM test');
$meta = $select->getColumnMeta(0);
var_dump($meta);
$meta = $select->getColumnMeta(1);
var_dump($meta);
$meta = $select->getColumnMeta(2);
var_dump($meta);

// Retrieve column metadata for a result set returned by a function
$select = $db->query('SELECT COUNT(*) FROM test');
$meta = $select->getColumnMeta(0);
var_dump($meta);

?>
--EXPECT--
The unexpected!

http://cvs.php.net/co.php/php-src/ext/pdo/tests/pdo_023.phpt?r=1.1&p=1
Index: php-src/ext/pdo/tests/pdo_023.phpt
+++ php-src/ext/pdo/tests/pdo_023.phpt
--TEST--
PDO Common: extending PDO
--SKIPIF--
<?php # vim:ft=php
if (!extension_loaded('pdo')) print 'skip';
if (false == getenv('REDIR_TEST_DIR')) print 'skip no driver';
?>
--FILE--
<?php
require getenv('REDIR_TEST_DIR') . 'pdo_test.php';

class PDOStatementX extends PDOStatement
{
    public $test1 = 1;
    
    protected function __construct()
    {
        $this->test2 = 2;
        $this->test2 = 22;
        echo __METHOD__ . "()\n";
    }
    
    function __destruct()
    {
        echo __METHOD__ . "()\n";
    }
}

class PDODatabaseX extends PDO
{
    public $test1 = 1;
    
    function __destruct()
    {
        echo __METHOD__ . "()\n";
    }
    
    function test()
    {
        $this->test2 = 2;
        var_dump($this->test1);
        var_dump($this->test2);
        $this->test2 = 22;
    }
    
    function query($sql)
    {
        echo __METHOD__ . "()\n";
        $stmt = parent::prepare($sql, 
array(PDO_ATTR_STATEMENT_CLASS=>array('PDOStatementx')));
        $stmt->execute();
        return $stmt;
    }
}

$db = PDOTest::factory('PDODatabaseX');
$db->test();
var_dump($db);

$db->query('CREATE TABLE test(id INT NOT NULL PRIMARY KEY, val VARCHAR(10))');
$db->query('INSERT INTO test VALUES(0, \'A\')');
$db->query('INSERT INTO test VALUES(1, \'B\')');


$stmt = $db->query('SELECT val, id FROM test');
var_dump($stmt);
var_dump($stmt->fetchAll(PDO_FETCH_COLUMN|PDO_FETCH_UNIQUE));

$stmt = NULL;
$db = NULL;


?>
--EXPECTF--
int(1)
int(2)
object(PDODatabaseX)#%d (2) {
  ["test1"]=>
  int(1)
  ["test2"]=>
  int(22)
}
PDODatabaseX::query()
PDOStatementX::__construct()
PDOStatementX::__destruct()
PDODatabaseX::query()
PDOStatementX::__construct()
PDOStatementX::__destruct()
PDODatabaseX::query()
PDOStatementX::__construct()
PDOStatementX::__destruct()
PDODatabaseX::query()
PDOStatementX::__construct()
object(PDOStatementX)#%d (3) {
  ["test1"]=>
  int(1)
  ["queryString"]=>
  string(24) "SELECT val, id FROM test"
  ["test2"]=>
  int(22)
}
array(2) {
  ["A"]=>
  string(1) "0"
  ["B"]=>
  string(1) "1"
}
PDOStatementX::__destruct()
PDODatabaseX::__destruct()

http://cvs.php.net/co.php/php-src/ext/pdo/tests/pdo_024.phpt?r=1.1&p=1
Index: php-src/ext/pdo/tests/pdo_024.phpt
+++ php-src/ext/pdo/tests/pdo_024.phpt
--TEST--
PDO Common: assert that bindParam does not modify parameter
--SKIPIF--
<?php # vim:ft=php
if (!extension_loaded('pdo')) print 'skip';
if (false == getenv('REDIR_TEST_DIR')) print 'skip no driver';
?>
--FILE--
<?php
require getenv('REDIR_TEST_DIR') . 'pdo_test.php';
$db = PDOTest::factory();

$db->exec('create table test (id int, name varchar(10))');

$stmt = $db->prepare('insert into test (id, name) values(0, :name)');
$name = NULL;
$before_bind = $name;
$stmt->bindParam(':name', $name);
if ($name !== $before_bind) {
        echo "bind: fail\n";
} else {
        echo "bind: success\n";
}
var_dump($stmt->execute());
var_dump($db->query('select name from test where id=0')->fetchColumn());

?>
--EXPECT--
bind: success
bool(true)
NULL

http://cvs.php.net/co.php/php-src/ext/pdo/tests/pdo_025.phpt?r=1.1&p=1
Index: php-src/ext/pdo/tests/pdo_025.phpt
+++ php-src/ext/pdo/tests/pdo_025.phpt
--TEST--
PDO Common: PDO_FETCH_INTO
--SKIPIF--
<?php # vim:ft=php
if (!extension_loaded('pdo')) print 'skip';
if (false == getenv('REDIR_TEST_DIR')) print 'skip no driver';
?>
--FILE--
<?php
require getenv('REDIR_TEST_DIR') . 'pdo_test.php';
$db = PDOTest::factory();

$db->exec('CREATE TABLE test(id INT NOT NULL PRIMARY KEY, val VARCHAR(10), val2 
VARCHAR(16))');

$data = array(
    array('10', 'Abc', 'zxy'),
    array('20', 'Def', 'wvu'),
    array('30', 'Ghi', 'tsr'),
    array('40', 'Jkl', 'qpo'),
    array('50', 'Mno', 'nml'),
    array('60', 'Pqr', 'kji'),
);


// Insert using question mark placeholders
$stmt = $db->prepare("INSERT INTO test VALUES(?, ?, ?)");
foreach ($data as $row) {
    $stmt->execute($row);
}

class Test {
        public $id, $val, $val2;
}

$stmt = $db->prepare('SELECT * FROM test');
$stmt->setFetchMode(PDO_FETCH_INTO, new Test);
$stmt->execute();

foreach($stmt as $obj) {
        var_dump($obj);
}

echo "===FAIL===\n";

class Fail {
        protected $id;
        public $val, $val2;
}

$stmt->setFetchMode(PDO_FETCH_INTO, new Fail);
$stmt->execute();

foreach($stmt as $obj) {
        var_dump($obj);
}

?>
--EXPECTF--
object(Test)#%d (3) {
  ["id"]=>
  string(2) "10"
  ["val"]=>
  string(3) "Abc"
  ["val2"]=>
  string(3) "zxy"
}
object(Test)#%d (3) {
  ["id"]=>
  string(2) "20"
  ["val"]=>
  string(3) "Def"
  ["val2"]=>
  string(3) "wvu"
}
object(Test)#%d (3) {
  ["id"]=>
  string(2) "30"
  ["val"]=>
  string(3) "Ghi"
  ["val2"]=>
  string(3) "tsr"
}
object(Test)#%d (3) {
  ["id"]=>
  string(2) "40"
  ["val"]=>
  string(3) "Jkl"
  ["val2"]=>
  string(3) "qpo"
}
object(Test)#%d (3) {
  ["id"]=>
  string(2) "50"
  ["val"]=>
  string(3) "Mno"
  ["val2"]=>
  string(3) "nml"
}
object(Test)#%d (3) {
  ["id"]=>
  string(2) "60"
  ["val"]=>
  string(3) "Pqr"
  ["val2"]=>
  string(3) "kji"
}
===FAIL===

Fatal error: Cannot access protected property Fail::$id in %spdo_025.php on 
line %d

http://cvs.php.net/co.php/php-src/ext/pdo/tests/pdo_026.phpt?r=1.1&p=1
Index: php-src/ext/pdo/tests/pdo_026.phpt
+++ php-src/ext/pdo/tests/pdo_026.phpt
--TEST--
PDO Common: extending PDO (2)
--SKIPIF--
<?php # vim:ft=php
if (!extension_loaded('pdo')) print 'skip';
if (false == getenv('REDIR_TEST_DIR')) print 'skip no driver';
?>
--FILE--
<?php
require getenv('REDIR_TEST_DIR') . 'pdo_test.php';

$data = array(
    array('10', 'Abc', 'zxy'),
    array('20', 'Def', 'wvu'),
    array('30', 'Ghi', 'tsr'),
);

class PDOStatementX extends PDOStatement
{
    public $dbh;
    
    protected function __construct($dbh)
    {
        $this->dbh = $dbh;
        echo __METHOD__ . "()\n";
    }
    
    function __destruct()
    {
        echo __METHOD__ . "()\n";
    }
}

class PDODatabase extends PDO
{
    function __destruct()
    {
        echo __METHOD__ . "()\n";
    }
    
    function query($sql)
    {
        echo __METHOD__ . "()\n";
        $stmt = $this->prepare($sql, 
array(PDO_ATTR_STATEMENT_CLASS=>array('PDOStatementx', array($this))));
        $stmt->setFetchMode(PDO_FETCH_ASSOC);
        $stmt->execute();
        return $stmt;
    }
}

$db = PDOTest::factory('PDODatabase');
var_dump(get_class($db));

$db->exec('CREATE TABLE test(id INT NOT NULL PRIMARY KEY, val VARCHAR(10), val2 
VARCHAR(16))');

$stmt = $db->prepare("INSERT INTO test VALUES(?, ?, ?)");
var_dump(get_class($stmt));
foreach ($data as $row) {
    $stmt->execute($row);
}

$stmt = $db->query('SELECT * FROM test');
var_dump(get_class($stmt));
var_dump(get_class($stmt->dbh));

foreach($stmt as $obj) {
        var_dump($obj);
}

echo "===DONE===\n";
?>
--EXPECT--
string(11) "PDODatabase"
string(12) "PDOStatement"
PDODatabase::query()
PDOStatementX::__construct()
string(13) "PDOStatementX"
string(11) "PDODatabase"
array(3) {
  ["id"]=>
  string(2) "10"
  ["val"]=>
  string(3) "Abc"
  ["val2"]=>
  string(3) "zxy"
}
array(3) {
  ["id"]=>
  string(2) "20"
  ["val"]=>
  string(3) "Def"
  ["val2"]=>
  string(3) "wvu"
}
array(3) {
  ["id"]=>
  string(2) "30"
  ["val"]=>
  string(3) "Ghi"
  ["val2"]=>
  string(3) "tsr"
}
===DONE===
PDODatabase::__destruct()
PDOStatementX::__destruct()

-- 
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to