Author: uwendel
Date: 2007-08-20 11:17:34 +0200 (Mon, 20 Aug 2007)
New Revision: 922
Added:
trunk/tests/ext/mysqli/mysqli_change_user_insert_id.phpt
trunk/tests/ext/mysqli/mysqli_change_user_locks_temporary.phpt
trunk/tests/ext/mysqli/mysqli_change_user_rollback.phpt
trunk/tests/ext/mysqli/mysqli_change_user_set_names.phpt
Modified:
trunk/tests/ext/mysqli/mysqli_change_user_oo.phpt
Log:
Adding more tests for mysqli_change_user(). LAST_INSERT_ID()/mysqli_insert_id() seems to
be buggy with libmysql. *_set_names need to me made unicode ready later on.
Added: trunk/tests/ext/mysqli/mysqli_change_user_insert_id.phpt
===================================================================
--- trunk/tests/ext/mysqli/mysqli_change_user_insert_id.phpt 2007-08-17 11:58:40 UTC (rev
921)
+++ trunk/tests/ext/mysqli/mysqli_change_user_insert_id.phpt 2007-08-20 09:17:34 UTC (rev
922)
@@ -0,0 +1,56 @@
+--TEST--
+mysqli_change_user() - LAST_INSERT_ID()
+--SKIPIF--
+<?php
+require_once('skipif.inc');
+require_once('skipifemb.inc');
+require_once('skipifconnectfailure.inc');
+?>
+--FILE--
+<?php
+ require_once('connect.inc');
+
+ if (!$link = mysqli_connect($host, $user, $passwd, $db, $port, $socket))
+ printf("[001] [%d] %s\n", mysqli_connect_errno(), mysqli_connect_error());
+
+ if (!mysqli_query($link, 'DROP TABLE IF EXISTS test'))
+ printf("[002] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
+
+ if (!mysqli_query($link, 'CREATE TABLE test(id INT AUTO_INCREMENT PRIMARY KEY, label
CHAR(10))'))
+ printf("[003] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
+
+ if (!mysqli_query($link, 'INSERT INTO test(id, label) VALUES (100, "z")'))
+ printf("[004] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
+
+ if (($insert_id = mysqli_insert_id($link)) !== 100)
+ printf("[005] Expecting 100, got %d, [%d] %s\n",
+ $insert_id,
+ mysqli_errno($link), mysqli_error($link));
+
+ // LAST_INSERT_ID should be reset
+ mysqli_change_user($link, $user, $passwd, $db);
+
+ if (($insert_id = mysqli_insert_id($link)) !== 0)
+ printf("[006] Expecting 0, got %d, [%d] %s\n",
+ $insert_id,
+ mysqli_errno($link), mysqli_error($link));
+
+ if (!$res = mysqli_query($link, 'SELECT LAST_INSERT_ID() as _insert_id'))
+ printf("[007] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
+
+ if (!$row = mysqli_fetch_assoc($res))
+ printf("[008] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
+ mysqli_free_result($res);
+
+ if ($row['_insert_id'] != $insert_id)
+ printf("LAST_INSERT_ID() [%d] and mysqli_insert_id [%d] differ!\n",
+ $row['_insert_id'], $insert_id);
+
+ if ($row['_insert_id'] != 0)
+ printf("Expecting 0 got %d\n", $row['_insert_id']);
+
+ mysqli_close($link);
+ print "done!";
+?>
+--EXPECTF--
+done!
\ No newline at end of file
Added: trunk/tests/ext/mysqli/mysqli_change_user_locks_temporary.phpt
===================================================================
--- trunk/tests/ext/mysqli/mysqli_change_user_locks_temporary.phpt 2007-08-17 11:58:40 UTC
(rev 921)
+++ trunk/tests/ext/mysqli/mysqli_change_user_locks_temporary.phpt 2007-08-20 09:17:34 UTC
(rev 922)
@@ -0,0 +1,102 @@
+--TEST--
+mysqli_change_user() - table locks, GET_LOCK(), temporary tables
+--SKIPIF--
+<?php
+require_once('skipif.inc');
+require_once('skipifemb.inc');
+require_once('skipifconnectfailure.inc');
+?>
+--FILE--
+<?php
+ require_once('connect.inc');
+ require_once('table.inc');
+
+ if (!$link2 = mysqli_connect($host, $user, $passwd, $db, $port, $socket))
+ printf("[001] Cannot create second connection handle, [%d] %s\n",
+ mysqli_connect_errno(), mysqli_connect_error());
+
+ if (!mysqli_query($link, 'LOCK TABLE test WRITE'))
+ printf("[002] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
+
+ /*
+ if ($res = mysqli_query($link2, 'SELECT COUNT(*) AS _num FROM test')) {
+ printf("[003] Reading from test should not be possible due to a lock, [%d] %s\n",
+ mysqli_errno($link2), mysqli_error($link2));
+ mysqli_free_result($res);
+ }
+ */
+
+ // LOCKS should be removed
+ mysqli_change_user($link, $user, $passwd, $db);
+
+ if (!$res = mysqli_query($link2, 'SELECT COUNT(*) AS _num FROM test'))
+ printf("[003] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
+
+ if (!$row = mysqli_fetch_assoc($res))
+ printf("[004] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
+
+ if ($row['_num'] < 1)
+ printf("[005] There should be some rows in the table test\n");
+
+ mysqli_free_result($res);
+ mysqli_close($link2);
+
+ if (!mysqli_query($link, 'DROP TABLE test'))
+ printf("[006] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
+
+ if (!mysqli_query($link, 'CREATE TEMPORARY TABLE test(id INT)'))
+ printf("[007] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
+
+ if (!mysqli_query($link, 'INSERT INTO test(id) VALUES (1), (2), (3)'))
+ printf("[008] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
+
+ if (!$res = mysqli_query($link, 'SELECT COUNT(*) AS _num FROM test'))
+ printf("[009] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
+
+ if (!$row = mysqli_fetch_assoc($res))
+ printf("[010] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
+
+ if ($row['_num'] != 3)
+ printf("[011] There should be three rows in the table test\n");
+
+ mysqli_free_result($res);
+
+ // Temporary tables should be dropped
+ mysqli_change_user($link, $user, $passwd, $db);
+
+ if ($res = mysqli_query($link, 'SELECT COUNT(*) AS _num FROM test')) {
+ printf("[012] There should be no table test any more, [%d] %s\n",
+ mysqli_errno($link), mysqli_error($link));
+ mysqli_free_result($res);
+ }
+
+ if (!$res = mysqli_query($link, 'SELECT GET_LOCK("phptest", 2) AS _ok'))
+ printf("[013] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
+
+ if (!$row = mysqli_fetch_assoc($res))
+ printf("[014] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
+
+ if ($row['_ok'] != 1)
+ printf("[015] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
+
+ mysqli_free_result($res);
+
+ // GET_LOCK("phptest") should be released
+ mysqli_change_user($link, $user, $passwd, $db);
+
+ if (!$res = mysqli_query($link, 'SELECT IS_FREE_LOCK("phptest") AS _ok'))
+ printf("[016] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
+
+ if (!$row = mysqli_fetch_assoc($res))
+ printf("[017] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
+
+ if ($row['_ok'] != 1)
+ printf("[018] Lock 'phptest' should have been released, [%d] %s\n",
+ mysqli_errno($link), mysqli_error($link));
+
+ mysqli_free_result($res);
+ mysqli_close($link);
+ print "done!";
+?>
+--EXPECTF--
+done!
\ No newline at end of file
Modified: trunk/tests/ext/mysqli/mysqli_change_user_oo.phpt
===================================================================
--- trunk/tests/ext/mysqli/mysqli_change_user_oo.phpt 2007-08-17 11:58:40 UTC (rev 921)
+++ trunk/tests/ext/mysqli/mysqli_change_user_oo.phpt 2007-08-20 09:17:34 UTC (rev 922)
@@ -8,7 +8,7 @@
require_once('table.inc');
if (!$IS_MYSQLND && (mysqli_get_server_version($link) < 50118 &&
mysqli_get_server_version($link) > 50100)) {
- die("skip Your MySQL Server version has a known but that will cause a crash");
+ die("skip Your MySQL Server version has a known bug that will cause a crash");
}
?>
--FILE--
Added: trunk/tests/ext/mysqli/mysqli_change_user_rollback.phpt
===================================================================
--- trunk/tests/ext/mysqli/mysqli_change_user_rollback.phpt 2007-08-17 11:58:40 UTC (rev
921)
+++ trunk/tests/ext/mysqli/mysqli_change_user_rollback.phpt 2007-08-20 09:17:34 UTC (rev
922)
@@ -0,0 +1,70 @@
+--TEST--
+mysqli_change_user() - ROLLBACK
+--SKIPIF--
+<?php
+require_once('skipif.inc');
+require_once('skipifemb.inc');
+require_once('skipifconnectfailure.inc');
+require_once('connect.inc');
+$link = mysqli_connect($host, $user, $passwd, $db, $port, $socket);
+$result = mysqli_query($link, "SHOW VARIABLES LIKE 'have_innodb'");
+$row = mysqli_fetch_row($result);
+mysqli_free_result($result);
+mysqli_close($link);
+
+if ($row[1] == 'NO') {
+ printf ("skip ROLLBACK requires transactional engine InnoDB");
+}
+?>
+--FILE--
+<?php
+ require_once('connect.inc');
+ require_once('table.inc');
+
+ if (!mysqli_query($link, 'ALTER TABLE test ENGINE=InnoDB'))
+ printf("[001] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
+
+ mysqli_autocommit($link, false);
+
+ if (!$res = mysqli_query($link, 'SELECT COUNT(*) AS _num FROM test'))
+ printf("[002] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
+
+ if (!$row = mysqli_fetch_assoc($res))
+ printf("[003] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
+ mysqli_free_result($res);
+
+ $num = $row['_num'];
+ assert($num > 0);
+
+ if (!$res = mysqli_query($link, 'DELETE FROM test'))
+ printf("[004] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
+
+ if (!$res = mysqli_query($link, 'SELECT COUNT(*) AS _num FROM test'))
+ printf("[005] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
+
+ if (!$row = mysqli_fetch_assoc($res))
+ printf("[006] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
+ mysqli_free_result($res);
+
+ if (0 != $row['_num'])
+ printf("[007] Rows should have been deleted in this transaction\n");
+
+ // DELETE should be rolled back
+ mysqli_change_user($link, $user, $passwd, $db);
+
+ if (!$res = mysqli_query($link, 'SELECT COUNT(*) AS _num FROM test'))
+ printf("[008] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
+
+ if (!$row = mysqli_fetch_assoc($res))
+ printf("[009] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
+
+ if ($row['_num'] != $num)
+ printf("[010] Expecting %d rows in the table test, found %d rows\n",
+ $num, $row['_num']);
+
+ mysqli_free_result($res);
+ mysqli_close($link);
+ print "done!";
+?>
+--EXPECTF--
+done!
\ No newline at end of file
Added: trunk/tests/ext/mysqli/mysqli_change_user_set_names.phpt
===================================================================
--- trunk/tests/ext/mysqli/mysqli_change_user_set_names.phpt 2007-08-17 11:58:40 UTC (rev
921)
+++ trunk/tests/ext/mysqli/mysqli_change_user_set_names.phpt 2007-08-20 09:17:34 UTC (rev
922)
@@ -0,0 +1,160 @@
+--TEST--
+mysqli_change_user() - SET NAMES
+--SKIPIF--
+<?php
+require_once('skipif.inc');
+require_once('skipifemb.inc');
+require_once('skipifconnectfailure.inc');
+
+if (ini_get('unicode.semantics'))
+ die("skip Test for non-unicode mode only");
+
+if (!$link = mysqli_connect($host, $user, $passwd, $db, $port, $socket))
+ die(sprintf("skip [%d] %s", mysqli_connect_errno(), mysqli_connect_error()));
+
+if (!$res = mysqli_query($link, 'SELECT version() AS server_version'))
+ die(sprintf("skip [%d] %s\n", mysqli_errno($link), mysqli_error($link)));
+
+$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!"));
+
+if ($version[0] <= 4 && $version[1] < 1)
+ die(sprintf("ski Need MySQL Server 4.1+ for the test!"));
+?>
+--FILE--
+<?php
+ require_once('connect.inc');
+
+ if (!$link = mysqli_connect($host, $user, $passwd, $db, $port, $socket))
+ printf("[001] [%d] %s\n", mysqli_connect_errno(), mysqli_connect_error());
+
+ if (!$res = mysqli_query($link, 'SHOW CHARACTER SET LIKE "latin%"'))
+ printf("[002] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
+
+ $charsets = array();
+ while ($row = mysqli_fetch_assoc($res))
+ $charsets[$row['Charset']] = $row['Default collation'];
+
+ mysqli_free_result($res);
+ if (!mysqli_query($link, 'SET NAMES DEFAULT'))
+ printf("[003] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
+
+ if (!$res = mysqli_query($link, 'SELECT
+ @@character_set_client AS charset_client,
+ @@character_set_connection AS charset_connection,
+ @@character_set_results AS charset_results,
+ @@collation_connection AS collation_connection,
+ @@collation_database AS collation_database,
+ @@collation_server AS collation_server'))
+ printf("[004] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
+
+ if (!$defaults = mysqli_fetch_assoc($res))
+ printf("[005] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
+ mysqli_free_result($res);
+
+ $not_changed = $defaults;
+ foreach ($charsets as $charset => $collation) {
+
+ if (isset($not_changed['charset_client']) &&
+ $charset != $not_changed['charset_client'] &&
+ mysqli_query($link, sprintf('SET @@character_set_client = "%s"', $charset)))
+ unset($not_changed['charset_client']);
+
+ if (isset($not_changed['charset_connection']) &&
+ $charset != $not_changed['charset_connection'] &&
+ mysqli_query($link, sprintf('SET @@character_connection = "%s"', $charset)))
+ unset($not_changed['charset_connection']);
+
+ if (isset($not_changed['charset_results']) &&
+ $charset != $not_changed['charset_results'] &&
+ mysqli_query($link, sprintf('SET @@character_set_results = "%s"', $charset)))
+ unset($not_changed['charset_results']);
+
+ if (isset($not_changed['collation_connection']) &&
+ $collation != $not_changed['collation_connection'] &&
+ mysqli_query($link, sprintf('SET @@collation_connection = "%s"', $collation)))
+ unset($not_changed['collation_connection']);
+
+ if (isset($not_changed['collation_database']) &&
+ $collation != $not_changed['collation_database'] &&
+ mysqli_query($link, sprintf('SET @@collation_database = "%s"', $collation)))
+ unset($not_changed['collation_database']);
+
+ if (isset($not_changed['collation_server']) &&
+ $collation != $not_changed['collation_server'] &&
+ mysqli_query($link, sprintf('SET @@collation_server = "%s"', $collation)))
+ unset($not_changed['collation_server']);
+
+ if (empty($not_changed))
+ break;
+ }
+
+ if (!$res = mysqli_query($link, 'SELECT
+ @@character_set_client AS charset_client,
+ @@character_set_connection AS charset_connection,
+ @@character_set_results AS charset_results,
+ @@collation_connection AS collation_connection,
+ @@collation_database AS collation_database,
+ @@collation_server AS collation_server'))
+ printf("[006] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
+
+ if (!$modified = mysqli_fetch_assoc($res))
+ printf("[007] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
+ mysqli_free_result($res);
+
+ if ($modified == $defaults)
+ printf("[008] Not all settings have been changed\n");
+
+ // LAST_INSERT_ID should be reset
+ mysqli_change_user($link, $user, $passwd, $db);
+
+ if (!$res = mysqli_query($link, 'SELECT
+ @@character_set_client AS charset_client,
+ @@character_set_connection AS charset_connection,
+ @@character_set_results AS charset_results,
+ @@collation_connection AS collation_connection,
+ @@collation_database AS collation_database,
+ @@collation_server AS collation_server'))
+ printf("[009] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
+
+ if (!$new = mysqli_fetch_assoc($res))
+ printf("[010] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
+ mysqli_free_result($res);
+
+ if ($new == $modified) {
+ printf("[011] Charsets/collations have not been reset.\n");
+ printf("Got:\n");
+ var_dump($new);
+ printf("Expected:\n");
+ var_dump($defaults);
+ }
+
+ if ($new != $defaults) {
+ printf("[012] Charsets/collations have not been reset to their defaults.\n");
+ printf("Got:\n");
+ var_dump($new);
+ printf("Expected:\n");
+ var_dump($defaults);
+ }
+
+ if (!is_object($charset = mysqli_get_charset($link)))
+ printf("[013] Expecting object/std_class, got %s/%s\n", gettype($charset), $charset);
+
+ if ($charset->charset != $defaults['charset_connection'])
+ printf("[014] Expecting connection charset to be %s got %s\n",
+ $defaults['charset_connection'],
+ $charset->charset);
+
+ if ($charset->collation != $defaults['collation_connection'])
+ printf("[015] Expecting collation to be %s got %s\n",
+ $defaults['collation_connection'],
+ $charset->collation);
+
+ mysqli_close($link);
+ print "done!";
+?>
+--EXPECTF--
+done!
\ No newline at end of file
| Thread |
|---|
| • PHP mysqlnd svn commit: r922 - trunk/tests/ext/mysqli | uwendel | 20 Aug |