uw                                       Thu, 23 Sep 2010 15:08:43 +0000

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

Log:
Let's try not to have 'uft8'-only tests and avoid setting the charset upon 
connect. I've changed the tests to make no assumptions on the server charset 
setting. var_dump()/EXPECTF tests got replaced with dynamic tests which try to 
take the current charset into account.

Changed paths:
    U   php/php-src/branches/PHP_5_3/ext/mysqli/tests/connect.inc
    U   
php/php-src/branches/PHP_5_3/ext/mysqli/tests/mysqli_change_user_set_names.phpt
    U   php/php-src/branches/PHP_5_3/ext/mysqli/tests/mysqli_fetch_field.phpt
    U   php/php-src/branches/PHP_5_3/ext/mysqli/tests/mysqli_fetch_field_oo.phpt
    U   php/php-src/branches/PHP_5_3/ext/mysqli/tests/mysqli_fetch_fields.phpt
    U   php/php-src/branches/PHP_5_3/ext/mysqli/tests/mysqli_field_seek.phpt
    U   
php/php-src/branches/PHP_5_3/ext/mysqli/tests/mysqli_stmt_bind_param_check_param_no_change.phpt
    U   
php/php-src/branches/PHP_5_3/ext/mysqli/tests/mysqli_stmt_get_result_metadata_fetch_field.phpt
    U   php/php-src/trunk/ext/mysqli/tests/connect.inc
    U   php/php-src/trunk/ext/mysqli/tests/mysqli_change_user_set_names.phpt
    U   php/php-src/trunk/ext/mysqli/tests/mysqli_fetch_field.phpt
    U   php/php-src/trunk/ext/mysqli/tests/mysqli_fetch_field_oo.phpt
    U   php/php-src/trunk/ext/mysqli/tests/mysqli_fetch_fields.phpt
    U   php/php-src/trunk/ext/mysqli/tests/mysqli_field_seek.phpt
    U   
php/php-src/trunk/ext/mysqli/tests/mysqli_stmt_bind_param_check_param_no_change.phpt
    U   
php/php-src/trunk/ext/mysqli/tests/mysqli_stmt_get_result_metadata_fetch_field.phpt

Modified: php/php-src/branches/PHP_5_3/ext/mysqli/tests/connect.inc
===================================================================
--- php/php-src/branches/PHP_5_3/ext/mysqli/tests/connect.inc	2010-09-23 14:59:13 UTC (rev 303731)
+++ php/php-src/branches/PHP_5_3/ext/mysqli/tests/connect.inc	2010-09-23 15:08:43 UTC (rev 303732)
@@ -20,6 +20,7 @@
 	if ($socket) {
 		ini_set('mysqli.default_socket', $socket);
 	}
+
 	/* Development setting: test experimal features and/or feature requests that never worked before? */
 	$TEST_EXPERIMENTAL = (in_array(getenv("MYSQL_TEST_EXPERIMENTAL"), array(0, 1))) ?
 				((1 == getenv("MYSQL_TEST_EXPERIMENTAL")) ? true : false) :
@@ -90,12 +91,10 @@

 			if ($flags !== false) {
 				$link = mysqli_init();
-				$link->options(MYSQLI_SET_CHARSET_NAME, "utf8");
 				if (!mysqli_real_connect($link, $host, $user, $passwd, $db, $port, $socket, $flags))
 					$link = false;
 			} else {
 				$link = mysqli_connect($host, $user, $passwd, $db, $port, $socket);
-				$link->set_charset("utf8");
 			}

 			return $link;
@@ -129,6 +128,100 @@
 				}
 			}
 		}
+
+		function my_get_charsets($link) {
+
+			/* Those tree are set by SET NAMES */
+			$charsets = array(
+				'client' 		=> NULL,
+				'results'		=> NULL,
+				'connection'	=> NULL,
+			);
+
+			if (!($res = mysqli_query($link, "SHOW VARIABLES LIKE '%character%'"))) {
+				printf("[%d] %s\n", mysqli_errno($link), mysqli_error($link));
+				return $charsets;
+			}
+
+			$names = array();
+			while ($row = mysqli_fetch_assoc($res)) {
+				$names[$row['Variable_name']] = $row['Value'];
+			}
+			mysqli_free_result($res);
+
+			if (!($res = mysqli_query($link, sprintf("SHOW CHARACTER SET LIKE '%s'", $names['character_set_client']))) ||
+				!($details = mysqli_fetch_assoc($res))) {
+				printf("[%d] %s\n", mysqli_errno($link), mysqli_error($link));
+				return $charsets;
+			}
+			mysqli_free_result($res);
+
+			$charsets['client'] = array(
+				'charset' 	=> $details['Charset'],
+				'desc'		=> $details['Description'],
+				'collation'	=> $details['Default collation'],
+				'maxlen'	=> $details['Maxlen'],
+				'nr'		=> NULL,
+			);
+
+			if (!($res = mysqli_query($link, sprintf("SHOW COLLATION LIKE '%s'", $details['Default collation']))) ||
+				!($collation = mysqli_fetch_assoc($res))) {
+				printf("[%d] %s\n", mysqli_errno($link), mysqli_error($link));
+				return $charsets;
+			}
+			mysqli_free_result($res);
+			$charsets['client']['nr'] = $collation['Id'];
+
+			if (!($res = mysqli_query($link, sprintf("SHOW CHARACTER SET LIKE '%s'", $names['character_set_results']))) ||
+				!($details = mysqli_fetch_assoc($res))) {
+				printf("[%d] %s\n", mysqli_errno($link), mysqli_error($link));
+				return $charsets;
+			}
+			mysqli_free_result($res);
+
+			$charsets['results'] = array(
+				'charset' 	=> $details['Charset'],
+				'desc'		=> $details['Description'],
+				'collation'	=> $details['Default collation'],
+				'maxlen'	=> $details['Maxlen'],
+				'nr'		=> NULL,
+			);
+
+			if (!($res = mysqli_query($link, sprintf("SHOW COLLATION LIKE '%s'", $details['Default collation']))) ||
+				!($collation = mysqli_fetch_assoc($res))) {
+				printf("[%d] %s\n", mysqli_errno($link), mysqli_error($link));
+				return $charsets;
+			}
+			mysqli_free_result($res);
+			$charsets['results']['nr'] = $collation['Id'];
+
+
+			if (!($res = mysqli_query($link, sprintf("SHOW CHARACTER SET LIKE '%s'", $names['character_set_connection']))) ||
+				!($details = mysqli_fetch_assoc($res))) {
+				printf("[%d] %s\n", mysqli_errno($link), mysqli_error($link));
+				return $charsets;
+			}
+			mysqli_free_result($res);
+
+			$charsets['connection'] = array(
+				'charset' 	=> $details['Charset'],
+				'desc'		=> $details['Description'],
+				'collation'	=> $details['Default collation'],
+				'maxlen'	=> $details['Maxlen'],
+				'nr'		=> NULL,
+			);
+
+			if (!($res = mysqli_query($link, sprintf("SHOW COLLATION LIKE '%s'", $details['Default collation']))) ||
+				!($collation = mysqli_fetch_assoc($res))) {
+				printf("[%d] %s\n", mysqli_errno($link), mysqli_error($link));
+				return $charsets;
+			}
+			mysqli_free_result($res);
+			$charsets['connection']['nr'] = $collation['Id'];
+
+			return $charsets;
+		}
+
 	} else {
 		printf("skip Eeeek/BUG/FIXME - connect.inc included twice! skipif bug?\n");
 	}

Modified: php/php-src/branches/PHP_5_3/ext/mysqli/tests/mysqli_change_user_set_names.phpt
===================================================================
--- php/php-src/branches/PHP_5_3/ext/mysqli/tests/mysqli_change_user_set_names.phpt	2010-09-23 14:59:13 UTC (rev 303731)
+++ php/php-src/branches/PHP_5_3/ext/mysqli/tests/mysqli_change_user_set_names.phpt	2010-09-23 15:08:43 UTC (rev 303732)
@@ -16,10 +16,10 @@
 mysqli_free_result($res);
 $version = explode('.', $tmp['server_version']);
 if (empty($version))
-	die(sprintf("skip Cannot determine server version, need MySQL Server 4.1+ for the test!"));
+	die(sprintf("skip Cannot determine server version, we need MySQL Server 4.1+ for the test!"));

 if ($version[0] <= 4 && $version[1] < 1)
-	die(sprintf("ski Need MySQL Server 4.1+ for the test!"));
+	die(sprintf("skip We need MySQL Server 4.1+ for the test!"));
 ?>
 --FILE--
 <?php

Modified: php/php-src/branches/PHP_5_3/ext/mysqli/tests/mysqli_fetch_field.phpt
===================================================================
--- php/php-src/branches/PHP_5_3/ext/mysqli/tests/mysqli_fetch_field.phpt	2010-09-23 14:59:13 UTC (rev 303731)
+++ php/php-src/branches/PHP_5_3/ext/mysqli/tests/mysqli_fetch_field.phpt	2010-09-23 15:08:43 UTC (rev 303732)
@@ -22,33 +22,51 @@

 	require('table.inc');

+	$charsets = my_get_charsets($link);
 	if (!$res = mysqli_query($link, "SELECT id AS ID, label FROM test AS TEST ORDER BY id LIMIT 1")) {
 		printf("[003] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
 	}

-	while ($tmp = mysqli_fetch_field($res))
-		var_dump($tmp);
+	/* ID column, binary charset */
+	$tmp = mysqli_fetch_field($res);
 	var_dump($tmp);

+	/* label column, result set charset */
+	$tmp = mysqli_fetch_field($res);
+	var_dump($tmp);
+	if ($tmp->charsetnr != $charsets['results']['nr']) {
+		printf("[004] Expecting charset %s/%d got %d\n",
+			$charsets['results']['charset'],
+			$charsets['results']['nr'], $tmp->charsetnr);
+	}
+	if ($tmp->length != (1 * $charsets['results']['maxlen'])) {
+		printf("[005] Expecting length %d got %d\n",
+			$charsets['results']['maxlen'],
+			$tmp->max_length);
+	}
+
+	var_dump(mysqli_fetch_field($res));
+
 	mysqli_free_result($res);

 	// Read http://bugs.php.net/bug.php?id=42344 on defaults!
 	if (NULL !== ($tmp = mysqli_fetch_field($res)))
-		printf("[004] Expecting NULL, got %s/%s\n", gettype($tmp), $tmp);
+		printf("[006] Expecting NULL, got %s/%s\n", gettype($tmp), $tmp);

 	if (!mysqli_query($link, "DROP TABLE IF EXISTS test"))
-		printf("[005] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
+		printf("[007] [%d] %s\n", mysqli_errno($link), mysqli_error($link));

 	if (!mysqli_query($link, "CREATE TABLE test(id INT NOT NULL DEFAULT 1)"))
-		printf("[006] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
+		printf("[008] [%d] %s\n", mysqli_errno($link), mysqli_error($link));

 	if (!mysqli_query($link, "INSERT INTO test(id) VALUES (2)"))
-		printf("[007] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
+		printf("[009] [%d] %s\n", mysqli_errno($link), mysqli_error($link));

 	if (!$res = mysqli_query($link, "SELECT id as _default_test FROM test")) {
-		printf("[008] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
+		printf("[010] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
 	}
 	var_dump(mysqli_fetch_assoc($res));
+	/* binary */
 	var_dump(mysqli_fetch_field($res));
 	mysqli_free_result($res);

@@ -97,7 +115,7 @@
   [%u|b%"def"]=>
   %unicode|string%(0) ""
   [%u|b%"max_length"]=>
-  int(1)
+  int(%d)
   [%u|b%"length"]=>
   int(%d)
   [%u|b%"charsetnr"]=>

Modified: php/php-src/branches/PHP_5_3/ext/mysqli/tests/mysqli_fetch_field_oo.phpt
===================================================================
--- php/php-src/branches/PHP_5_3/ext/mysqli/tests/mysqli_fetch_field_oo.phpt	2010-09-23 14:59:13 UTC (rev 303731)
+++ php/php-src/branches/PHP_5_3/ext/mysqli/tests/mysqli_fetch_field_oo.phpt	2010-09-23 15:08:43 UTC (rev 303732)
@@ -24,22 +24,36 @@
 		printf("[002] Cannot connect to the server using host=%s, user=%s, passwd=***, dbname=%s, port=%s, socket=%s\n",
 			$host, $user, $db, $port, $socket);

+	if (!is_null($tmp = @$res->fetch_field($link)))
+		printf("[003] Expecting NULL, got %s/%s\n", gettype($tmp), $tmp);
+
+	$charsets = my_get_charsets($link);
+
 	if (!$res = $mysqli->query("SELECT id AS ID, label FROM test AS TEST ORDER BY id LIMIT 1")) {
-		printf("[003] [%d] %s\n", $mysqli->errno, $mysqli->error);
+		printf("[004] [%d] %s\n", $mysqli->errno, $mysqli->error);
 	}

-	if (!is_null($tmp = @$res->fetch_field($link)))
-		printf("[003] Expecting NULL, got %s/%s\n", gettype($tmp), $tmp);
+	var_dump($res->fetch_field());

-	while ($tmp = $res->fetch_field()) {
-		var_dump($tmp);
+	$tmp = $res->fetch_field();
+	var_dump($tmp);
+	if ($tmp->charsetnr != $charsets['results']['nr']) {
+		printf("[005] Expecting charset %s/%d got %d\n",
+			$charsets['results']['charset'],
+			$charsets['results']['nr'], $tmp->charsetnr);
 	}
-	var_dump($tmp);
+	if ($tmp->length != (1 * $charsets['results']['maxlen'])) {
+		printf("[006] Expecting length %d got %d\n",
+			$charsets['results']['maxlen'],
+			$tmp->max_length);
+	}

+	var_dump($res->fetch_field());
+
 	$res->free_result();

 	if (NULL !== ($tmp = $res->fetch_field()))
-		printf("[004] Expecting NULL, got %s/%s\n", gettype($tmp), $tmp);
+		printf("[007] Expecting NULL, got %s/%s\n", gettype($tmp), $tmp);

 	$mysqli->close();
 	print "done!";
@@ -85,7 +99,7 @@
   [%u|b%"def"]=>
   %unicode|string%(0) ""
   [%u|b%"max_length"]=>
-  int(1)
+  int(%d)
   [%u|b%"length"]=>
   int(%d)
   [%u|b%"charsetnr"]=>

Modified: php/php-src/branches/PHP_5_3/ext/mysqli/tests/mysqli_fetch_fields.phpt
===================================================================
--- php/php-src/branches/PHP_5_3/ext/mysqli/tests/mysqli_fetch_fields.phpt	2010-09-23 14:59:13 UTC (rev 303731)
+++ php/php-src/branches/PHP_5_3/ext/mysqli/tests/mysqli_fetch_fields.phpt	2010-09-23 15:08:43 UTC (rev 303732)
@@ -21,13 +21,31 @@
 		printf("[002] Expecting NULL, got %s/%s\n", gettype($tmp), $tmp);

 	require('table.inc');
+	$charsets = my_get_charsets($link);
+
 	if (!$res = mysqli_query($link, "SELECT id AS ID, label FROM test AS TEST ORDER BY id LIMIT 1")) {
 		printf("[003] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
 	}

 	$fields = mysqli_fetch_fields($res);
-	foreach ($fields as $k => $field)
+	foreach ($fields as $k => $field) {
 		var_dump($field);
+		switch ($k) {
+			case 1:
+				/* label column, result set charset */
+				if ($field->charsetnr != $charsets['results']['nr']) {
+					printf("[004] Expecting charset %s/%d got %d\n",
+						$charsets['results']['charset'],
+						$charsets['results']['nr'], $field->charsetnr);
+				}
+				if ($field->length != (1 * $charsets['results']['maxlen'])) {
+					printf("[005] Expecting length %d got %d\n",
+						$charsets['results']['maxlen'],
+						$field->max_length);
+				}
+				break;
+		}
+	}

 	mysqli_free_result($res);


Modified: php/php-src/branches/PHP_5_3/ext/mysqli/tests/mysqli_field_seek.phpt
===================================================================
--- php/php-src/branches/PHP_5_3/ext/mysqli/tests/mysqli_field_seek.phpt	2010-09-23 14:59:13 UTC (rev 303731)
+++ php/php-src/branches/PHP_5_3/ext/mysqli/tests/mysqli_field_seek.phpt	2010-09-23 15:08:43 UTC (rev 303732)
@@ -66,6 +66,8 @@
 		printf("[002] Expecting NULL, got %s/%s\n", gettype($tmp), $tmp);

 	require('table.inc');
+	$charsets = my_get_charsets($link);
+
 	if (!$res = mysqli_query($link, "SELECT id, label FROM test ORDER BY id LIMIT 1", MYSQLI_USE_RESULT)) {
 		printf("[003] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
 	}
@@ -75,7 +77,21 @@
 	var_dump(mysqli_field_seek($res, 0));
 	var_dump(mysqli_fetch_field($res));
 	var_dump(mysqli_field_seek($res, 1));
-	var_dump(mysqli_fetch_field($res));
+
+	$field = mysqli_fetch_field($res);
+	var_dump($field);
+	/* label column, result set charset */
+	if ($field->charsetnr != $charsets['results']['nr']) {
+		printf("[004] Expecting charset %s/%d got %d\n",
+			$charsets['results']['charset'],
+			$charsets['results']['nr'], $field->charsetnr);
+	}
+	if ($field->length != (1 * $charsets['results']['maxlen'])) {
+		printf("[005] Expecting length %d got %d\n",
+			$charsets['results']['maxlen'],
+			$field->max_length);
+	}
+
 	var_dump(mysqli_field_tell($res));
 	var_dump(mysqli_field_seek($res, 2));
 	var_dump(mysqli_fetch_field($res));
@@ -96,8 +112,6 @@

 	var_dump(mysqli_field_seek($res, 0));

-
-
 	mysqli_close($link);
 	print "done!";
 ?>
@@ -170,7 +184,7 @@
   [%u|b%"def"]=>
   %unicode|string%(0) ""
   [%u|b%"max_length"]=>
-  int(0)
+  int(%d)
   [%u|b%"length"]=>
   int(%d)
   [%u|b%"charsetnr"]=>

Modified: php/php-src/branches/PHP_5_3/ext/mysqli/tests/mysqli_stmt_bind_param_check_param_no_change.phpt
===================================================================
--- php/php-src/branches/PHP_5_3/ext/mysqli/tests/mysqli_stmt_bind_param_check_param_no_change.phpt	2010-09-23 14:59:13 UTC (rev 303731)
+++ php/php-src/branches/PHP_5_3/ext/mysqli/tests/mysqli_stmt_bind_param_check_param_no_change.phpt	2010-09-23 15:08:43 UTC (rev 303732)
@@ -9,6 +9,7 @@
 --FILE--
 <?php
 	require('table.inc');
+	$link->set_charset('latin1');

 	class foo {
 	  // @var $bar string

Modified: php/php-src/branches/PHP_5_3/ext/mysqli/tests/mysqli_stmt_get_result_metadata_fetch_field.phpt
===================================================================
--- php/php-src/branches/PHP_5_3/ext/mysqli/tests/mysqli_stmt_get_result_metadata_fetch_field.phpt	2010-09-23 14:59:13 UTC (rev 303731)
+++ php/php-src/branches/PHP_5_3/ext/mysqli/tests/mysqli_stmt_get_result_metadata_fetch_field.phpt	2010-09-23 15:08:43 UTC (rev 303732)
@@ -12,26 +12,44 @@
 --FILE--
 <?php
 	require('table.inc');
+	$charsets = my_get_charsets($link);

 	if (!($stmt = mysqli_stmt_init($link)) ||
 		!mysqli_stmt_prepare($stmt, "SELECT id, label, id + 1 as _id,  concat(label, '_') ___label FROM test ORDER BY id ASC LIMIT 3") ||
 		!mysqli_stmt_execute($stmt))
-		printf("[006] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
+		printf("[001] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));

 	if (!is_object($res = mysqli_stmt_get_result($stmt)) || 'mysqli_result' != get_class($res)) {
-		printf("[007] Expecting object/mysqli_result got %s/%s, [%d] %s\n",
+		printf("[002] Expecting object/mysqli_result got %s/%s, [%d] %s\n",
 			gettype($res), $res, mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
 	}

 	if (!is_object($res_meta = mysqli_stmt_result_metadata($stmt)) ||
 		'mysqli_result' != get_class($res_meta)) {
-		printf("[008] Expecting object/mysqli_result got %s/%s, [%d] %s\n",
+		printf("[003] Expecting object/mysqli_result got %s/%s, [%d] %s\n",
 			gettype($res), $res, mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
 	}

-	$fields = array();
-	while ($info = $res->fetch_field()) {
-		var_dump($info);
+	$i = 0;
+	while ($field = $res->fetch_field()) {
+		var_dump($field);
+		$i++;
+		if (2 == $i) {
+			/*
+			Label column, result set charset.
+			All of the following columns are "too hot" - too server dependent
+			*/
+			if ($field->charsetnr != $charsets['results']['nr']) {
+				printf("[004] Expecting charset %s/%d got %d\n",
+					$charsets['results']['charset'],
+					$charsets['results']['nr'], $field->charsetnr);
+			}
+			if ($field->length != (1 * $charsets['results']['maxlen'])) {
+				printf("[005] Expecting length %d got %d\n",
+					$charsets['results']['maxlen'],
+					$field->max_length);
+			}
+		}
 	}

 	mysqli_stmt_close($stmt);
@@ -79,7 +97,7 @@
   [%u|b%"def"]=>
   %unicode|string%(0) ""
   [%u|b%"max_length"]=>
-  int(1)
+  int(%d)
   [%u|b%"length"]=>
   int(%d)
   [%u|b%"charsetnr"]=>
@@ -127,7 +145,7 @@
   [%u|b%"def"]=>
   %unicode|string%(0) ""
   [%u|b%"max_length"]=>
-  int(2)
+  int(%d)
   [%u|b%"length"]=>
   int(%d)
   [%u|b%"charsetnr"]=>

Modified: php/php-src/trunk/ext/mysqli/tests/connect.inc
===================================================================
--- php/php-src/trunk/ext/mysqli/tests/connect.inc	2010-09-23 14:59:13 UTC (rev 303731)
+++ php/php-src/trunk/ext/mysqli/tests/connect.inc	2010-09-23 15:08:43 UTC (rev 303732)
@@ -20,6 +20,7 @@
 	if ($socket) {
 		ini_set('mysqli.default_socket', $socket);
 	}
+
 	/* Development setting: test experimal features and/or feature requests that never worked before? */
 	$TEST_EXPERIMENTAL = (in_array(getenv("MYSQL_TEST_EXPERIMENTAL"), array(0, 1))) ?
 				((1 == getenv("MYSQL_TEST_EXPERIMENTAL")) ? true : false) :
@@ -90,12 +91,10 @@

 			if ($flags !== false) {
 				$link = mysqli_init();
-				$link->options(MYSQLI_SET_CHARSET_NAME, "utf8");
 				if (!mysqli_real_connect($link, $host, $user, $passwd, $db, $port, $socket, $flags))
 					$link = false;
 			} else {
 				$link = mysqli_connect($host, $user, $passwd, $db, $port, $socket);
-				$link->set_charset("utf8");
 			}

 			return $link;
@@ -129,6 +128,100 @@
 				}
 			}
 		}
+
+		function my_get_charsets($link) {
+
+			/* Those tree are set by SET NAMES */
+			$charsets = array(
+				'client' 		=> NULL,
+				'results'		=> NULL,
+				'connection'	=> NULL,
+			);
+
+			if (!($res = mysqli_query($link, "SHOW VARIABLES LIKE '%character%'"))) {
+				printf("[%d] %s\n", mysqli_errno($link), mysqli_error($link));
+				return $charsets;
+			}
+
+			$names = array();
+			while ($row = mysqli_fetch_assoc($res)) {
+				$names[$row['Variable_name']] = $row['Value'];
+			}
+			mysqli_free_result($res);
+
+			if (!($res = mysqli_query($link, sprintf("SHOW CHARACTER SET LIKE '%s'", $names['character_set_client']))) ||
+				!($details = mysqli_fetch_assoc($res))) {
+				printf("[%d] %s\n", mysqli_errno($link), mysqli_error($link));
+				return $charsets;
+			}
+			mysqli_free_result($res);
+
+			$charsets['client'] = array(
+				'charset' 	=> $details['Charset'],
+				'desc'		=> $details['Description'],
+				'collation'	=> $details['Default collation'],
+				'maxlen'	=> $details['Maxlen'],
+				'nr'		=> NULL,
+			);
+
+			if (!($res = mysqli_query($link, sprintf("SHOW COLLATION LIKE '%s'", $details['Default collation']))) ||
+				!($collation = mysqli_fetch_assoc($res))) {
+				printf("[%d] %s\n", mysqli_errno($link), mysqli_error($link));
+				return $charsets;
+			}
+			mysqli_free_result($res);
+			$charsets['client']['nr'] = $collation['Id'];
+
+			if (!($res = mysqli_query($link, sprintf("SHOW CHARACTER SET LIKE '%s'", $names['character_set_results']))) ||
+				!($details = mysqli_fetch_assoc($res))) {
+				printf("[%d] %s\n", mysqli_errno($link), mysqli_error($link));
+				return $charsets;
+			}
+			mysqli_free_result($res);
+
+			$charsets['results'] = array(
+				'charset' 	=> $details['Charset'],
+				'desc'		=> $details['Description'],
+				'collation'	=> $details['Default collation'],
+				'maxlen'	=> $details['Maxlen'],
+				'nr'		=> NULL,
+			);
+
+			if (!($res = mysqli_query($link, sprintf("SHOW COLLATION LIKE '%s'", $details['Default collation']))) ||
+				!($collation = mysqli_fetch_assoc($res))) {
+				printf("[%d] %s\n", mysqli_errno($link), mysqli_error($link));
+				return $charsets;
+			}
+			mysqli_free_result($res);
+			$charsets['results']['nr'] = $collation['Id'];
+
+
+			if (!($res = mysqli_query($link, sprintf("SHOW CHARACTER SET LIKE '%s'", $names['character_set_connection']))) ||
+				!($details = mysqli_fetch_assoc($res))) {
+				printf("[%d] %s\n", mysqli_errno($link), mysqli_error($link));
+				return $charsets;
+			}
+			mysqli_free_result($res);
+
+			$charsets['connection'] = array(
+				'charset' 	=> $details['Charset'],
+				'desc'		=> $details['Description'],
+				'collation'	=> $details['Default collation'],
+				'maxlen'	=> $details['Maxlen'],
+				'nr'		=> NULL,
+			);
+
+			if (!($res = mysqli_query($link, sprintf("SHOW COLLATION LIKE '%s'", $details['Default collation']))) ||
+				!($collation = mysqli_fetch_assoc($res))) {
+				printf("[%d] %s\n", mysqli_errno($link), mysqli_error($link));
+				return $charsets;
+			}
+			mysqli_free_result($res);
+			$charsets['connection']['nr'] = $collation['Id'];
+
+			return $charsets;
+		}
+
 	} else {
 		printf("skip Eeeek/BUG/FIXME - connect.inc included twice! skipif bug?\n");
 	}

Modified: php/php-src/trunk/ext/mysqli/tests/mysqli_change_user_set_names.phpt
===================================================================
--- php/php-src/trunk/ext/mysqli/tests/mysqli_change_user_set_names.phpt	2010-09-23 14:59:13 UTC (rev 303731)
+++ php/php-src/trunk/ext/mysqli/tests/mysqli_change_user_set_names.phpt	2010-09-23 15:08:43 UTC (rev 303732)
@@ -16,10 +16,10 @@
 mysqli_free_result($res);
 $version = explode('.', $tmp['server_version']);
 if (empty($version))
-	die(sprintf("skip Cannot determine server version, need MySQL Server 4.1+ for the test!"));
+	die(sprintf("skip Cannot determine server version, we need MySQL Server 4.1+ for the test!"));

 if ($version[0] <= 4 && $version[1] < 1)
-	die(sprintf("ski Need MySQL Server 4.1+ for the test!"));
+	die(sprintf("skip We need MySQL Server 4.1+ for the test!"));
 ?>
 --FILE--
 <?php

Modified: php/php-src/trunk/ext/mysqli/tests/mysqli_fetch_field.phpt
===================================================================
--- php/php-src/trunk/ext/mysqli/tests/mysqli_fetch_field.phpt	2010-09-23 14:59:13 UTC (rev 303731)
+++ php/php-src/trunk/ext/mysqli/tests/mysqli_fetch_field.phpt	2010-09-23 15:08:43 UTC (rev 303732)
@@ -22,33 +22,51 @@

 	require('table.inc');

+	$charsets = my_get_charsets($link);
 	if (!$res = mysqli_query($link, "SELECT id AS ID, label FROM test AS TEST ORDER BY id LIMIT 1")) {
 		printf("[003] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
 	}

-	while ($tmp = mysqli_fetch_field($res))
-		var_dump($tmp);
+	/* ID column, binary charset */
+	$tmp = mysqli_fetch_field($res);
 	var_dump($tmp);

+	/* label column, result set charset */
+	$tmp = mysqli_fetch_field($res);
+	var_dump($tmp);
+	if ($tmp->charsetnr != $charsets['results']['nr']) {
+		printf("[004] Expecting charset %s/%d got %d\n",
+			$charsets['results']['charset'],
+			$charsets['results']['nr'], $tmp->charsetnr);
+	}
+	if ($tmp->length != (1 * $charsets['results']['maxlen'])) {
+		printf("[005] Expecting length %d got %d\n",
+			$charsets['results']['maxlen'],
+			$tmp->max_length);
+	}
+
+	var_dump(mysqli_fetch_field($res));
+
 	mysqli_free_result($res);

 	// Read http://bugs.php.net/bug.php?id=42344 on defaults!
 	if (NULL !== ($tmp = mysqli_fetch_field($res)))
-		printf("[004] Expecting NULL, got %s/%s\n", gettype($tmp), $tmp);
+		printf("[006] Expecting NULL, got %s/%s\n", gettype($tmp), $tmp);

 	if (!mysqli_query($link, "DROP TABLE IF EXISTS test"))
-		printf("[005] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
+		printf("[007] [%d] %s\n", mysqli_errno($link), mysqli_error($link));

 	if (!mysqli_query($link, "CREATE TABLE test(id INT NOT NULL DEFAULT 1)"))
-		printf("[006] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
+		printf("[008] [%d] %s\n", mysqli_errno($link), mysqli_error($link));

 	if (!mysqli_query($link, "INSERT INTO test(id) VALUES (2)"))
-		printf("[007] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
+		printf("[009] [%d] %s\n", mysqli_errno($link), mysqli_error($link));

 	if (!$res = mysqli_query($link, "SELECT id as _default_test FROM test")) {
-		printf("[008] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
+		printf("[010] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
 	}
 	var_dump(mysqli_fetch_assoc($res));
+	/* binary */
 	var_dump(mysqli_fetch_field($res));
 	mysqli_free_result($res);

@@ -97,7 +115,7 @@
   [%u|b%"def"]=>
   %unicode|string%(0) ""
   [%u|b%"max_length"]=>
-  int(1)
+  int(%d)
   [%u|b%"length"]=>
   int(%d)
   [%u|b%"charsetnr"]=>

Modified: php/php-src/trunk/ext/mysqli/tests/mysqli_fetch_field_oo.phpt
===================================================================
--- php/php-src/trunk/ext/mysqli/tests/mysqli_fetch_field_oo.phpt	2010-09-23 14:59:13 UTC (rev 303731)
+++ php/php-src/trunk/ext/mysqli/tests/mysqli_fetch_field_oo.phpt	2010-09-23 15:08:43 UTC (rev 303732)
@@ -24,22 +24,36 @@
 		printf("[002] Cannot connect to the server using host=%s, user=%s, passwd=***, dbname=%s, port=%s, socket=%s\n",
 			$host, $user, $db, $port, $socket);

+	if (!is_null($tmp = @$res->fetch_field($link)))
+		printf("[003] Expecting NULL, got %s/%s\n", gettype($tmp), $tmp);
+
+	$charsets = my_get_charsets($link);
+
 	if (!$res = $mysqli->query("SELECT id AS ID, label FROM test AS TEST ORDER BY id LIMIT 1")) {
-		printf("[003] [%d] %s\n", $mysqli->errno, $mysqli->error);
+		printf("[004] [%d] %s\n", $mysqli->errno, $mysqli->error);
 	}

-	if (!is_null($tmp = @$res->fetch_field($link)))
-		printf("[003] Expecting NULL, got %s/%s\n", gettype($tmp), $tmp);
+	var_dump($res->fetch_field());

-	while ($tmp = $res->fetch_field()) {
-		var_dump($tmp);
+	$tmp = $res->fetch_field();
+	var_dump($tmp);
+	if ($tmp->charsetnr != $charsets['results']['nr']) {
+		printf("[005] Expecting charset %s/%d got %d\n",
+			$charsets['results']['charset'],
+			$charsets['results']['nr'], $tmp->charsetnr);
 	}
-	var_dump($tmp);
+	if ($tmp->length != (1 * $charsets['results']['maxlen'])) {
+		printf("[006] Expecting length %d got %d\n",
+			$charsets['results']['maxlen'],
+			$tmp->max_length);
+	}

+	var_dump($res->fetch_field());
+
 	$res->free_result();

 	if (NULL !== ($tmp = $res->fetch_field()))
-		printf("[004] Expecting NULL, got %s/%s\n", gettype($tmp), $tmp);
+		printf("[007] Expecting NULL, got %s/%s\n", gettype($tmp), $tmp);

 	$mysqli->close();
 	print "done!";
@@ -85,7 +99,7 @@
   [%u|b%"def"]=>
   %unicode|string%(0) ""
   [%u|b%"max_length"]=>
-  int(1)
+  int(%d)
   [%u|b%"length"]=>
   int(%d)
   [%u|b%"charsetnr"]=>

Modified: php/php-src/trunk/ext/mysqli/tests/mysqli_fetch_fields.phpt
===================================================================
--- php/php-src/trunk/ext/mysqli/tests/mysqli_fetch_fields.phpt	2010-09-23 14:59:13 UTC (rev 303731)
+++ php/php-src/trunk/ext/mysqli/tests/mysqli_fetch_fields.phpt	2010-09-23 15:08:43 UTC (rev 303732)
@@ -21,13 +21,31 @@
 		printf("[002] Expecting NULL, got %s/%s\n", gettype($tmp), $tmp);

 	require('table.inc');
+	$charsets = my_get_charsets($link);
+
 	if (!$res = mysqli_query($link, "SELECT id AS ID, label FROM test AS TEST ORDER BY id LIMIT 1")) {
 		printf("[003] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
 	}

 	$fields = mysqli_fetch_fields($res);
-	foreach ($fields as $k => $field)
+	foreach ($fields as $k => $field) {
 		var_dump($field);
+		switch ($k) {
+			case 1:
+				/* label column, result set charset */
+				if ($field->charsetnr != $charsets['results']['nr']) {
+					printf("[004] Expecting charset %s/%d got %d\n",
+						$charsets['results']['charset'],
+						$charsets['results']['nr'], $field->charsetnr);
+				}
+				if ($field->length != (1 * $charsets['results']['maxlen'])) {
+					printf("[005] Expecting length %d got %d\n",
+						$charsets['results']['maxlen'],
+						$field->max_length);
+				}
+				break;
+		}
+	}

 	mysqli_free_result($res);


Modified: php/php-src/trunk/ext/mysqli/tests/mysqli_field_seek.phpt
===================================================================
--- php/php-src/trunk/ext/mysqli/tests/mysqli_field_seek.phpt	2010-09-23 14:59:13 UTC (rev 303731)
+++ php/php-src/trunk/ext/mysqli/tests/mysqli_field_seek.phpt	2010-09-23 15:08:43 UTC (rev 303732)
@@ -66,6 +66,8 @@
 		printf("[002] Expecting NULL, got %s/%s\n", gettype($tmp), $tmp);

 	require('table.inc');
+	$charsets = my_get_charsets($link);
+
 	if (!$res = mysqli_query($link, "SELECT id, label FROM test ORDER BY id LIMIT 1", MYSQLI_USE_RESULT)) {
 		printf("[003] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
 	}
@@ -75,7 +77,21 @@
 	var_dump(mysqli_field_seek($res, 0));
 	var_dump(mysqli_fetch_field($res));
 	var_dump(mysqli_field_seek($res, 1));
-	var_dump(mysqli_fetch_field($res));
+
+	$field = mysqli_fetch_field($res);
+	var_dump($field);
+	/* label column, result set charset */
+	if ($field->charsetnr != $charsets['results']['nr']) {
+		printf("[004] Expecting charset %s/%d got %d\n",
+			$charsets['results']['charset'],
+			$charsets['results']['nr'], $field->charsetnr);
+	}
+	if ($field->length != (1 * $charsets['results']['maxlen'])) {
+		printf("[005] Expecting length %d got %d\n",
+			$charsets['results']['maxlen'],
+			$field->max_length);
+	}
+
 	var_dump(mysqli_field_tell($res));
 	var_dump(mysqli_field_seek($res, 2));
 	var_dump(mysqli_fetch_field($res));
@@ -96,8 +112,6 @@

 	var_dump(mysqli_field_seek($res, 0));

-
-
 	mysqli_close($link);
 	print "done!";
 ?>
@@ -170,7 +184,7 @@
   [%u|b%"def"]=>
   %unicode|string%(0) ""
   [%u|b%"max_length"]=>
-  int(0)
+  int(%d)
   [%u|b%"length"]=>
   int(%d)
   [%u|b%"charsetnr"]=>

Modified: php/php-src/trunk/ext/mysqli/tests/mysqli_stmt_bind_param_check_param_no_change.phpt
===================================================================
--- php/php-src/trunk/ext/mysqli/tests/mysqli_stmt_bind_param_check_param_no_change.phpt	2010-09-23 14:59:13 UTC (rev 303731)
+++ php/php-src/trunk/ext/mysqli/tests/mysqli_stmt_bind_param_check_param_no_change.phpt	2010-09-23 15:08:43 UTC (rev 303732)
@@ -9,6 +9,7 @@
 --FILE--
 <?php
 	require('table.inc');
+	$link->set_charset('latin1');

 	class foo {
 	  // @var $bar string

Modified: php/php-src/trunk/ext/mysqli/tests/mysqli_stmt_get_result_metadata_fetch_field.phpt
===================================================================
--- php/php-src/trunk/ext/mysqli/tests/mysqli_stmt_get_result_metadata_fetch_field.phpt	2010-09-23 14:59:13 UTC (rev 303731)
+++ php/php-src/trunk/ext/mysqli/tests/mysqli_stmt_get_result_metadata_fetch_field.phpt	2010-09-23 15:08:43 UTC (rev 303732)
@@ -12,26 +12,44 @@
 --FILE--
 <?php
 	require('table.inc');
+	$charsets = my_get_charsets($link);

 	if (!($stmt = mysqli_stmt_init($link)) ||
 		!mysqli_stmt_prepare($stmt, "SELECT id, label, id + 1 as _id,  concat(label, '_') ___label FROM test ORDER BY id ASC LIMIT 3") ||
 		!mysqli_stmt_execute($stmt))
-		printf("[006] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
+		printf("[001] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));

 	if (!is_object($res = mysqli_stmt_get_result($stmt)) || 'mysqli_result' != get_class($res)) {
-		printf("[007] Expecting object/mysqli_result got %s/%s, [%d] %s\n",
+		printf("[002] Expecting object/mysqli_result got %s/%s, [%d] %s\n",
 			gettype($res), $res, mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
 	}

 	if (!is_object($res_meta = mysqli_stmt_result_metadata($stmt)) ||
 		'mysqli_result' != get_class($res_meta)) {
-		printf("[008] Expecting object/mysqli_result got %s/%s, [%d] %s\n",
+		printf("[003] Expecting object/mysqli_result got %s/%s, [%d] %s\n",
 			gettype($res), $res, mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
 	}

-	$fields = array();
-	while ($info = $res->fetch_field()) {
-		var_dump($info);
+	$i = 0;
+	while ($field = $res->fetch_field()) {
+		var_dump($field);
+		$i++;
+		if (2 == $i) {
+			/*
+			Label column, result set charset.
+			All of the following columns are "too hot" - too server dependent
+			*/
+			if ($field->charsetnr != $charsets['results']['nr']) {
+				printf("[004] Expecting charset %s/%d got %d\n",
+					$charsets['results']['charset'],
+					$charsets['results']['nr'], $field->charsetnr);
+			}
+			if ($field->length != (1 * $charsets['results']['maxlen'])) {
+				printf("[005] Expecting length %d got %d\n",
+					$charsets['results']['maxlen'],
+					$field->max_length);
+			}
+		}
 	}

 	mysqli_stmt_close($stmt);
@@ -79,7 +97,7 @@
   [%u|b%"def"]=>
   %unicode|string%(0) ""
   [%u|b%"max_length"]=>
-  int(1)
+  int(%d)
   [%u|b%"length"]=>
   int(%d)
   [%u|b%"charsetnr"]=>
@@ -127,7 +145,7 @@
   [%u|b%"def"]=>
   %unicode|string%(0) ""
   [%u|b%"max_length"]=>
-  int(2)
+  int(%d)
   [%u|b%"length"]=>
   int(%d)
   [%u|b%"charsetnr"]=>
-- 
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to