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