cvs: php-src(PHP_5_1) /ext/pdo pdo_stmt.c /ext/pdo/tests pdo_029.phpt

From: Date: Wed, 21 Sep 2005 22:58:40 +0000
Subject: cvs: php-src(PHP_5_1) /ext/pdo pdo_stmt.c /ext/pdo/tests pdo_029.phpt
Groups: php.cvs 
Request: Send a blank email to php-cvs+get-34075@lists.php.net to get a copy of this message
helly Wed Sep 21 18:58:40 2005 EDT Added files: (Branch: PHP_5_1) /php-src/ext/pdo/tests pdo_029.phpt Modified files: /php-src/ext/pdo pdo_stmt.c Log: - MFH Fixed Bug #34590 User defined PDOStatement class can't implement methods - Reimplement Traversable interface # If there is a problem with this i need a backtrace. As far as i can # tell by gdb/valgrind/logic there is no error here. But missuse leads to # the same error report casing the exclusion of interface Traversable. http://cvs.php.net/diff.php/php-src/ext/pdo/pdo_stmt.c?r1=1.118.2.6&r2=1.118.2.7&ty=u Index: php-src/ext/pdo/pdo_stmt.c diff -u php-src/ext/pdo/pdo_stmt.c:1.118.2.6 php-src/ext/pdo/pdo_stmt.c:1.118.2.7 --- php-src/ext/pdo/pdo_stmt.c:1.118.2.6 Sun Sep 11 16:32:28 2005 +++ php-src/ext/pdo/pdo_stmt.c Wed Sep 21 18:58:39 2005 @@ -18,7 +18,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: pdo_stmt.c,v 1.118.2.6 2005/09/11 20:32:28 wez Exp $ */ +/* $Id: pdo_stmt.c,v 1.118.2.7 2005/09/21 22:58:39 helly Exp $ */ /* The PDO Statement Handle Class */ @@ -1951,7 +1951,7 @@ lc_method_name = emalloc(method_len + 1); zend_str_tolower_copy(lc_method_name, method_name, method_len); - if (zend_hash_find(&pdo_dbstmt_ce->function_table, lc_method_name, + if (zend_hash_find(&Z_OBJCE_P(object)->function_table, lc_method_name, method_len+1, (void**)&fbc) == FAILURE) { pdo_stmt_t *stmt = (pdo_stmt_t*)zend_object_store_get_object(object TSRMLS_CC); /* not a pre-defined method, nor a user-defined method; check @@ -1992,9 +1992,7 @@ pdo_dbstmt_ce = zend_register_internal_class(&ce TSRMLS_CC); pdo_dbstmt_ce->get_iterator = pdo_stmt_iter_get; pdo_dbstmt_ce->create_object = pdo_dbstmt_new; -#if no_crazy_hidden_deps_on_other_interfaces zend_class_implements(pdo_dbstmt_ce TSRMLS_CC, 1, zend_ce_traversable); -#endif zend_declare_property_null(pdo_dbstmt_ce, "queryString", sizeof("queryString")-1, ZEND_ACC_PUBLIC TSRMLS_CC); memcpy(&pdo_dbstmt_object_handlers, &std_object_handlers, sizeof(zend_object_handlers)); http://cvs.php.net/co.php/php-src/ext/pdo/tests/pdo_029.phpt?r=1.1&p=1 Index: php-src/ext/pdo/tests/pdo_029.phpt +++ php-src/ext/pdo/tests/pdo_029.phpt --TEST-- PDO Common: extending PDO (3) --SKIPIF-- <?php # vim:ft=php if (!extension_loaded('pdo')) die('skip'); $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 getenv('REDIR_TEST_DIR') . 'pdo_test.inc'; $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"; } function execute() { echo __METHOD__ . "()\n"; parent::execute(); } } 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); } unset($stmt); echo "===QUERY===\n"; $stmt = $db->query('SELECT * FROM test'); var_dump(get_class($stmt)); var_dump(get_class($stmt->dbh)); echo "===FOREACH===\n"; foreach($stmt as $obj) { var_dump($obj); } echo "===DONE===\n"; exit(0); ?> --EXPECT-- string(11) "PDODatabase" string(12) "PDOStatement" ===QUERY=== PDODatabase::query() PDOStatementX::__construct() PDOStatementX::execute() string(13) "PDOStatementX" string(11) "PDODatabase" ===FOREACH=== 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()

« previous php.cvs (#34075) next »