Merge branch 'PHP-5.5' into PHP-5.6
authorMatteo Beccati <mbeccati@php.net>
Mon, 5 Jan 2015 08:54:06 +0000 (09:54 +0100)
committerMatteo Beccati <mbeccati@php.net>
Mon, 5 Jan 2015 09:48:18 +0000 (10:48 +0100)
* PHP-5.5:
  Fixed bug #68371 PDO#getAttribute() cannot be called with platform-specific attribute names

1  2 
ext/pdo_mysql/mysql_driver.c
ext/pdo_pgsql/pgsql_driver.c
ext/pdo_pgsql/tests/bug68371.phpt

Simple merge
index f347aaa0e42ccf9d91eabe67c89d126f0ebcecfb,a94688ca2e1e2cfa1fb6ff3e8ccfc29c57717a38..5a78abfb613a5d0f2740b3fbacf1412091225006
@@@ -379,6 -379,14 +379,15 @@@ static int pdo_pgsql_get_attribute(pdo_
        pdo_pgsql_db_handle *H = (pdo_pgsql_db_handle *)dbh->driver_data;
  
        switch (attr) {
+               case PDO_ATTR_EMULATE_PREPARES:
+                       ZVAL_BOOL(return_value, H->emulate_prepares);
+                       break;
+               case PDO_PGSQL_ATTR_DISABLE_NATIVE_PREPARED_STATEMENT:
++                      php_error_docref(NULL TSRMLS_CC, E_DEPRECATED, "PDO::PGSQL_ATTR_DISABLE_NATIVE_PREPARED_STATEMENT is deprecated, use PDO::ATTR_EMULATE_PREPARES instead");
+                       ZVAL_BOOL(return_value, H->disable_native_prepares);
+                       break;
                case PDO_ATTR_CLIENT_VERSION:
                        ZVAL_STRING(return_value, PG_VERSION, 1);
                        break;
index 0000000000000000000000000000000000000000,72b18919ef30367ece10ebb40b7b5c3e7c0ad0f4..a79da2af69370075b13d14b64be0cb6fae1dc7b8
mode 000000,100644..100644
--- /dev/null
@@@ -1,0 -1,99 +1,108 @@@
+ --TEST--
+ PDO PgSQL Bug #38671 (PDO#getAttribute() cannot be called with platform-specific attribute names)
+ --SKIPIF--
+ <?php
+ if (!extension_loaded('pdo') || !extension_loaded('pdo_pgsql')) die('skip not loaded');
+ require dirname(__FILE__) . '/config.inc';
+ require dirname(__FILE__) . '/../../../ext/pdo/tests/pdo_test.inc';
+ PDOTest::skip();
+ ?>
+ --FILE--
+ <?php
+ require dirname(__FILE__) . '/../../../ext/pdo/tests/pdo_test.inc';
+ $pdo = PDOTest::test_factory(dirname(__FILE__) . '/common.phpt');
+ $pdo->setAttribute (\PDO::ATTR_ERRMODE, \PDO::ERRMODE_EXCEPTION);
+ $attrs = array(
+     // Extensive test: default value and set+get values
+       PDO::PGSQL_ATTR_DISABLE_NATIVE_PREPARED_STATEMENT => array(null, true, false),
+       PDO::ATTR_EMULATE_PREPARES              => array(null, true, false),
+     // Just test the default
+       PDO::ATTR_AUTOCOMMIT                    => array(null),
+       PDO::ATTR_PREFETCH                              => array(null),
+       PDO::ATTR_TIMEOUT                               => array(null),
+       PDO::ATTR_ERRMODE                               => array(null),
+       PDO::ATTR_SERVER_VERSION                => array(null),
+       PDO::ATTR_CLIENT_VERSION                => array(null),
+       PDO::ATTR_SERVER_INFO                   => array(null),
+       PDO::ATTR_CONNECTION_STATUS             => array(null),
+       PDO::ATTR_CASE                                  => array(null),
+       PDO::ATTR_CURSOR_NAME                   => array(null),
+       PDO::ATTR_CURSOR                                => array(null),
+       PDO::ATTR_ORACLE_NULLS                  => array(null),
+       PDO::ATTR_PERSISTENT                    => array(null),
+       PDO::ATTR_STATEMENT_CLASS               => array(null),
+       PDO::ATTR_FETCH_TABLE_NAMES             => array(null),
+       PDO::ATTR_FETCH_CATALOG_NAMES   => array(null),
+       PDO::ATTR_DRIVER_NAME                   => array(null),
+       PDO::ATTR_STRINGIFY_FETCHES             => array(null),
+       PDO::ATTR_MAX_COLUMN_LEN                => array(null),
+       PDO::ATTR_DEFAULT_FETCH_MODE    => array(null),
+ );
+ foreach ($attrs as $a => $vals) {
+       foreach ($vals as $v) {
+               try {
+                       if (!isset($v)) {
+                               var_dump($pdo->getAttribute($a));
+                       } else {
+                               $pdo->setAttribute($a, $v);
+                               if ($pdo->getAttribute($a) === $v) {
+                                       echo "OK\n";
+                               } else {
+                                       throw new \Exception('KO');
+                               }
+                       }
+               } catch (\Exception $e) {
+                       if ($e->getCode() == 'IM001') {
+                               echo "ERR\n";
+                       } else {
+                               echo "ERR {$e->getMessage()}\n";
+                       }
+               }
+       }
+ }
+ ?>
+ --EXPECTF--
++Deprecated: PDO::getAttribute(): %s
+ bool(false)
++
++Deprecated: PDO::setAttribute(): %s
++
++Deprecated: PDO::getAttribute(): %s
+ OK
++
++Deprecated: PDO::setAttribute(): %s
++
++Deprecated: PDO::getAttribute(): %s
+ OK
+ bool(false)
+ OK
+ OK
+ ERR
+ ERR
+ ERR
+ int(2)
+ string(%d) "%s"
+ string(%d) "%s"
+ string(%d) "%s"
+ string(31) "%s"
+ int(2)
+ ERR
+ ERR
+ int(0)
+ bool(false)
+ array(1) {
+   [0]=>
+   string(12) "PDOStatement"
+ }
+ ERR
+ ERR
+ string(5) "pgsql"
+ ERR
+ ERR
+ int(4)