Author: uwendel
Date: 2007-09-06 16:21:07 +0200 (Thu, 06 Sep 2007)
New Revision: 1001
Modified:
trunk/tests/ext/mysqli/mysqli_get_client_stats.phpt
Log:
More testing and potentially more issues, but need
to build mysqlnd rev 1001 first.
Modified: trunk/tests/ext/mysqli/mysqli_get_client_stats.phpt
===================================================================
--- trunk/tests/ext/mysqli/mysqli_get_client_stats.phpt 2007-09-06 14:13:54 UTC (rev 1000)
+++ trunk/tests/ext/mysqli/mysqli_get_client_stats.phpt 2007-09-06 14:21:07 UTC (rev 1001)
@@ -9,6 +9,9 @@
die("skip only available with mysqlnd");
}
?>
+--INI--
+mysqlnd.collect_statistics=1
+mysqlnd.collect_memory_statistics=1
--FILE--
<?php
/*
@@ -148,13 +151,18 @@
$expected['rows_fetched_from_server_normal'] =
(string)($expected['rows_fetched_from_server_normal'] + 1);
$expected['rows_fetched_from_client_normal_buffered'] =
(string)($expected['rows_fetched_from_client_normal_buffered'] + 1);
+ $expected['buffered_sets'] = (string)($expected['buffered_sets'] + 1);
+ $expected['result_set_queries'] = (string)($expected['result_set_queries'] + 1);
+
if (!is_array($info = mysqli_get_client_stats()) || empty($info))
printf("[%03d] Expecting array/any_non_empty, got %s/%s\n",
++$test_counter, gettype($info), $info);
mysqli_get_client_stats_assert_eq('rows_fetched_from_server_normal', $info, $expected,
$test_counter);
mysqli_get_client_stats_assert_eq('rows_fetched_from_client_normal_buffered', $info,
$expected, $test_counter);
+ mysqli_get_client_stats_assert_eq('buffered_sets', $info, $expected, $test_counter);
+ mysqli_get_client_stats_assert_eq('result_set_queries', $info, $expected,
$test_counter);
/* no change to rows_fetched_from_client_normal_buffered! */
if (!$row = mysqli_fetch_assoc($res))
@@ -184,9 +192,13 @@
$expected['rows_fetched_from_server_normal'] =
(string)($expected['rows_fetched_from_server_normal'] + $num_rows);
$expected['rows_fetched_from_client_normal_buffered'] =
(string)($expected['rows_fetched_from_client_normal_buffered'] + $num_rows);
+ $expected['buffered_sets'] = (string)($expected['buffered_sets'] + 1);
+ $expected['result_set_queries'] = (string)($expected['result_set_queries'] + 1);
mysqli_get_client_stats_assert_eq('rows_fetched_from_server_normal', $info, $expected,
$test_counter);
mysqli_get_client_stats_assert_eq('rows_fetched_from_client_normal_buffered', $info,
$expected, $test_counter);
+ mysqli_get_client_stats_assert_eq('buffered_sets', $info, $expected, $test_counter);
+ mysqli_get_client_stats_assert_eq('result_set_queries', $info, $expected,
$test_counter);
/* fetching none, but stats should not be affected - current implementation */
mysqli_free_result($res);
@@ -198,17 +210,269 @@
mysqli_get_client_stats_assert_eq('rows_fetched_from_server_normal', $info, $expected,
$test_counter);
mysqli_get_client_stats_assert_eq('rows_fetched_from_client_normal_buffered', $info,
$expected, $test_counter);
- print "Checking for normal buffered side effects...\n";
+ print "Testing unbuffered normal...\n";
+ if (!$res = mysqli_query($link, 'SELECT id, label FROM test', MYSQLI_USE_RESULT))
+ printf("[%03d] SELECT id, label FROM test failed, [%d] %s\n",
+ ++$test_counter, mysqli_errno($link), mysqli_error($link));
- /* no change to any of those! */
+
+ mysqli_get_client_stats_assert_eq('rows_fetched_from_server_normal', $info, $expected,
$test_counter);
+ mysqli_get_client_stats_assert_eq('rows_fetched_from_client_normal_unbuffered', $info,
$expected, $test_counter);
+
+ while ($row = mysqli_fetch_assoc($res))
+ ;
+ mysqli_free_result($res);
+
+ $expected['rows_fetched_from_server_normal'] =
(string)($expected['rows_fetched_from_server_normal'] + $num_rows);
+ $expected['rows_fetched_from_client_normal_unbuffered'] =
(string)($expected['rows_fetched_from_client_normal_unbuffered'] + $num_rows);
+ $expected['unbuffered_sets'] = (string)($expected['unbuffered_sets'] + 1);
+ $expected['result_set_queries'] = (string)($expected['result_set_queries'] + 1);
+
+ if (!is_array($info = mysqli_get_client_stats()) || empty($info))
+ printf("[%03d] Expecting array/any_non_empty, got %s/%s\n",
+ ++$test_counter, gettype($info), $info);
+
+ mysqli_get_client_stats_assert_eq('rows_fetched_from_server_normal', $info, $expected,
$test_counter);
+ mysqli_get_client_stats_assert_eq('rows_fetched_from_client_normal_unbuffered', $info,
$expected, $test_counter);
+ mysqli_get_client_stats_assert_eq('unbuffered_sets', $info, $expected, $test_counter);
+ mysqli_get_client_stats_assert_eq('result_set_queries', $info, $expected,
$test_counter);
+
+ print "Testing unbuffered normal... - SELECT id, label FROM test, not all fetched\n";
+ if (!$res = mysqli_query($link, 'SELECT id, label FROM test', MYSQLI_USE_RESULT))
+ printf("[%03d] SELECT id, label FROM test failed, [%d] %s\n",
+ ++$test_counter, mysqli_errno($link), mysqli_error($link));
+
+ for ($i = 0; $i < $num_rows - 1; $i++)
+ $row = mysqli_fetch_assoc($res);
+
+ $expected['rows_fetched_from_server_normal'] =
(string)($expected['rows_fetched_from_server_normal'] + $num_rows - 1);
+ $expected['rows_fetched_from_client_normal_unbuffered'] =
(string)($expected['rows_fetched_from_client_normal_unbuffered'] + $num_rows - 1);
+ $expected['unbuffered_sets'] = (string)($expected['unbuffered_sets'] + 1);
+ $expected['result_set_queries'] = (string)($expected['result_set_queries'] + 1);
+
+ if (!is_array($info = mysqli_get_client_stats()) || empty($info))
+ printf("[%03d] Expecting array/any_non_empty, got %s/%s\n",
+ ++$test_counter, gettype($info), $info);
+
+ mysqli_get_client_stats_assert_eq('rows_fetched_from_server_normal', $info, $expected,
$test_counter);
+ mysqli_get_client_stats_assert_eq('rows_fetched_from_client_normal_unbuffered', $info,
$expected, $test_counter);
+ mysqli_get_client_stats_assert_eq('unbuffered_sets', $info, $expected, $test_counter);
+ mysqli_get_client_stats_assert_eq('result_set_queries', $info, $expected,
$test_counter);
+
+ print "Testing if implicit fetching and cleaning happens...\n";
+ mysqli_free_result($res);
+
+ /* last row has been implicitly cleaned from the wire by freeing the result set */
+ $expected['rows_fetched_from_server_normal'] =
(string)($expected['rows_fetched_from_server_normal'] + 1);
+ $expected['rows_fetched_from_client_normal_unbuffered'] =
(string)($expected['rows_fetched_from_client_normal_unbuffered'] + 1);
+ $expected['rows_skipped_normal'] = (string)($info['rows_skipped_normal'] + 1);
+ $expected['flushed_normal_sets'] = (string)($expected['flushed_normal_sets'] + 1);
+
+ if (!is_array($info = mysqli_get_client_stats()) || empty($info))
+ printf("[%03d] Expecting array/any_non_empty, got %s/%s\n",
+ ++$test_counter, gettype($info), $info);
+
+ mysqli_get_client_stats_assert_eq('rows_fetched_from_server_normal', $info, $expected,
$test_counter);
+ mysqli_get_client_stats_assert_eq('rows_fetched_from_client_normal_unbuffered', $info,
$expected, $test_counter);
+ mysqli_get_client_stats_assert_eq('rows_skipped_normal', $info, $expected,
$test_counter);
+ mysqli_get_client_stats_assert_eq('flushed_normal_sets', $info, $expected,
$test_counter);
+
+ print "Testing buffered Prepared Statements...\n";
+ if (!$stmt = mysqli_stmt_init($link))
+ printf("[%03d] stmt_init() failed, [%d] %s\n",
+ ++$test_counter, mysqli_errno($link), mysqli_error($link));
+
+ if (!mysqli_stmt_prepare($stmt, 'SELECT id, label FROM test') ||
+ !mysqli_stmt_execute($stmt))
+ printf("[%03d] prepare/execute failed, [%d] %s\n",
+ ++$test_counter, mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
+
+ /* by default PS is unbuffered - no change */
mysqli_get_client_stats_assert_eq('rows_fetched_from_server_ps', $info, $expected,
$test_counter);
- mysqli_get_client_stats_assert_eq('rows_fetched_from_client_normal_buffered', $info,
$expected, $test_counter);
- mysqli_get_client_stats_assert_eq('rows_fetched_from_client_normal_unbuffered', $info,
$expected, $test_counter);
mysqli_get_client_stats_assert_eq('rows_fetched_from_client_ps_buffered', $info,
$expected, $test_counter);
+
+ if (!mysqli_stmt_store_result($stmt))
+ printf("[%03d] store_result failed, [%d] %s\n",
+ ++$test_counter, mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
+ mysqli_stmt_free_result($stmt);
+
+ $expected['rows_fetched_from_server_ps'] =
(string)($expected['rows_fetched_from_server_ps'] + $num_rows);
+ $expected['rows_fetched_from_client_ps_buffered'] =
(string)($expected['rows_fetched_from_client_ps_buffered'] + $num_rows);
+ $expected['result_set_queries'] = (string)($expected['result_set_queries'] + 1);
+ $expected['ps_buffered_sets'] = (string)($expected['ps_buffered_sets'] + 1);
+
+
+ if (!is_array($info = mysqli_get_client_stats()) || empty($info))
+ printf("[%03d] Expecting array/any_non_empty, got %s/%s\n",
+ ++$test_counter, gettype($info), $info);
+
+ mysqli_get_client_stats_assert_eq('rows_fetched_from_server_ps', $info, $expected,
$test_counter);
+ mysqli_get_client_stats_assert_eq('rows_fetched_from_client_ps_buffered', $info,
$expected, $test_counter);
+ mysqli_get_client_stats_assert_eq('result_set_queries', $info, $expected,
$test_counter);
+ mysqli_get_client_stats_assert_eq('ps_buffered_sets', $info, $expected, $test_counter);
+
+ print "Testing buffered Prepared Statements... - fetching all\n";
+
+ if (!mysqli_stmt_prepare($stmt, 'SELECT id, label FROM test') ||
+ !mysqli_stmt_execute($stmt))
+ printf("[%03d] prepare/execute failed, [%d] %s\n",
+ ++$test_counter, mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
+
+ $id = $label = null;
+ if (!mysqli_stmt_bind_result($stmt, $id, $label))
+ printf("[%03d] bind_result failed, [%d] %s\n",
+ ++$test_counter, mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
+
+ if (!mysqli_stmt_store_result($stmt))
+ printf("[%03d] store_result failed, [%d] %s\n",
+ ++$test_counter, mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
+
+ while (mysqli_stmt_fetch($stmt))
+ ;
+
+ $expected['rows_fetched_from_server_ps'] =
(string)($expected['rows_fetched_from_server_ps'] + $num_rows);
+ $expected['rows_fetched_from_client_ps_buffered'] =
(string)($expected['rows_fetched_from_client_ps_buffered'] + $num_rows);
+ $expected['result_set_queries'] = (string)($expected['result_set_queries'] + 1);
+ $expected['ps_buffered_sets'] = (string)($expected['ps_buffered_sets'] + 1);
+
+ if (!is_array($info = mysqli_get_client_stats()) || empty($info))
+ printf("[%03d] Expecting array/any_non_empty, got %s/%s\n",
+ ++$test_counter, gettype($info), $info);
+
+ mysqli_get_client_stats_assert_eq('rows_fetched_from_server_ps', $info, $expected,
$test_counter);
+ mysqli_get_client_stats_assert_eq('rows_fetched_from_client_ps_buffered', $info,
$expected, $test_counter);
+ mysqli_get_client_stats_assert_eq('result_set_queries', $info, $expected,
$test_counter);
+ mysqli_get_client_stats_assert_eq('ps_buffered_sets', $info, $expected, $test_counter);
+
+ mysqli_stmt_free_result($stmt);
+
+ print "Testing buffered Prepared Statements... - fetching all but one\n";
+
+ if (!mysqli_stmt_prepare($stmt, 'SELECT id, label FROM test') ||
+ !mysqli_stmt_execute($stmt))
+ printf("[%03d] prepare/execute failed, [%d] %s\n",
+ ++$test_counter, mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
+
+ $id = $label = null;
+ if (!mysqli_stmt_bind_result($stmt, $id, $label))
+ printf("[%03d] bind_result failed, [%d] %s\n",
+ ++$test_counter, mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
+
+ if (!mysqli_stmt_store_result($stmt))
+ printf("[%03d] store_result failed, [%d] %s\n",
+ ++$test_counter, mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
+
+ for ($i = 0; $i < $num_rows - 1; $i++)
+ mysqli_stmt_fetch($stmt);
+
+ $expected['rows_fetched_from_server_ps'] =
(string)($expected['rows_fetched_from_server_ps'] + $num_rows);
+ $expected['rows_fetched_from_client_ps_buffered'] =
(string)($expected['rows_fetched_from_client_ps_buffered'] + $num_rows);
+ $expected['result_set_queries'] = (string)($expected['result_set_queries'] + 1);
+ $expected['ps_buffered_sets'] = (string)($expected['ps_buffered_sets'] + 1);
+
+ if (!is_array($info = mysqli_get_client_stats()) || empty($info))
+ printf("[%03d] Expecting array/any_non_empty, got %s/%s\n",
+ ++$test_counter, gettype($info), $info);
+
+ mysqli_get_client_stats_assert_eq('rows_fetched_from_server_ps', $info, $expected,
$test_counter);
+ mysqli_get_client_stats_assert_eq('rows_fetched_from_client_ps_buffered', $info,
$expected, $test_counter);
+ mysqli_get_client_stats_assert_eq('result_set_queries', $info, $expected,
$test_counter);
+ mysqli_get_client_stats_assert_eq('ps_buffered_sets', $info, $expected, $test_counter);
+
+ $expected['rows_skipped_ps'] = $info['rows_skipped_ps'];
+ mysqli_stmt_free_result($stmt);
+
+ if (!is_array($info = mysqli_get_client_stats()) || empty($info))
+ printf("[%03d] Expecting array/any_non_empty, got %s/%s\n",
+ ++$test_counter, gettype($info), $info);
+
+ /* buffered result set - no skipping possible! */
+ mysqli_get_client_stats_assert_eq('rows_skipped_ps', $info, $expected, $test_counter);
+
+ print "Testing unbuffered Prepared Statements... - fetching all\n";
+
+ if (!mysqli_stmt_prepare($stmt, 'SELECT id, label FROM test') ||
+ !mysqli_stmt_execute($stmt))
+ printf("[%03d] prepare/execute failed, [%d] %s\n",
+ ++$test_counter, mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
+
+ $id = $label = null;
+ if (!mysqli_stmt_bind_result($stmt, $id, $label))
+ printf("[%03d] bind_result failed, [%d] %s\n",
+ ++$test_counter, mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
+
+ while (mysqli_stmt_fetch($stmt))
+ ;
+
+ $expected['rows_fetched_from_server_ps'] =
(string)($expected['rows_fetched_from_server_ps'] + $num_rows);
+ $expected['rows_fetched_from_client_ps_unbuffered'] =
(string)($expected['rows_fetched_from_client_ps_unbuffered'] + $num_rows);
+ $expected['result_set_queries'] = (string)($expected['result_set_queries'] + 1);
+ $expected['ps_unbuffered_sets'] = (string)($expected['ps_unbuffered_sets'] + 1);
+
+ if (!is_array($info = mysqli_get_client_stats()) || empty($info))
+ printf("[%03d] Expecting array/any_non_empty, got %s/%s\n",
+ ++$test_counter, gettype($info), $info);
+
+ mysqli_get_client_stats_assert_eq('rows_fetched_from_server_ps', $info, $expected,
$test_counter);
mysqli_get_client_stats_assert_eq('rows_fetched_from_client_ps_unbuffered', $info,
$expected, $test_counter);
- mysqli_get_client_stats_assert_eq('rows_fetched_from_client_ps_cursor', $info,
$expected, $test_counter);
- mysqli_get_client_stats_assert_eq('rows_skipped_normal', $info, $expected,
$test_counter);
+ mysqli_get_client_stats_assert_eq('result_set_queries', $info, $expected,
$test_counter);
+ mysqli_get_client_stats_assert_eq('ps_unbuffered_sets', $info, $expected,
$test_counter);
+ mysqli_stmt_free_result($stmt);
+
+ print "Testing unbuffered Prepared Statements... - fetching all but one\n";
+
+ if (!mysqli_stmt_prepare($stmt, 'SELECT id, label FROM test') ||
+ !mysqli_stmt_execute($stmt))
+ printf("[%03d] prepare/execute failed, [%d] %s\n",
+ ++$test_counter, mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
+
+ $id = $label = null;
+ if (!mysqli_stmt_bind_result($stmt, $id, $label))
+ printf("[%03d] bind_result failed, [%d] %s\n",
+ ++$test_counter, mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
+
+ for ($i = 0; $i < $num_rows - 1; $i++)
+ mysqli_stmt_fetch($stmt);
+
+ $expected['rows_fetched_from_server_ps'] =
(string)($expected['rows_fetched_from_server_ps'] + $num_rows - 1);
+ $expected['rows_fetched_from_client_ps_unbuffered'] =
(string)($expected['rows_fetched_from_client_ps_unbuffered'] + $num_rows - 1);
+ $expected['result_set_queries'] = (string)($expected['result_set_queries'] + 1);
+ $expected['ps_unbuffered_sets'] = (string)($expected['ps_unbuffered_sets'] + 1);
+
+ if (!is_array($info = mysqli_get_client_stats()) || empty($info))
+ printf("[%03d] Expecting array/any_non_empty, got %s/%s\n",
+ ++$test_counter, gettype($info), $info);
+
+ mysqli_get_client_stats_assert_eq('rows_fetched_from_server_ps', $info, $expected,
$test_counter);
+ mysqli_get_client_stats_assert_eq('rows_fetched_from_client_ps_unbuffered', $info,
$expected, $test_counter);
+ mysqli_get_client_stats_assert_eq('result_set_queries', $info, $expected,
$test_counter);
+ mysqli_get_client_stats_assert_eq('ps_unbuffered_sets', $info, $expected,
$test_counter);
+
+ $expected['rows_skipped_ps'] = $info['rows_skipped_ps'] + 1;
+ $expected['flushed_ps_sets'] = (string)($expected['flushed_ps_sets'] + 1);
+ mysqli_stmt_free_result($stmt);
+
+ if (!is_array($info = mysqli_get_client_stats()) || empty($info))
+ printf("[%03d] Expecting array/any_non_empty, got %s/%s\n",
+ ++$test_counter, gettype($info), $info);
+
+ mysqli_get_client_stats_assert_eq('rows_skipped_ps', $info, $expected, $test_counter);
+ mysqli_get_client_stats_assert_eq('flushed_ps_sets', $info, $expected, $test_counter);
+
+/*
+ print "Checking for normal buffered side effects...\n";
+ foreach ($info as $k => $v)
+ if ($info[$k] != $expected[$k])
+ printf("$k - $v != %s\n", $expected[$k]);
+*/
+
+ print "... done with fetch statistics\n";
+
+ if (!is_array($info = mysqli_get_client_stats()) || empty($info))
+ printf("[%03d] Expecting array/any_non_empty, got %s/%s\n",
+ ++$test_counter, gettype($info), $info);
+
//
// result_set_queries statistics
//
@@ -697,7 +961,15 @@
}
Testing buffered normal...
Testing buffered normal... - SELECT id, label FROM test
-Checking for normal buffered side effects...
+Testing unbuffered normal...
+Testing unbuffered normal... - SELECT id, label FROM test, not all fetched
+Testing if implicit fetching and cleaning happens...
+Testing buffered Prepared Statements...
+Testing buffered Prepared Statements... - fetching all
+Testing buffered Prepared Statements... - fetching all but one
+Testing unbuffered Prepared Statements... - fetching all
+Testing unbuffered Prepared Statements... - fetching all but one
+... done with fetch statistics
done!
--UEXPECTF--
array(57) {
@@ -818,5 +1090,13 @@
}
Testing buffered normal...
Testing buffered normal... - SELECT id, label FROM test
-Checking for normal buffered side effects...
+Testing unbuffered normal...
+Testing unbuffered normal... - SELECT id, label FROM test, not all fetched
+Testing if implicit fetching and cleaning happens...
+Testing buffered Prepared Statements...
+Testing buffered Prepared Statements... - fetching all
+Testing buffered Prepared Statements... - fetching all but one
+Testing unbuffered Prepared Statements... - fetching all
+Testing unbuffered Prepared Statements... - fetching all but one
+... done with fetch statistics
done!
\ No newline at end of file
| Thread |
|---|
| • PHP mysqlnd svn commit: r1001 - trunk/tests/ext/mysqli | uwendel | 6 Sep |