From: Ulf Wendel Date: Thu, 23 Sep 2010 15:08:43 +0000 (+0000) Subject: Let's try not to have 'uft8'-only tests and avoid setting the charset upon connect... X-Git-Tag: php-5.3.4RC1~204 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=8bb124394bf1734bd41bb2a28d1a3fbd8f74180a;p=php 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. --- diff --git a/ext/mysqli/tests/connect.inc b/ext/mysqli/tests/connect.inc index 02a71ec0b8..6c6c48b5fc 100644 --- a/ext/mysqli/tests/connect.inc +++ b/ext/mysqli/tests/connect.inc @@ -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"); } diff --git a/ext/mysqli/tests/mysqli_change_user_set_names.phpt b/ext/mysqli/tests/mysqli_change_user_set_names.phpt index 362873c842..3579e31358 100644 --- a/ext/mysqli/tests/mysqli_change_user_set_names.phpt +++ b/ext/mysqli/tests/mysqli_change_user_set_names.phpt @@ -16,10 +16,10 @@ $tmp = mysqli_fetch_assoc($res); 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-- 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 @@ object(stdClass)#%d (11) { [%u|b%"def"]=> %unicode|string%(0) "" [%u|b%"max_length"]=> - int(1) + int(%d) [%u|b%"length"]=> int(%d) [%u|b%"charsetnr"]=> diff --git a/ext/mysqli/tests/mysqli_fetch_field_oo.phpt b/ext/mysqli/tests/mysqli_fetch_field_oo.phpt index fc51e858b3..0130f0e7f2 100644 --- a/ext/mysqli/tests/mysqli_fetch_field_oo.phpt +++ b/ext/mysqli/tests/mysqli_fetch_field_oo.phpt @@ -24,22 +24,36 @@ require_once('skipifconnectfailure.inc'); 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 (!$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); - } - if (!is_null($tmp = @$res->fetch_field($link))) printf("[003] Expecting NULL, got %s/%s\n", gettype($tmp), $tmp); - while ($tmp = $res->fetch_field()) { - var_dump($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("[004] [%d] %s\n", $mysqli->errno, $mysqli->error); } + + var_dump($res->fetch_field()); + + $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); + } + 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 @@ object(stdClass)#%d (11) { [%u|b%"def"]=> %unicode|string%(0) "" [%u|b%"max_length"]=> - int(1) + int(%d) [%u|b%"length"]=> int(%d) [%u|b%"charsetnr"]=> diff --git a/ext/mysqli/tests/mysqli_fetch_fields.phpt b/ext/mysqli/tests/mysqli_fetch_fields.phpt index 332db84c6c..885c7338b5 100644 --- a/ext/mysqli/tests/mysqli_fetch_fields.phpt +++ b/ext/mysqli/tests/mysqli_fetch_fields.phpt @@ -21,13 +21,31 @@ require_once('skipifconnectfailure.inc'); 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); diff --git a/ext/mysqli/tests/mysqli_field_seek.phpt b/ext/mysqli/tests/mysqli_field_seek.phpt index a0cab48ec9..1da42c2833 100644 --- a/ext/mysqli/tests/mysqli_field_seek.phpt +++ b/ext/mysqli/tests/mysqli_field_seek.phpt @@ -66,6 +66,8 @@ require_once('skipifconnectfailure.inc'); 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 @@ require_once('skipifconnectfailure.inc'); 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 @@ require_once('skipifconnectfailure.inc'); var_dump(mysqli_field_seek($res, 0)); - - mysqli_close($link); print "done!"; ?> @@ -170,7 +184,7 @@ object(stdClass)#%d (11) { [%u|b%"def"]=> %unicode|string%(0) "" [%u|b%"max_length"]=> - int(0) + int(%d) [%u|b%"length"]=> int(%d) [%u|b%"charsetnr"]=> diff --git a/ext/mysqli/tests/mysqli_stmt_bind_param_check_param_no_change.phpt b/ext/mysqli/tests/mysqli_stmt_bind_param_check_param_no_change.phpt index e1e3a92e56..03d15902af 100644 --- a/ext/mysqli/tests/mysqli_stmt_bind_param_check_param_no_change.phpt +++ b/ext/mysqli/tests/mysqli_stmt_bind_param_check_param_no_change.phpt @@ -9,6 +9,7 @@ require_once('skipifconnectfailure.inc'); --FILE-- set_charset('latin1'); class foo { // @var $bar string diff --git a/ext/mysqli/tests/mysqli_stmt_get_result_metadata_fetch_field.phpt b/ext/mysqli/tests/mysqli_stmt_get_result_metadata_fetch_field.phpt index 9c876e5227..23d045a22b 100644 --- a/ext/mysqli/tests/mysqli_stmt_get_result_metadata_fetch_field.phpt +++ b/ext/mysqli/tests/mysqli_stmt_get_result_metadata_fetch_field.phpt @@ -12,26 +12,44 @@ if (!function_exists('mysqli_stmt_get_result')) --FILE-- 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 @@ object(stdClass)#%d (11) { [%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 @@ object(stdClass)#%d (11) { [%u|b%"def"]=> %unicode|string%(0) "" [%u|b%"max_length"]=> - int(2) + int(%d) [%u|b%"length"]=> int(%d) [%u|b%"charsetnr"]=>