cvs: pecl /pdo pdo_dbh.c pdo_stmt.c php_pdo_driver.h /pdo/tests bug_36428.phpt

From: Date: Fri, 24 Feb 2006 15:56:03 +0000
Subject: cvs: pecl /pdo pdo_dbh.c pdo_stmt.c php_pdo_driver.h /pdo/tests bug_36428.phpt
Groups: php.pecl.cvs 
Request: Send a blank email to pecl-cvs+get-5255@lists.php.net to get a copy of this message
helly Fri Feb 24 15:56:03 2006 UTC Added files: /pecl/pdo/tests bug_36428.phpt Modified files: /pecl/pdo pdo_dbh.c pdo_stmt.c php_pdo_driver.h Log: - Add FETCH_PROPSLATE: fetch props after calling ctor # Fixes bug #36428 http://cvs.php.net/viewcvs.cgi/pecl/pdo/pdo_dbh.c?r1=1.113&r2=1.114&diff_format=u Index: pecl/pdo/pdo_dbh.c diff -u pecl/pdo/pdo_dbh.c:1.113 pecl/pdo/pdo_dbh.c:1.114 --- pecl/pdo/pdo_dbh.c:1.113 Tue Feb 21 20:12:42 2006 +++ pecl/pdo/pdo_dbh.c Fri Feb 24 15:56:03 2006 @@ -18,7 +18,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: pdo_dbh.c,v 1.113 2006/02/21 20:12:42 dmitry Exp $ */ +/* $Id: pdo_dbh.c,v 1.114 2006/02/24 15:56:03 helly Exp $ */ /* The PDO Database Handle Class */ @@ -1238,6 +1238,7 @@ #if PHP_MAJOR_VERSION > 5 || PHP_MINOR_VERSION >= 1 REGISTER_PDO_CLASS_CONST_LONG("FETCH_SERIALIZE",(long)PDO_FETCH_SERIALIZE); #endif + REGISTER_PDO_CLASS_CONST_LONG("FETCH_PROPSLATE",(long)PDO_FETCH_PROPSLATE); REGISTER_PDO_CLASS_CONST_LONG("FETCH_NAMED",(long)PDO_FETCH_NAMED); REGISTER_PDO_CLASS_CONST_LONG("ATTR_AUTOCOMMIT", (long)PDO_ATTR_AUTOCOMMIT); http://cvs.php.net/viewcvs.cgi/pecl/pdo/pdo_stmt.c?r1=1.146&r2=1.147&diff_format=u Index: pecl/pdo/pdo_stmt.c diff -u pecl/pdo/pdo_stmt.c:1.146 pecl/pdo/pdo_stmt.c:1.147 --- pecl/pdo/pdo_stmt.c:1.146 Tue Feb 21 20:12:42 2006 +++ pecl/pdo/pdo_stmt.c Fri Feb 24 15:56:03 2006 @@ -18,7 +18,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: pdo_stmt.c,v 1.146 2006/02/21 20:12:42 dmitry Exp $ */ +/* $Id: pdo_stmt.c,v 1.147 2006/02/24 15:56:03 helly Exp $ */ /* The PDO Statement Handle Class */ @@ -838,6 +838,18 @@ return 0; } } + if (ce->constructor && (flags & PDO_FETCH_PROPSLATE)) { + stmt->fetch.cls.fci.object_pp = &return_value; + stmt->fetch.cls.fcc.object_pp = &return_value; + if (zend_call_function(&stmt->fetch.cls.fci, &stmt->fetch.cls.fcc TSRMLS_CC) == FAILURE) { + pdo_raise_impl_error(stmt->dbh, stmt, "HY000", "could not call class constructor" TSRMLS_CC); + return 0; + } else { + if (stmt->fetch.cls.retval_ptr) { + zval_ptr_dtor(&stmt->fetch.cls.retval_ptr); + } + } + } } break; @@ -1000,7 +1012,7 @@ switch (how) { case PDO_FETCH_CLASS: - if (ce->constructor) { + if (ce->constructor && !(flags & PDO_FETCH_PROPSLATE)) { stmt->fetch.cls.fci.object_pp = &return_value; stmt->fetch.cls.fcc.object_pp = &return_value; if (zend_call_function(&stmt->fetch.cls.fci, &stmt->fetch.cls.fcc TSRMLS_CC) == FAILURE) { http://cvs.php.net/viewcvs.cgi/pecl/pdo/php_pdo_driver.h?r1=1.74&r2=1.75&diff_format=u Index: pecl/pdo/php_pdo_driver.h diff -u pecl/pdo/php_pdo_driver.h:1.74 pecl/pdo/php_pdo_driver.h:1.75 --- pecl/pdo/php_pdo_driver.h:1.74 Wed Feb 1 09:10:23 2006 +++ pecl/pdo/php_pdo_driver.h Fri Feb 24 15:56:03 2006 @@ -16,7 +16,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: php_pdo_driver.h,v 1.74 2006/02/01 09:10:23 tony2001 Exp $ */ +/* $Id: php_pdo_driver.h,v 1.75 2006/02/24 15:56:03 helly Exp $ */ #ifndef PHP_PDO_DRIVER_H #define PHP_PDO_DRIVER_H @@ -98,6 +98,7 @@ #define PDO_FETCH_UNIQUE 0x00030000 /* fetch into groups assuming first col is unique */ #define PDO_FETCH_CLASSTYPE 0x00040000 /* fetch class gets its class name from 1st column */ #define PDO_FETCH_SERIALIZE 0x00080000 /* fetch class instances by calling serialize */ +#define PDO_FETCH_PROPSLATE 0x00100000 /* fetch props after calling ctor */ /* fetch orientation for scrollable cursors */ enum pdo_fetch_orientation { http://cvs.php.net/viewcvs.cgi/pecl/pdo/tests/bug_36428.phpt?view=markup&rev=1.1 Index: pecl/pdo/tests/bug_36428.phpt +++ pecl/pdo/tests/bug_36428.phpt --TEST-- PDO Common: PHP Bug #36428: Incorrect error message for PDO::fetchAll --SKIPIF-- <?php # vim:ft=php if (!extension_loaded('pdo')) die('skip'); if (!extension_loaded('simplexml')) die('skip SimpleXML not loaded'); $dir = getenv('REDIR_TEST_DIR'); if (false == $dir) die('skip no driver'); require_once $dir . 'pdo_test.inc'; PDOTest::skip(); ?> --FILE-- <?php if (getenv('REDIR_TEST_DIR') === false) putenv('REDIR_TEST_DIR='.dirname(__FILE__) . '/../../pdo/tests/'); require_once getenv('REDIR_TEST_DIR') . 'pdo_test.inc'; $db = PDOTest::factory(); $db->exec("CREATE TABLE test (a VARCHAR(10))"); $db->exec("INSERT INTO test (a) VALUES ('xyz')"); $res = $db->query("SELECT a FROM test"); var_dump($res->fetchAll(PDO::FETCH_CLASS|PDO::FETCH_PROPSLATE, 'SimpleXMLElement', array('<root/>'))); ?> ===DONE=== --EXPECTF-- array(1) { [0]=> object(SimpleXMLElement)#%d (1) { ["a"]=> string(3) "xyz" } } ===DONE===

« previous php.pecl.cvs (#5255) next »