felipe          Sun, 19 Jul 2009 18:55:31 +0000

URL: http://svn.php.net/viewvc?view=revision&revision=284384
     http://bugs.php.net/48773

Changed paths:
        A   php/php-src/branches/PHP_5_2/ext/pdo_sqlite/tests/bug48773.phpt
        A   php/php-src/branches/PHP_5_3/ext/pdo_sqlite/tests/bug48773.phpt
        U   php/php-src/trunk/ext/pdo/pdo_dbh.c
        A   php/php-src/trunk/ext/pdo_sqlite/tests/bug48773.phpt

Log:
- Fixed bug #48773 (Incorrect error when setting PDO::ATTR_STATEMENT_CLASS with 
ctor_args)
  [HEAD only]


Added: php/php-src/branches/PHP_5_2/ext/pdo_sqlite/tests/bug48773.phpt
===================================================================
--- php/php-src/branches/PHP_5_2/ext/pdo_sqlite/tests/bug48773.phpt             
                (rev 0)
+++ php/php-src/branches/PHP_5_2/ext/pdo_sqlite/tests/bug48773.phpt     
2009-07-19 18:55:31 UTC (rev 284384)
@@ -0,0 +1,34 @@
+--TEST--
+Bug #48773 (Incorrect error when setting PDO::ATTR_STATEMENT_CLASS with 
ctor_args)
+--SKIPIF--
+<?php
+if (!extension_loaded('pdo_sqlite')) print 'skip not loaded';
+?>
+--FILE--
+<?php
+
+class bar extends PDOStatement {
+       private function __construct() {
+       }
+}
+
+class foo extends PDO {
+       public $statementClass = 'bar';
+       function __construct($dsn, $username, $password, $driver_options = 
array()) {
+               $driver_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
+               parent::__construct($dsn, $username, $password, 
$driver_options);
+
+               $this->setAttribute(PDO::ATTR_STATEMENT_CLASS, 
array($this->statementClass, array($this)));
+       }
+}
+
+$db = new foo('sqlite::memory:', '', '');
+$stmt = $db->query('SELECT 1');
+var_dump($stmt);
+
+?>
+--EXPECTF--
+object(bar)#%d (1) {
+  [%u|b%"queryString"]=>
+  %unicode|string%(8) "SELECT 1"
+}


Property changes on: 
php/php-src/branches/PHP_5_2/ext/pdo_sqlite/tests/bug48773.phpt
___________________________________________________________________
Added: svn:keywords
   + Id Rev Revision
Added: svn:eol-style
   + native

Added: php/php-src/branches/PHP_5_3/ext/pdo_sqlite/tests/bug48773.phpt
===================================================================
--- php/php-src/branches/PHP_5_3/ext/pdo_sqlite/tests/bug48773.phpt             
                (rev 0)
+++ php/php-src/branches/PHP_5_3/ext/pdo_sqlite/tests/bug48773.phpt     
2009-07-19 18:55:31 UTC (rev 284384)
@@ -0,0 +1,34 @@
+--TEST--
+Bug #48773 (Incorrect error when setting PDO::ATTR_STATEMENT_CLASS with 
ctor_args)
+--SKIPIF--
+<?php
+if (!extension_loaded('pdo_sqlite')) print 'skip not loaded';
+?>
+--FILE--
+<?php
+
+class bar extends PDOStatement {
+       private function __construct() {
+       }
+}
+
+class foo extends PDO {
+       public $statementClass = 'bar';
+       function __construct($dsn, $username, $password, $driver_options = 
array()) {
+               $driver_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
+               parent::__construct($dsn, $username, $password, 
$driver_options);
+
+               $this->setAttribute(PDO::ATTR_STATEMENT_CLASS, 
array($this->statementClass, array($this)));
+       }
+}
+
+$db = new foo('sqlite::memory:', '', '');
+$stmt = $db->query('SELECT 1');
+var_dump($stmt);
+
+?>
+--EXPECTF--
+object(bar)#%d (1) {
+  [%u|b%"queryString"]=>
+  %unicode|string%(8) "SELECT 1"
+}


Property changes on: 
php/php-src/branches/PHP_5_3/ext/pdo_sqlite/tests/bug48773.phpt
___________________________________________________________________
Added: svn:keywords
   + Id Rev Revision
Added: svn:eol-style
   + native

Modified: php/php-src/trunk/ext/pdo/pdo_dbh.c
===================================================================
--- php/php-src/trunk/ext/pdo/pdo_dbh.c 2009-07-19 17:31:36 UTC (rev 284383)
+++ php/php-src/trunk/ext/pdo/pdo_dbh.c 2009-07-19 18:55:31 UTC (rev 284384)
@@ -775,8 +775,8 @@
                        }
                        if (Z_TYPE_P(value) != IS_ARRAY
                                || zend_hash_index_find(Z_ARRVAL_P(value), 0, 
(void**)&item) == FAILURE
-                               || Z_TYPE_PP(item) != IS_STRING
-                               || zend_lookup_class(Z_STRVAL_PP(item), 
Z_STRLEN_PP(item), &pce TSRMLS_CC) == FAILURE
+                               || !PDO_ZVAL_PP_IS_TEXT(item)
+                               || zend_u_lookup_class(Z_TYPE_PP(item), 
Z_UNIVAL_PP(item), Z_UNILEN_PP(item), &pce TSRMLS_CC) == FAILURE
                        ) {
                                pdo_raise_impl_error(dbh, NULL, "HY000",
                                        "PDO::ATTR_STATEMENT_CLASS requires 
format array(classname, array(ctor_args)); "

Added: php/php-src/trunk/ext/pdo_sqlite/tests/bug48773.phpt
===================================================================
--- php/php-src/trunk/ext/pdo_sqlite/tests/bug48773.phpt                        
        (rev 0)
+++ php/php-src/trunk/ext/pdo_sqlite/tests/bug48773.phpt        2009-07-19 
18:55:31 UTC (rev 284384)
@@ -0,0 +1,34 @@
+--TEST--
+Bug #48773 (Incorrect error when setting PDO::ATTR_STATEMENT_CLASS with 
ctor_args)
+--SKIPIF--
+<?php
+if (!extension_loaded('pdo_sqlite')) print 'skip not loaded';
+?>
+--FILE--
+<?php
+
+class bar extends PDOStatement {
+       private function __construct() {
+       }
+}
+
+class foo extends PDO {
+       public $statementClass = 'bar';
+       function __construct($dsn, $username, $password, $driver_options = 
array()) {
+               $driver_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
+               parent::__construct($dsn, $username, $password, 
$driver_options);
+
+               $this->setAttribute(PDO::ATTR_STATEMENT_CLASS, 
array($this->statementClass, array($this)));
+       }
+}
+
+$db = new foo('sqlite::memory:', '', '');
+$stmt = $db->query('SELECT 1');
+var_dump($stmt);
+
+?>
+--EXPECTF--
+object(bar)#%d (1) {
+  [%u|b%"queryString"]=>
+  %unicode|string%(8) "SELECT 1"
+}


Property changes on: php/php-src/trunk/ext/pdo_sqlite/tests/bug48773.phpt
___________________________________________________________________
Added: svn:keywords
   + Id Rev Revision
Added: svn:eol-style
   + native

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

Reply via email to