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