kalle                                    Mon, 17 Jan 2011 09:54:22 +0000

Revision: http://svn.php.net/viewvc?view=revision&revision=307529

Log:
MFT: Implemented FR #47802 (Support for setting character sets in DSN strings)

Bug: http://bugs.php.net/47802 (Assigned) PDO_MYSQL doesn't use the charset 
parameter
      
Changed paths:
    U   php/php-src/branches/PHP_5_3/NEWS
    U   php/php-src/branches/PHP_5_3/ext/pdo_mysql/mysql_driver.c
    U   php/php-src/branches/PHP_5_3/ext/pdo_mysql/php_pdo_mysql_int.h
    U   php/php-src/branches/PHP_5_3/ext/pdo_mysql/tests/mysql_pdo_test.inc
    A   
php/php-src/branches/PHP_5_3/ext/pdo_mysql/tests/pdo_mysql_connect_charset.phpt
    U   php/php-src/trunk/NEWS
    U   php/php-src/trunk/UPGRADING

Modified: php/php-src/branches/PHP_5_3/NEWS
===================================================================
--- php/php-src/branches/PHP_5_3/NEWS   2011-01-17 07:59:46 UTC (rev 307528)
+++ php/php-src/branches/PHP_5_3/NEWS   2011-01-17 09:54:22 UTC (rev 307529)
@@ -68,6 +68,8 @@
     server mode. (Gustavo)

 - PDO MySQL driver:
+  . Implemented FR #47802 (Support for setting character sets in DSN strings).
+    (Kalle)
   . Fixed bug #53551 (PDOStatement execute segfaults for pdo_mysql driver).
     (Johannes)


Modified: php/php-src/branches/PHP_5_3/ext/pdo_mysql/mysql_driver.c
===================================================================
--- php/php-src/branches/PHP_5_3/ext/pdo_mysql/mysql_driver.c   2011-01-17 
07:59:46 UTC (rev 307528)
+++ php/php-src/branches/PHP_5_3/ext/pdo_mysql/mysql_driver.c   2011-01-17 
09:54:22 UTC (rev 307529)
@@ -711,6 +711,13 @@
 #endif
        }

+#ifdef PDO_MYSQL_HAS_CHARSET
+       if (vars[0].optval && mysql_options(H->server, MYSQL_SET_CHARSET_NAME, 
vars[0].optval)) {
+               pdo_mysql_error(dbh);
+               goto cleanup;
+       }
+#endif
+
        dbname = vars[1].optval;
        host = vars[2].optval;
        if(vars[3].optval) {

Modified: php/php-src/branches/PHP_5_3/ext/pdo_mysql/php_pdo_mysql_int.h
===================================================================
--- php/php-src/branches/PHP_5_3/ext/pdo_mysql/php_pdo_mysql_int.h      
2011-01-17 07:59:46 UTC (rev 307528)
+++ php/php-src/branches/PHP_5_3/ext/pdo_mysql/php_pdo_mysql_int.h      
2011-01-17 09:54:22 UTC (rev 307529)
@@ -33,6 +33,10 @@
 #      define PDO_MYSQL_PARAM_BIND MYSQL_BIND
 #endif

+#if (MYSQL_VERSION_ID >= 40113 && MYSQL_VERSION_ID < 50000) || 
MYSQL_VERSION_ID >= 50007 || defined(MYSQL_USE_MYSQLND)
+# define PDO_MYSQL_HAS_CHARSET
+#endif
+
 #if defined(PDO_USE_MYSQLND) && PHP_DEBUG && !defined(PHP_WIN32)
 #define PDO_DBG_ENABLED 1


Modified: php/php-src/branches/PHP_5_3/ext/pdo_mysql/tests/mysql_pdo_test.inc
===================================================================
--- php/php-src/branches/PHP_5_3/ext/pdo_mysql/tests/mysql_pdo_test.inc 
2011-01-17 07:59:46 UTC (rev 307528)
+++ php/php-src/branches/PHP_5_3/ext/pdo_mysql/tests/mysql_pdo_test.inc 
2011-01-17 09:54:22 UTC (rev 307529)
@@ -4,9 +4,9 @@

 class MySQLPDOTest extends PDOTest {

-       static function factory($classname = 'PDO', $drop_test_tables = false, 
$myattr = null) {
+       static function factory($classname = 'PDO', $drop_test_tables = false, 
$myattr = null, $mydsn = null) {

-               $dsn    = self::getDSN();
+               $dsn    = self::getDSN($mydsn);
                $user   = PDO_MYSQL_TEST_USER;
                $pass   = PDO_MYSQL_TEST_PASS;
                $attr   = getenv('PDOTEST_ATTR');

Added: 
php/php-src/branches/PHP_5_3/ext/pdo_mysql/tests/pdo_mysql_connect_charset.phpt
===================================================================
--- 
php/php-src/branches/PHP_5_3/ext/pdo_mysql/tests/pdo_mysql_connect_charset.phpt 
                            (rev 0)
+++ 
php/php-src/branches/PHP_5_3/ext/pdo_mysql/tests/pdo_mysql_connect_charset.phpt 
    2011-01-17 09:54:22 UTC (rev 307529)
@@ -0,0 +1,34 @@
+--TEST--
+PDO_MYSQL: Defining a connection charset in the DSN
+--SKIPIF--
+<?php
+require_once(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'skipif.inc');
+require_once(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc');
+MySQLPDOTest::skip();
+?>
+--FILE--
+<?php
+       /* TODO: remove this test after fix and enable the BIT test in 
pdo_mysql_types.phpt again */
+       require_once(dirname(__FILE__) . DIRECTORY_SEPARATOR . 
'mysql_pdo_test.inc');
+
+       /* Connect to mysql to determine the current charset so we can 
diffinate it */
+       $link           = MySQLPDOTest::factory();
+       $charset        = $link->query("SHOW VARIABLES LIKE 
'character_set_connection'")->fetchObject()->value;
+
+       /* Make sure that we don't attempt to set the current character set to 
make this case useful */
+       $new_charset    = ($charset == 'latin1' ? 'ascii' : 'latin1');
+
+       /* Done with the original connection, create a second link to test the 
character set being defined */
+       unset($link);
+
+       $link           = MySQLPDOTest::factory('PDO', false, null, 
Array('charset' => $new_charset));
+       $conn_charset   = $link->query("SHOW VARIABLES LIKE 
'character_set_connection'")->fetchObject()->value;
+
+       if ($charset !== $conn_charset) {
+               echo "done!\n";
+       } else {
+               echo "failed!\n";
+       }
+?>
+--EXPECTF--
+done!
\ No newline at end of file

Modified: php/php-src/trunk/NEWS
===================================================================
--- php/php-src/trunk/NEWS      2011-01-17 07:59:46 UTC (rev 307528)
+++ php/php-src/trunk/NEWS      2011-01-17 09:54:22 UTC (rev 307529)
@@ -164,8 +164,6 @@
     Traversable. (Andrey, Johannes)
   . MySQLi: Implemented FR #39847 (mysqli_fetch_[field|fields|field_direct]
     need to return db). (Kalle)
-  . PDO_mysql: Implemented FR #47802 (Support for setting character sets in
-    DSN strings). (Kalle)
   . PDO_mysql: Removed support for linking with MySQL client libraries older
     than 4.1. (Johannes)


Modified: php/php-src/trunk/UPGRADING
===================================================================
--- php/php-src/trunk/UPGRADING 2011-01-17 07:59:46 UTC (rev 307528)
+++ php/php-src/trunk/UPGRADING 2011-01-17 09:54:22 UTC (rev 307529)
@@ -161,8 +161,6 @@
   strings. This breaks code that iterated the resulting stream array using a
   numeric index, but makes easier to identify which of the passed streams are
   present in the result.
-- pdo_mysql now supports setting character sets when connecting in the DSN
-  string.
 - mysqli_fetch_[field|fields|field_direct] now returns an additional property
   named 'db' that contains the database name of the associated result.


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

Reply via email to