PageRenderTime 56ms CodeModel.GetById 18ms RepoModel.GetById 0ms app.codeStats 0ms

/hphp/test/zend/bad/ext/mysqli/tests/mysqli_get_client_stats.php

http://github.com/facebook/hiphop-php
PHP | 940 lines | 656 code | 199 blank | 85 comment | 185 complexity | 91b13b44b3ed7d4223f4688369da301e MD5 | raw file
Possible License(s): LGPL-2.1, BSD-2-Clause, BSD-3-Clause, MPL-2.0-no-copyleft-exception, MIT, LGPL-2.0, Apache-2.0
  1. <?php
  2. /*
  3. TODO
  4. no_index_used - difficult to simulate because server/engine dependent
  5. bad_index_used - difficult to simulate because server/engine dependent
  6. flushed_normal_sets
  7. flushed_ps_sets
  8. explicit_close
  9. implicit_close
  10. disconnect_close
  11. in_middle_of_command_close
  12. explicit_free_result
  13. implicit_free_result
  14. explicit_stmt_close
  15. implicit_stmt_close
  16. */
  17. function mysqli_get_client_stats_assert_eq($field, $current, $expected, &$test_counter, $desc = "") {
  18. $test_counter++;
  19. if (is_array($current) && is_array($expected)) {
  20. if ($current[$field] !== $expected[$field]) {
  21. printf("[%03d] %s Expecting %s = %s/%s, got %s/%s\n",
  22. $test_counter, $desc,
  23. $field, $expected[$field], gettype($expected[$field]),
  24. $current[$field], gettype($current[$field]));
  25. }
  26. } else if (is_array($current)) {
  27. if ($current[$field] !== $expected) {
  28. printf("[%03d] %s Expecting %s = %s/%s, got %s/%s\n",
  29. $test_counter, $desc,
  30. $field, $expected, gettype($expected),
  31. $current[$field], gettype($current[$field]));
  32. }
  33. } else {
  34. if ($current !== $expected) {
  35. printf("[%03d] %s Expecting %s = %s/%s, got %s/%s\n",
  36. $test_counter, $desc,
  37. $field, $expected, gettype($expected),
  38. $current, gettype($current));
  39. }
  40. }
  41. }
  42. function mysqli_get_client_stats_assert_gt($field, $current, $expected, &$test_counter, $desc = "") {
  43. $test_counter++;
  44. if (is_array($current) && is_array($expected)) {
  45. if ($current[$field] <= $expected[$field]) {
  46. printf("[%03d] %s Expecting %s > %s/%s, got %s/%s\n",
  47. $test_counter, $desc,
  48. $field, $expected[$field], gettype($expected[$field]),
  49. $current[$field], gettype($current[$field]));
  50. }
  51. } else {
  52. if ($current <= $expected) {
  53. printf("[%03d] %s Expecting %s > %s/%s, got %s/%s\n",
  54. $test_counter, $desc, $field,
  55. $expected, gettype($expected),
  56. $current, gettype($current));
  57. }
  58. }
  59. }
  60. $tmp = $link = null;
  61. require_once("connect.inc");
  62. if (!is_array($info = mysqli_get_client_stats()) || empty($info))
  63. printf("[002] Expecting array/any_non_empty, got %s/%s\n", gettype($info), $info);
  64. var_dump($info);
  65. if (!$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket)) {
  66. printf("[003] Cannot connect to the server using host=%s, user=%s, passwd=***, dbname=%s, port=%s, socket=%s\n",
  67. $host, $user, $db, $port, $socket);
  68. exit(1);
  69. }
  70. if (!is_array($new_info = mysqli_get_client_stats()) || empty($new_info))
  71. printf("[004] Expecting array/any_non_empty, got %s/%s\n", gettype($new_info), $new_info);
  72. if (count($info) != count($new_info)) {
  73. printf("[005] Expecting the same number of entries in the arrays\n");
  74. var_dump($info);
  75. var_dump($new_info);
  76. }
  77. $test_counter = 6;
  78. mysqli_get_client_stats_assert_gt('bytes_sent', $new_info, $info, $test_counter);
  79. mysqli_get_client_stats_assert_gt('bytes_received', $new_info, $info, $test_counter);
  80. mysqli_get_client_stats_assert_gt('packets_sent', $new_info, $info, $test_counter);
  81. mysqli_get_client_stats_assert_gt('packets_received', $new_info, $info, $test_counter);
  82. mysqli_get_client_stats_assert_gt('protocol_overhead_in', $new_info, $info, $test_counter);
  83. mysqli_get_client_stats_assert_gt('protocol_overhead_out', $new_info, $info, $test_counter);
  84. // we assume the above as test_mysqli_get_client_stats_table_1ed and in the following we check only those
  85. mysqli_get_client_stats_assert_eq('result_set_queries', $new_info, $info, $test_counter);
  86. /* we need to skip this test_mysqli_get_client_stats_table_1 in unicode - we send set names utf8 during mysql_connect */
  87. if (!(version_compare(PHP_VERSION, '5.9.9', '>') == 1))
  88. mysqli_get_client_stats_assert_eq('non_result_set_queries', $new_info, $info, $test_counter);
  89. mysqli_get_client_stats_assert_eq('buffered_sets', $new_info, $info, $test_counter);
  90. mysqli_get_client_stats_assert_eq('unbuffered_sets', $new_info, $info, $test_counter);
  91. mysqli_get_client_stats_assert_eq('ps_buffered_sets', $new_info, $info, $test_counter);
  92. mysqli_get_client_stats_assert_eq('ps_unbuffered_sets', $new_info, $info, $test_counter);
  93. mysqli_get_client_stats_assert_eq('rows_skipped_ps', $new_info, $info, $test_counter);
  94. mysqli_get_client_stats_assert_eq('copy_on_write_saved', $new_info, $info, $test_counter);
  95. mysqli_get_client_stats_assert_eq('copy_on_write_performed', $new_info, $info, $test_counter);
  96. mysqli_get_client_stats_assert_eq('command_buffer_too_small', $new_info, $info, $test_counter);
  97. // This is not a mistake that I use %unicode|string%(1) "1" here! Andrey did not go for int to avoid any
  98. // issues for very large numbers and 32 vs. 64bit systems
  99. mysqli_get_client_stats_assert_eq('connect_success', $new_info, "1", $test_counter);
  100. mysqli_get_client_stats_assert_eq('connect_failure', $new_info, $info, $test_counter);
  101. mysqli_get_client_stats_assert_eq('connection_reused', $new_info, $info, $test_counter);
  102. // No data fetched so far
  103. mysqli_get_client_stats_assert_eq('bytes_received_real_data_normal', $new_info, "0", $test_counter);
  104. mysqli_get_client_stats_assert_eq('bytes_received_real_data_ps', $new_info, "0", $test_counter);
  105. $test_table_name = 'test_mysqli_get_client_stats_table_1'; require('table.inc');
  106. if (!is_array($info = mysqli_get_client_stats()) || empty($info))
  107. printf("[%03d] Expecting array/any_non_empty, got %s/%s\n",
  108. ++$test_counter, gettype($info), $info);
  109. // fetch stats
  110. $expected = $info;
  111. // buffered normal
  112. print "Testing buffered normal...\n";
  113. if (!$res = mysqli_query($link, 'SELECT COUNT(*) AS _num FROM test_mysqli_get_client_stats_table_1', MYSQLI_STORE_RESULT))
  114. printf("[%03d] SELECT COUNT() FROM test_mysqli_get_client_stats_table_1 failed, [%d] %s\n",
  115. ++$test_counter, mysqli_errno($link), mysqli_error($link));
  116. $expected['rows_fetched_from_server_normal'] = (string)($expected['rows_fetched_from_server_normal'] + 1);
  117. $expected['buffered_sets'] = (string)($expected['buffered_sets'] + 1);
  118. $expected['result_set_queries'] = (string)($expected['result_set_queries'] + 1);
  119. $expected['rows_buffered_from_client_normal'] = (string)($expected['rows_buffered_from_client_normal'] + 1);
  120. if (!is_array($info = mysqli_get_client_stats()) || empty($info))
  121. printf("[%03d] Expecting array/any_non_empty, got %s/%s\n",
  122. ++$test_counter, gettype($info), $info);
  123. mysqli_get_client_stats_assert_gt('bytes_sent', $info, $expected, $test_counter);
  124. mysqli_get_client_stats_assert_gt('bytes_received', $info, $expected, $test_counter);
  125. // real_data_* get incremented after mysqli_*fetch*()
  126. mysqli_get_client_stats_assert_eq('bytes_received_real_data_normal', $info, "0", $test_counter);
  127. mysqli_get_client_stats_assert_eq('bytes_received_real_data_ps', $info, "0", $test_counter);
  128. mysqli_get_client_stats_assert_eq('rows_fetched_from_server_normal', $info, $expected, $test_counter);
  129. mysqli_get_client_stats_assert_eq('rows_fetched_from_client_normal_buffered', $info, $expected, $test_counter);
  130. mysqli_get_client_stats_assert_eq('buffered_sets', $info, $expected, $test_counter);
  131. mysqli_get_client_stats_assert_eq('result_set_queries', $info, $expected, $test_counter);
  132. mysqli_get_client_stats_assert_eq('rows_buffered_from_client_normal', $info, $expected, $test_counter);
  133. /* no change to rows_fetched_from_client_normal_buffered! */
  134. if (!$row = mysqli_fetch_assoc($res))
  135. printf("[%03d] fetch_assoc - SELECT COUNT() FROM test_mysqli_get_client_stats_table_1 failed, [%d] %s\n",
  136. ++$test_counter, mysqli_errno($link), mysqli_error($link));
  137. $expected['rows_fetched_from_client_normal_buffered'] = (string)($expected['rows_fetched_from_client_normal_buffered'] + 1);
  138. if (!is_array($info = mysqli_get_client_stats()) || empty($info))
  139. printf("[%03d] Expecting array/any_non_empty, got %s/%s\n",
  140. ++$test_counter, gettype($info), $info);
  141. // fetch will increment
  142. mysqli_get_client_stats_assert_gt('bytes_received_real_data_normal', $info, $expected, $test_counter);
  143. $expected['bytes_received_real_data_normal'] = $info['bytes_received_real_data_normal'];
  144. mysqli_get_client_stats_assert_eq('bytes_received_real_data_ps', $info, "0", $test_counter);
  145. mysqli_get_client_stats_assert_eq('rows_fetched_from_server_normal', $info, $expected, $test_counter);
  146. mysqli_get_client_stats_assert_eq('rows_fetched_from_client_normal_buffered', $info, $expected, $test_counter);
  147. mysqli_get_client_stats_assert_eq('rows_buffered_from_client_normal', $info, $expected, $test_counter);
  148. $num_rows = $row['_num'];
  149. mysqli_free_result($res);
  150. print "Testing buffered normal... - SELECT id, label FROM test_mysqli_get_client_stats_table_1\n";
  151. if (!$res = mysqli_query($link, 'SELECT id, label FROM test_mysqli_get_client_stats_table_1', MYSQLI_STORE_RESULT))
  152. printf("[%03d] SELECT id, label FROM test_mysqli_get_client_stats_table_1 failed, [%d] %s\n",
  153. ++$test_counter, mysqli_errno($link), mysqli_error($link));
  154. assert(mysqli_num_rows($res) == $num_rows);
  155. if (!is_array($info = mysqli_get_client_stats()) || empty($info))
  156. printf("[%03d] Expecting array/any_non_empty, got %s/%s\n",
  157. ++$test_counter, gettype($info), $info);
  158. $expected['rows_fetched_from_server_normal'] = (string)($expected['rows_fetched_from_server_normal'] + $num_rows);
  159. $expected['rows_buffered_from_client_normal'] = (string)($expected['rows_buffered_from_client_normal'] + $num_rows);
  160. $expected['buffered_sets'] = (string)($expected['buffered_sets'] + 1);
  161. $expected['result_set_queries'] = (string)($expected['result_set_queries'] + 1);
  162. mysqli_get_client_stats_assert_eq('bytes_received_real_data_normal', $info, $expected, $test_counter);
  163. mysqli_get_client_stats_assert_eq('rows_fetched_from_server_normal', $info, $expected, $test_counter);
  164. mysqli_get_client_stats_assert_eq('rows_fetched_from_client_normal_buffered', $info, $expected, $test_counter);
  165. mysqli_get_client_stats_assert_eq('buffered_sets', $info, $expected, $test_counter);
  166. mysqli_get_client_stats_assert_eq('result_set_queries', $info, $expected, $test_counter);
  167. mysqli_get_client_stats_assert_eq('rows_buffered_from_client_normal', $info, $expected, $test_counter);
  168. mysqli_get_client_stats_assert_eq('rows_buffered_from_client_normal', $info, $expected, $test_counter);
  169. /* fetching none, but stats should not be affected - current implementation */
  170. mysqli_free_result($res);
  171. if (!is_array($info = mysqli_get_client_stats()) || empty($info))
  172. printf("[%03d] Expecting array/any_non_empty, got %s/%s\n",
  173. ++$test_counter, gettype($info), $info);
  174. mysqli_get_client_stats_assert_eq('bytes_received_real_data_normal', $info, $expected, $test_counter);
  175. mysqli_get_client_stats_assert_eq('rows_fetched_from_server_normal', $info, $expected, $test_counter);
  176. mysqli_get_client_stats_assert_eq('rows_fetched_from_client_normal_buffered', $info, $expected, $test_counter);
  177. print "Testing unbuffered normal...\n";
  178. if (!$res = mysqli_query($link, 'SELECT id, label FROM test_mysqli_get_client_stats_table_1', MYSQLI_USE_RESULT))
  179. printf("[%03d] SELECT id, label FROM test_mysqli_get_client_stats_table_1 failed, [%d] %s\n",
  180. ++$test_counter, mysqli_errno($link), mysqli_error($link));
  181. if (!is_array($info = mysqli_get_client_stats()) || empty($info))
  182. printf("[%03d] Expecting array/any_non_empty, got %s/%s\n",
  183. ++$test_counter, gettype($info), $info);
  184. mysqli_get_client_stats_assert_eq('rows_fetched_from_server_normal', $info, $expected, $test_counter);
  185. mysqli_get_client_stats_assert_eq('rows_fetched_from_client_normal_unbuffered', $info, $expected, $test_counter);
  186. mysqli_get_client_stats_assert_eq('bytes_received_real_data_normal', $info, $expected, $test_counter);
  187. while ($row = mysqli_fetch_assoc($res))
  188. ;
  189. mysqli_free_result($res);
  190. $expected['rows_fetched_from_server_normal'] = (string)($expected['rows_fetched_from_server_normal'] + $num_rows);
  191. $expected['rows_fetched_from_client_normal_unbuffered'] = (string)($expected['rows_fetched_from_client_normal_unbuffered'] + $num_rows);
  192. $expected['unbuffered_sets'] = (string)($expected['unbuffered_sets'] + 1);
  193. $expected['result_set_queries'] = (string)($expected['result_set_queries'] + 1);
  194. if (!is_array($info = mysqli_get_client_stats()) || empty($info))
  195. printf("[%03d] Expecting array/any_non_empty, got %s/%s\n",
  196. ++$test_counter, gettype($info), $info);
  197. mysqli_get_client_stats_assert_gt('bytes_received_real_data_normal', $info, $expected, $test_counter);
  198. $expected['bytes_received_real_data_normal'] = $info['bytes_received_real_data_normal'];
  199. mysqli_get_client_stats_assert_eq('rows_fetched_from_server_normal', $info, $expected, $test_counter);
  200. mysqli_get_client_stats_assert_eq('rows_fetched_from_client_normal_unbuffered', $info, $expected, $test_counter);
  201. mysqli_get_client_stats_assert_eq('unbuffered_sets', $info, $expected, $test_counter);
  202. mysqli_get_client_stats_assert_eq('result_set_queries', $info, $expected, $test_counter);
  203. print "Testing unbuffered normal... - SELECT id, label FROM test_mysqli_get_client_stats_table_1, not all fetched\n";
  204. if (!$res = mysqli_query($link, 'SELECT id, label FROM test_mysqli_get_client_stats_table_1', MYSQLI_USE_RESULT))
  205. printf("[%03d] SELECT id, label FROM test_mysqli_get_client_stats_table_1 failed, [%d] %s\n",
  206. ++$test_counter, mysqli_errno($link), mysqli_error($link));
  207. for ($i = 0; $i < $num_rows - 1; $i++)
  208. $row = mysqli_fetch_assoc($res);
  209. $expected['rows_fetched_from_server_normal'] = (string)($expected['rows_fetched_from_server_normal'] + $num_rows - 1);
  210. $expected['rows_fetched_from_client_normal_unbuffered'] = (string)($expected['rows_fetched_from_client_normal_unbuffered'] + $num_rows - 1);
  211. $expected['unbuffered_sets'] = (string)($expected['unbuffered_sets'] + 1);
  212. $expected['result_set_queries'] = (string)($expected['result_set_queries'] + 1);
  213. if (!is_array($info = mysqli_get_client_stats()) || empty($info))
  214. printf("[%03d] Expecting array/any_non_empty, got %s/%s\n",
  215. ++$test_counter, gettype($info), $info);
  216. mysqli_get_client_stats_assert_gt('bytes_received_real_data_normal', $info, $expected, $test_counter);
  217. $expected['bytes_received_real_data_normal'] = $info['bytes_received_real_data_normal'];
  218. mysqli_get_client_stats_assert_eq('rows_fetched_from_server_normal', $info, $expected, $test_counter);
  219. mysqli_get_client_stats_assert_eq('rows_fetched_from_client_normal_unbuffered', $info, $expected, $test_counter);
  220. mysqli_get_client_stats_assert_eq('unbuffered_sets', $info, $expected, $test_counter);
  221. mysqli_get_client_stats_assert_eq('result_set_queries', $info, $expected, $test_counter);
  222. print "Testing if implicit fetching and cleaning happens...\n";
  223. mysqli_free_result($res);
  224. /* last row has been implicitly cleaned from the wire by freeing the result set */
  225. $expected['rows_fetched_from_server_normal'] = (string)($expected['rows_fetched_from_server_normal'] + 1);
  226. $expected['rows_fetched_from_client_normal_unbuffered'] = (string)($expected['rows_fetched_from_client_normal_unbuffered'] + 1);
  227. $expected['rows_skipped_normal'] = (string)($info['rows_skipped_normal'] + 1);
  228. $expected['flushed_normal_sets'] = (string)($expected['flushed_normal_sets'] + 1);
  229. if (!is_array($info = mysqli_get_client_stats()) || empty($info))
  230. printf("[%03d] Expecting array/any_non_empty, got %s/%s\n",
  231. ++$test_counter, gettype($info), $info);
  232. mysqli_get_client_stats_assert_eq('bytes_received_real_data_normal', $info, $expected, $test_counter);
  233. mysqli_get_client_stats_assert_eq('rows_fetched_from_server_normal', $info, $expected, $test_counter);
  234. mysqli_get_client_stats_assert_eq('rows_fetched_from_client_normal_unbuffered', $info, $expected, $test_counter);
  235. mysqli_get_client_stats_assert_eq('rows_skipped_normal', $info, $expected, $test_counter);
  236. mysqli_get_client_stats_assert_eq('flushed_normal_sets', $info, $expected, $test_counter);
  237. print "Testing buffered Prepared Statements...\n";
  238. if (!$stmt = mysqli_stmt_init($link))
  239. printf("[%03d] stmt_init() failed, [%d] %s\n",
  240. ++$test_counter, mysqli_errno($link), mysqli_error($link));
  241. if (!mysqli_stmt_prepare($stmt, 'SELECT id, label FROM test_mysqli_get_client_stats_table_1') ||
  242. !mysqli_stmt_execute($stmt))
  243. printf("[%03d] prepare/execute failed, [%d] %s\n",
  244. ++$test_counter, mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
  245. /* by default PS is unbuffered - no change */
  246. mysqli_get_client_stats_assert_eq('rows_fetched_from_server_ps', $info, $expected, $test_counter);
  247. mysqli_get_client_stats_assert_eq('rows_fetched_from_client_ps_buffered', $info, $expected, $test_counter);
  248. if (!mysqli_stmt_store_result($stmt))
  249. printf("[%03d] store_result failed, [%d] %s\n",
  250. ++$test_counter, mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
  251. mysqli_stmt_free_result($stmt);
  252. mysqli_get_client_stats_assert_eq('bytes_received_real_data_ps', $info, "0", $test_counter);
  253. mysqli_get_client_stats_assert_eq('bytes_received_real_data_normal', $info, $expected, $test_counter);
  254. $expected['rows_fetched_from_server_ps'] = (string)($expected['rows_fetched_from_server_ps'] + $num_rows);
  255. $expected['result_set_queries'] = (string)($expected['result_set_queries'] + 1);
  256. $expected['ps_buffered_sets'] = (string)($expected['ps_buffered_sets'] + 1);
  257. $expected['rows_buffered_from_client_ps'] = (string)($expected['rows_buffered_from_client_ps'] + $num_rows);
  258. if (!is_array($info = mysqli_get_client_stats()) || empty($info))
  259. printf("[%03d] Expecting array/any_non_empty, got %s/%s\n",
  260. ++$test_counter, gettype($info), $info);
  261. mysqli_get_client_stats_assert_eq('rows_fetched_from_server_ps', $info, $expected, $test_counter);
  262. mysqli_get_client_stats_assert_eq('rows_fetched_from_client_ps_buffered', $info, $expected, $test_counter);
  263. mysqli_get_client_stats_assert_eq('result_set_queries', $info, $expected, $test_counter);
  264. mysqli_get_client_stats_assert_eq('ps_buffered_sets', $info, $expected, $test_counter);
  265. mysqli_get_client_stats_assert_eq('rows_buffered_from_client_ps', $info, $expected, $test_counter);
  266. mysqli_get_client_stats_assert_eq('bytes_received_real_data_ps', $info, "0", $test_counter);
  267. print "Testing buffered Prepared Statements... - fetching all\n";
  268. if (!mysqli_stmt_prepare($stmt, 'SELECT id, label FROM test_mysqli_get_client_stats_table_1') ||
  269. !mysqli_stmt_execute($stmt))
  270. printf("[%03d] prepare/execute failed, [%d] %s\n",
  271. ++$test_counter, mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
  272. $id = $label = null;
  273. if (!mysqli_stmt_bind_result($stmt, $id, $label))
  274. printf("[%03d] bind_result failed, [%d] %s\n",
  275. ++$test_counter, mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
  276. if (!mysqli_stmt_store_result($stmt))
  277. printf("[%03d] store_result failed, [%d] %s\n",
  278. ++$test_counter, mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
  279. while (mysqli_stmt_fetch($stmt))
  280. ;
  281. $expected['rows_fetched_from_server_ps'] = (string)($expected['rows_fetched_from_server_ps'] + $num_rows);
  282. $expected['rows_fetched_from_client_ps_buffered'] = (string)($expected['rows_fetched_from_client_ps_buffered'] + $num_rows);
  283. $expected['result_set_queries'] = (string)($expected['result_set_queries'] + 1);
  284. $expected['ps_buffered_sets'] = (string)($expected['ps_buffered_sets'] + 1);
  285. $expected['rows_buffered_from_client_ps'] = (string)($expected['rows_buffered_from_client_ps'] + $num_rows);
  286. if (!is_array($info = mysqli_get_client_stats()) || empty($info))
  287. printf("[%03d] Expecting array/any_non_empty, got %s/%s\n",
  288. ++$test_counter, gettype($info), $info);
  289. mysqli_get_client_stats_assert_gt('bytes_received_real_data_ps', $info, $expected, $test_counter);
  290. $expected['bytes_received_real_data_ps'] = $info['bytes_received_real_data_ps'];
  291. mysqli_get_client_stats_assert_eq('rows_fetched_from_server_ps', $info, $expected, $test_counter);
  292. mysqli_get_client_stats_assert_eq('rows_fetched_from_client_ps_buffered', $info, $expected, $test_counter);
  293. mysqli_get_client_stats_assert_eq('result_set_queries', $info, $expected, $test_counter);
  294. mysqli_get_client_stats_assert_eq('ps_buffered_sets', $info, $expected, $test_counter);
  295. mysqli_get_client_stats_assert_eq('rows_buffered_from_client_ps', $info, $expected, $test_counter);
  296. mysqli_stmt_free_result($stmt);
  297. print "Testing buffered Prepared Statements... - fetching all but one\n";
  298. if (!mysqli_stmt_prepare($stmt, 'SELECT id, label FROM test_mysqli_get_client_stats_table_1') ||
  299. !mysqli_stmt_execute($stmt))
  300. printf("[%03d] prepare/execute failed, [%d] %s\n",
  301. ++$test_counter, mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
  302. $id = $label = null;
  303. if (!mysqli_stmt_bind_result($stmt, $id, $label))
  304. printf("[%03d] bind_result failed, [%d] %s\n",
  305. ++$test_counter, mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
  306. if (!mysqli_stmt_store_result($stmt))
  307. printf("[%03d] store_result failed, [%d] %s\n",
  308. ++$test_counter, mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
  309. for ($i = 0; $i < $num_rows - 1; $i++)
  310. mysqli_stmt_fetch($stmt);
  311. $expected['rows_fetched_from_server_ps'] = (string)($expected['rows_fetched_from_server_ps'] + $num_rows);
  312. $expected['rows_fetched_from_client_ps_buffered'] = (string)($expected['rows_fetched_from_client_ps_buffered'] + $num_rows - 1);
  313. $expected['result_set_queries'] = (string)($expected['result_set_queries'] + 1);
  314. $expected['ps_buffered_sets'] = (string)($expected['ps_buffered_sets'] + 1);
  315. $expected['rows_buffered_from_client_ps'] = (string)($expected['rows_buffered_from_client_ps'] + $num_rows);
  316. if (!is_array($info = mysqli_get_client_stats()) || empty($info))
  317. printf("[%03d] Expecting array/any_non_empty, got %s/%s\n",
  318. ++$test_counter, gettype($info), $info);
  319. mysqli_get_client_stats_assert_gt('bytes_received_real_data_ps', $info, $expected, $test_counter);
  320. $expected['bytes_received_real_data_ps'] = $info['bytes_received_real_data_ps'];
  321. mysqli_get_client_stats_assert_eq('rows_fetched_from_server_ps', $info, $expected, $test_counter);
  322. mysqli_get_client_stats_assert_eq('rows_fetched_from_client_ps_buffered', $info, $expected, $test_counter);
  323. mysqli_get_client_stats_assert_eq('result_set_queries', $info, $expected, $test_counter);
  324. mysqli_get_client_stats_assert_eq('ps_buffered_sets', $info, $expected, $test_counter);
  325. mysqli_get_client_stats_assert_eq('rows_buffered_from_client_ps', $info, $expected, $test_counter);
  326. $expected['rows_skipped_ps'] = $info['rows_skipped_ps'];
  327. mysqli_stmt_free_result($stmt);
  328. if (!is_array($info = mysqli_get_client_stats()) || empty($info))
  329. printf("[%03d] Expecting array/any_non_empty, got %s/%s\n",
  330. ++$test_counter, gettype($info), $info);
  331. /* buffered result set - no skipping possible! */
  332. mysqli_get_client_stats_assert_eq('rows_skipped_ps', $info, $expected, $test_counter);
  333. print "Testing unbuffered Prepared Statements... - fetching all\n";
  334. if (!mysqli_stmt_prepare($stmt, 'SELECT id, label FROM test_mysqli_get_client_stats_table_1') ||
  335. !mysqli_stmt_execute($stmt))
  336. printf("[%03d] prepare/execute failed, [%d] %s\n",
  337. ++$test_counter, mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
  338. $id = $label = null;
  339. if (!mysqli_stmt_bind_result($stmt, $id, $label))
  340. printf("[%03d] bind_result failed, [%d] %s\n",
  341. ++$test_counter, mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
  342. $i = 0;
  343. while (mysqli_stmt_fetch($stmt))
  344. $i++;
  345. assert($num_rows = $i);
  346. $expected['rows_fetched_from_server_ps'] = (string)($expected['rows_fetched_from_server_ps'] + $num_rows);
  347. $expected['rows_fetched_from_client_ps_unbuffered'] = (string)($expected['rows_fetched_from_client_ps_unbuffered'] + $num_rows);
  348. $expected['result_set_queries'] = (string)($expected['result_set_queries'] + 1);
  349. $expected['ps_unbuffered_sets'] = (string)($expected['ps_unbuffered_sets'] + 1);
  350. if (!is_array($info = mysqli_get_client_stats()) || empty($info))
  351. printf("[%03d] Expecting array/any_non_empty, got %s/%s\n",
  352. ++$test_counter, gettype($info), $info);
  353. mysqli_get_client_stats_assert_gt('bytes_received_real_data_ps', $info, $expected, $test_counter);
  354. $expected['bytes_received_real_data_ps'] = $info['bytes_received_real_data_ps'];
  355. mysqli_get_client_stats_assert_eq('rows_fetched_from_server_ps', $info, $expected, $test_counter);
  356. mysqli_get_client_stats_assert_eq('rows_fetched_from_client_ps_unbuffered', $info, $expected, $test_counter);
  357. mysqli_get_client_stats_assert_eq('result_set_queries', $info, $expected, $test_counter);
  358. mysqli_get_client_stats_assert_eq('ps_unbuffered_sets', $info, $expected, $test_counter);
  359. mysqli_get_client_stats_assert_eq('rows_buffered_from_client_ps', $info, $expected, $test_counter);
  360. mysqli_stmt_free_result($stmt);
  361. print "Testing unbuffered Prepared Statements... - fetching all but one\n";
  362. if (!mysqli_stmt_prepare($stmt, 'SELECT id, label FROM test_mysqli_get_client_stats_table_1') ||
  363. !mysqli_stmt_execute($stmt))
  364. printf("[%03d] prepare/execute failed, [%d] %s\n",
  365. ++$test_counter, mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
  366. $id = $label = null;
  367. if (!mysqli_stmt_bind_result($stmt, $id, $label))
  368. printf("[%03d] bind_result failed, [%d] %s\n",
  369. ++$test_counter, mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
  370. for ($i = 0; $i < $num_rows - 1; $i++)
  371. mysqli_stmt_fetch($stmt);
  372. $expected['rows_fetched_from_server_ps'] = (string)($expected['rows_fetched_from_server_ps'] + $num_rows - 1);
  373. $expected['rows_fetched_from_client_ps_unbuffered'] = (string)($expected['rows_fetched_from_client_ps_unbuffered'] + $num_rows - 1);
  374. $expected['result_set_queries'] = (string)($expected['result_set_queries'] + 1);
  375. $expected['ps_unbuffered_sets'] = (string)($expected['ps_unbuffered_sets'] + 1);
  376. if (!is_array($info = mysqli_get_client_stats()) || empty($info))
  377. printf("[%03d] Expecting array/any_non_empty, got %s/%s\n",
  378. ++$test_counter, gettype($info), $info);
  379. mysqli_get_client_stats_assert_gt('bytes_received_real_data_ps', $info, $expected, $test_counter);
  380. $expected['bytes_received_real_data_ps'] = $info['bytes_received_real_data_ps'];
  381. mysqli_get_client_stats_assert_eq('rows_fetched_from_server_ps', $info, $expected, $test_counter);
  382. mysqli_get_client_stats_assert_eq('rows_fetched_from_client_ps_unbuffered', $info, $expected, $test_counter);
  383. mysqli_get_client_stats_assert_eq('result_set_queries', $info, $expected, $test_counter);
  384. mysqli_get_client_stats_assert_eq('ps_unbuffered_sets', $info, $expected, $test_counter);
  385. mysqli_get_client_stats_assert_eq('rows_buffered_from_client_ps', $info, $expected, $test_counter);
  386. mysqli_stmt_free_result($stmt);
  387. $expected['rows_skipped_ps'] = (string)($expected['rows_skipped_ps'] + 1);
  388. $expected['flushed_ps_sets'] = (string)($expected['flushed_ps_sets'] + 1);
  389. $expected['rows_fetched_from_server_ps'] = (string)($expected['rows_fetched_from_server_ps'] + 1);
  390. if (!is_array($info = mysqli_get_client_stats()) || empty($info))
  391. printf("[%03d] Expecting array/any_non_empty, got %s/%s\n",
  392. ++$test_counter, gettype($info), $info);
  393. mysqli_get_client_stats_assert_eq('bytes_received_real_data_ps', $info, $expected, $test_counter);
  394. mysqli_get_client_stats_assert_eq('rows_skipped_ps', $info, $expected, $test_counter);
  395. mysqli_get_client_stats_assert_eq('flushed_ps_sets', $info, $expected, $test_counter);
  396. mysqli_get_client_stats_assert_eq('rows_fetched_from_server_ps', $info, $expected, $test_counter);
  397. /*
  398. print "Checking for normal buffered side effects...\n";
  399. foreach ($info as $k => $v)
  400. if ($info[$k] != $expected[$k])
  401. printf("$k - $v != %s\n", $expected[$k]);
  402. */
  403. print "... done with fetch statistics\n";
  404. if (!is_array($info = mysqli_get_client_stats()) || empty($info))
  405. printf("[%03d] Expecting array/any_non_empty, got %s/%s\n",
  406. ++$test_counter, gettype($info), $info);
  407. mysqli_get_client_stats_assert_eq('bytes_received_real_data_normal', $info, $expected, $test_counter);
  408. mysqli_get_client_stats_assert_eq('bytes_received_real_data_ps', $info, $expected, $test_counter);
  409. //
  410. // result_set_queries statistics
  411. //
  412. if (!is_array($info = mysqli_get_client_stats()) || empty($info))
  413. printf("[%03d] Expecting array/any_non_empty, got %s/%s\n",
  414. ++$test_counter, gettype($info), $info);
  415. if (!$res = mysqli_query($link, "SELECT id, label FROM test_mysqli_get_client_stats_table_1"))
  416. printf("[%03d] SELECT failed, [%d] %s\n", ++$test_counter,
  417. mysqli_errno($link), mysqli_error($link));
  418. $rows = 0;
  419. while ($row = mysqli_fetch_assoc($res))
  420. $rows++;
  421. if (0 == $rows)
  422. printf("[%03d] Expecting at least one result, [%d] %s\n", ++$test_counter,
  423. mysqli_errno($link), mysqli_error($link));
  424. mysqli_free_result($res);
  425. if (!is_array($new_info = mysqli_get_client_stats()) || empty($new_info))
  426. printf("[%03d] Expecting array/any_non_empty, got %s/%s\n",
  427. ++$test_counter, gettype($new_info), $new_info);
  428. mysqli_get_client_stats_assert_eq('result_set_queries', $new_info, (string)($info['result_set_queries'] + 1), $test_counter);
  429. $info = $new_info;
  430. mysqli_get_client_stats_assert_gt('bytes_received_real_data_normal', $info, $expected, $test_counter);
  431. $expected['bytes_received_real_data_normal'] = $info['bytes_received_real_data_normal'];
  432. //
  433. // non_result_set_queries - DDL
  434. //
  435. // CREATE TABLE, DROP TABLE
  436. if (!mysqli_query($link, "DROP TABLE IF EXISTS non_result_set_queries_test"))
  437. printf("[%03d] DROP TABLE failed, [%d] %s\n", ++$test_counter,
  438. mysqli_errno($link), mysqli_error($link));
  439. if (!mysqli_query($link, "CREATE TABLE non_result_set_queries_test(id INT) ENGINE = " . $engine)) {
  440. printf("[%03d] CREATE TABLE failed, [%d] %s\n", ++$test_counter,
  441. mysqli_errno($link), mysqli_error($link));
  442. } else {
  443. if (!is_array($new_info = mysqli_get_client_stats()) || empty($new_info))
  444. printf("[%03d] Expecting array/any_non_empty, got %s/%s\n",
  445. ++$test_counter, gettype($new_info), $new_info);
  446. mysqli_get_client_stats_assert_eq('non_result_set_queries', $new_info, (string)($info['non_result_set_queries'] + 2), $test_counter, 'CREATE/DROP TABLE');
  447. }
  448. $info = $new_info;
  449. // ALERT TABLE
  450. if (!mysqli_query($link, "ALTER TABLE non_result_set_queries_test ADD label CHAR(1)")) {
  451. printf("[%03d] ALTER TABLE failed, [%d] %s\n", ++$test_counter,
  452. mysqli_errno($link), mysqli_error($link));
  453. } else {
  454. if (!is_array($new_info = mysqli_get_client_stats()) || empty($new_info))
  455. printf("[%03d] Expecting array/any_non_empty, got %s/%s\n",
  456. ++$test_counter, gettype($new_info), $new_info);
  457. mysqli_get_client_stats_assert_eq('non_result_set_queries', $new_info, (string)($info['non_result_set_queries'] + 1), $test_counter, 'ALTER TABLE');
  458. }
  459. $info = $new_info;
  460. // CREATE INDEX, DROP INDEX
  461. if (!mysqli_query($link, "CREATE INDEX idx_1 ON non_result_set_queries_test(id)")) {
  462. printf("[%03d] CREATE INDEX failed, [%d] %s\n", ++$test_counter,
  463. mysqli_errno($link), mysqli_error($link));
  464. } else {
  465. if (!mysqli_query($link, "DROP INDEX idx_1 ON non_result_set_queries_test"))
  466. printf("[%03d] DROP INDEX failed, [%d] %s\n", ++$test_counter,
  467. mysqli_errno($link), mysqli_error($link));
  468. if (!is_array($new_info = mysqli_get_client_stats()) || empty($new_info))
  469. printf("[%03d] Expecting array/any_non_empty, got %s/%s\n",
  470. ++$test_counter, gettype($new_info), $new_info);
  471. mysqli_get_client_stats_assert_eq('non_result_set_queries', $new_info, (string)($info['non_result_set_queries'] + 2), $test_counter, 'DROP INDEX');
  472. }
  473. $info = $new_info;
  474. // RENAME TABLE
  475. if (!mysqli_query($link, "DROP TABLE IF EXISTS client_stats_test"))
  476. printf("[%03d] Cleanup, DROP TABLE client_stats_test failed, [%d] %s\n", ++$test_counter,
  477. mysqli_errno($link), mysqli_error($link));
  478. if (!is_array($new_info = mysqli_get_client_stats()) || empty($new_info))
  479. printf("[%03d] Expecting array/any_non_empty, got %s/%s\n",
  480. ++$test_counter, gettype($new_info), $new_info);
  481. $info = $new_info;
  482. if (!mysqli_query($link, "RENAME TABLE non_result_set_queries_test TO client_stats_test")) {
  483. printf("[%03d] RENAME TABLE failed, [%d] %s\n", ++$test_counter,
  484. mysqli_errno($link), mysqli_error($link));
  485. } else {
  486. if (!is_array($new_info = mysqli_get_client_stats()) || empty($new_info))
  487. printf("[%03d] Expecting array/any_non_empty, got %s/%s\n",
  488. ++$test_counter, gettype($new_info), $new_info);
  489. mysqli_get_client_stats_assert_eq('non_result_set_queries', $new_info, (string)($info['non_result_set_queries'] + 1), $test_counter, 'RENAME TABLE');
  490. }
  491. $info = $new_info;
  492. if (!mysqli_query($link, "DROP TABLE IF EXISTS non_result_set_queries_test"))
  493. printf("[%03d] Cleanup, DROP TABLE failed, [%d] %s\n", ++$test_counter,
  494. mysqli_errno($link), mysqli_error($link));
  495. if (!mysqli_query($link, "DROP TABLE IF EXISTS client_stats_test"))
  496. printf("[%03d] Cleanup, DROP TABLE failed, [%d] %s\n", ++$test_counter,
  497. mysqli_errno($link), mysqli_error($link));
  498. // Let's see if we have privileges for CREATE DATABASE
  499. mysqli_query($link, "DROP DATABASE IF EXISTS mysqli_get_client_stats");
  500. if (!is_array($new_info = mysqli_get_client_stats()) || empty($new_info))
  501. printf("[%03d] Expecting array/any_non_empty, got %s/%s\n",
  502. ++$test_counter, gettype($new_info), $new_info);
  503. $info = $new_info;
  504. // CREATE, ALTER, RENAME, DROP DATABASE
  505. if (mysqli_query($link, "CREATE DATABASE mysqli_get_client_stats")) {
  506. if (!is_array($new_info = mysqli_get_client_stats()) || empty($new_info))
  507. printf("[%03d] Expecting array/any_non_empty, got %s/%s\n",
  508. ++$test_counter, gettype($new_info), $new_info);
  509. mysqli_get_client_stats_assert_eq('non_result_set_queries', $new_info, (string)($info['non_result_set_queries'] + 1), $test_counter, 'CREATE DATABASE');
  510. $info = $new_info;
  511. if (!mysqli_query($link, "ALTER DATABASE DEFAULT CHARACTER SET latin1"))
  512. printf("[%03d] ALTER DATABASE failed, [%d] %s\n", ++$test_counter,
  513. mysqli_errno($link), mysqli_error($link));
  514. if (!is_array($new_info = mysqli_get_client_stats()) || empty($new_info))
  515. printf("[%03d] Expecting array/any_non_empty, got %s/%s\n",
  516. ++$test_counter, gettype($new_info), $new_info);
  517. mysqli_get_client_stats_assert_eq('non_result_set_queries', $new_info, (string)($info['non_result_set_queries'] + 1), $test_counter, 'CREATE DATABASE');
  518. $info = $new_info;
  519. if (mysqli_get_server_version($link) > 51700) {
  520. if (!mysqli_query($link, "RENAME DATABASE mysqli_get_client_stats TO mysqli_get_client_stats_"))
  521. printf("[%03d] RENAME DATABASE failed, [%d] %s\n", ++$test_counter,
  522. mysqli_errno($link), mysqli_error($link));
  523. if (!is_array($new_info = mysqli_get_client_stats()) || empty($new_info))
  524. printf("[%03d] Expecting array/any_non_empty, got %s/%s\n",
  525. ++$test_counter, gettype($new_info), $new_info);
  526. mysqli_get_client_stats_assert_eq('non_result_set_queries', $new_info, (string)($info['non_result_set_queries'] + 1), $test_counter, 'CREATE DATABASE');
  527. $info = $new_info;
  528. } else {
  529. if (!mysqli_query($link, "CREATE DATABASE mysqli_get_client_stats_"))
  530. printf("[%03d] CREATE DATABASE failed, [%d] %s\n", ++$test_counter,
  531. mysqli_errno($link), mysqli_error($link));
  532. if (!is_array($new_info = mysqli_get_client_stats()) || empty($new_info))
  533. printf("[%03d] Expecting array/any_non_empty, got %s/%s\n",
  534. ++$test_counter, gettype($new_info), $new_info);
  535. $info = $new_info;
  536. }
  537. if (!mysqli_query($link, "DROP DATABASE mysqli_get_client_stats_"))
  538. printf("[%03d] DROP DATABASE failed, [%d] %s\n", ++$test_counter,
  539. mysqli_errno($link), mysqli_error($link));
  540. if (!is_array($new_info = mysqli_get_client_stats()) || empty($new_info))
  541. printf("[%03d] Expecting array/any_non_empty, got %s/%s\n",
  542. ++$test_counter, gettype($new_info), $new_info);
  543. mysqli_get_client_stats_assert_eq('non_result_set_queries', $new_info, (string)($info['non_result_set_queries'] + 1), $test_counter, 'DROP DATABASE');
  544. $info = $new_info;
  545. }
  546. // CREATE SERVER, ALTER SERVER, DROP SERVER
  547. // We don't really try to use federated, we just want to see if the syntax works
  548. mysqli_query($link, "DROP SERVER IF EXISTS myself");
  549. if (!is_array($new_info = mysqli_get_client_stats()) || empty($new_info))
  550. printf("[%03d] Expecting array/any_non_empty, got %s/%s\n",
  551. ++$test_counter, gettype($new_info), $new_info);
  552. $info = $new_info;
  553. $sql = sprintf("CREATE SERVER myself FOREIGN DATA WRAPPER mysql OPTIONS (user '%s', password '%s', database '%s')",
  554. $user, $passwd, $db);
  555. if (mysqli_query($link, $sql)) {
  556. // server knows about it
  557. if (!is_array($new_info = mysqli_get_client_stats()) || empty($new_info))
  558. printf("[%03d] Expecting array/any_non_empty, got %s/%s\n",
  559. ++$test_counter, gettype($new_info), $new_info);
  560. mysqli_get_client_stats_assert_eq('non_result_set_queries', $new_info, (string)($info['non_result_set_queries'] + 1), $test_counter, 'CREATE SERVER');
  561. $info = $new_info;
  562. if (!mysqli_query($link, sprintf("ALTER SERVER myself OPTIONS(user '%s_')", $user)))
  563. printf("[%03d] ALTER SERVER failed, [%d] %s\n", ++$test_counter,
  564. mysqli_errno($link), mysqli_error($link));
  565. if (!is_array($new_info = mysqli_get_client_stats()) || empty($new_info))
  566. printf("[%03d] Expecting array/any_non_empty, got %s/%s\n",
  567. ++$test_counter, gettype($new_info), $new_info);
  568. mysqli_get_client_stats_assert_eq('non_result_set_queries', $new_info, (string)($info['non_result_set_queries'] + 1), $test_counter, 'ALTER SERVER');
  569. $info = $new_info;
  570. if (!mysqli_query($link, "DROP SERVER myself"))
  571. printf("[%03d] DROP SERVER failed, [%d] %s\n", ++$test_counter,
  572. mysqli_errno($link), mysqli_error($link));
  573. if (!is_array($new_info = mysqli_get_client_stats()) || empty($new_info))
  574. printf("[%03d] Expecting array/any_non_empty, got %s/%s\n",
  575. ++$test_counter, gettype($new_info), $new_info);
  576. mysqli_get_client_stats_assert_eq('non_result_set_queries', $new_info, (string)($info['non_result_set_queries'] + 1), $test_counter, 'DROP SERVER');
  577. $info = $new_info;
  578. }
  579. mysqli_get_client_stats_assert_eq('bytes_received_real_data_normal', $info, $expected, $test_counter);
  580. mysqli_get_client_stats_assert_eq('bytes_received_real_data_ps', $info, $expected, $test_counter);
  581. /*
  582. We don't test_mysqli_get_client_stats_table_1 the NDB ones.
  583. 13.1. Data Definition Statements
  584. 13.1.3. ALTER LOGFILE GROUP Syntax
  585. 13.1.4. ALTER TABLESPACE Syntax
  586. 13.1.9. CREATE LOGFILE GROUP Syntax
  587. 13.1.10. CREATE TABLESPACE Syntax
  588. 13.1.15. DROP LOGFILE GROUP Syntax
  589. 13.1.16. DROP TABLESPACE Syntax
  590. */
  591. //
  592. // DML
  593. //
  594. if (!is_array($new_info = mysqli_get_client_stats()) || empty($new_info))
  595. printf("[%03d] Expecting array/any_non_empty, got %s/%s\n",
  596. ++$test_counter, gettype($new_info), $new_info);
  597. $info = $new_info;
  598. if (!mysqli_query($link, "INSERT INTO test_mysqli_get_client_stats_table_1(id) VALUES (100)"))
  599. printf("[%03d] INSERT failed, [%d] %s\n", ++$test_counter,
  600. mysqli_errno($link), mysqli_error($link));
  601. if (!is_array($new_info = mysqli_get_client_stats()) || empty($new_info))
  602. printf("[%03d] Expecting array/any_non_empty, got %s/%s\n",
  603. ++$test_counter, gettype($new_info), $new_info);
  604. mysqli_get_client_stats_assert_eq('non_result_set_queries', $new_info, (string)($info['non_result_set_queries'] + 1), $test_counter, 'INSERT');
  605. $info = $new_info;
  606. if (!mysqli_query($link, "UPDATE test_mysqli_get_client_stats_table_1 SET label ='z' WHERE id = 100"))
  607. printf("[%03d] UPDATE failed, [%d] %s\n", ++$test_counter,
  608. mysqli_errno($link), mysqli_error($link));
  609. if (!is_array($new_info = mysqli_get_client_stats()) || empty($new_info))
  610. printf("[%03d] Expecting array/any_non_empty, got %s/%s\n",
  611. ++$test_counter, gettype($new_info), $new_info);
  612. mysqli_get_client_stats_assert_eq('non_result_set_queries', $new_info, (string)($info['non_result_set_queries'] + 1), $test_counter, 'UPDATE');
  613. $info = $new_info;
  614. if (!mysqli_query($link, "REPLACE INTO test_mysqli_get_client_stats_table_1(id, label) VALUES (100, 'b')"))
  615. printf("[%03d] INSERT failed, [%d] %s\n", ++$test_counter,
  616. mysqli_errno($link), mysqli_error($link));
  617. if (!is_array($new_info = mysqli_get_client_stats()) || empty($new_info))
  618. printf("[%03d] Expecting array/any_non_empty, got %s/%s\n",
  619. ++$test_counter, gettype($new_info), $new_info);
  620. mysqli_get_client_stats_assert_eq('non_result_set_queries', $new_info, (string)($info['non_result_set_queries'] + 1), $test_counter, 'REPLACE');
  621. $info = $new_info;
  622. // NOTE: this will NOT update dbl_ddls counter
  623. if (!$res = mysqli_query($link, "SELECT id, label FROM test_mysqli_get_client_stats_table_1 WHERE id = 100"))
  624. printf("[%03d] SELECT@dml failed, [%d] %s\n", ++$test_counter,
  625. mysqli_errno($link), mysqli_error($link));
  626. mysqli_free_result($res);
  627. if (!is_array($new_info = mysqli_get_client_stats()) || empty($new_info))
  628. printf("[%03d] Expecting array/any_non_empty, got %s/%s\n",
  629. ++$test_counter, gettype($new_info), $new_info);
  630. mysqli_get_client_stats_assert_eq('non_result_set_queries', $new_info, $info, $test_counter, 'SELECT@dml');
  631. $info = $new_info;
  632. if (!mysqli_query($link, "DELETE FROM test_mysqli_get_client_stats_table_1 WHERE id = 100"))
  633. printf("[%03d] DELETE failed, [%d] %s\n", ++$test_counter,
  634. mysqli_errno($link), mysqli_error($link));
  635. if (!is_array($new_info = mysqli_get_client_stats()) || empty($new_info))
  636. printf("[%03d] Expecting array/any_non_empty, got %s/%s\n",
  637. ++$test_counter, gettype($new_info), $new_info);
  638. mysqli_get_client_stats_assert_eq('non_result_set_queries', $new_info, (string)($info['non_result_set_queries'] + 1), $test_counter, 'DELETE');
  639. $info = $new_info;
  640. if (!$res = mysqli_query($link, "TRUNCATE TABLE test_mysqli_get_client_stats_table_1"))
  641. printf("[%03d] TRUNCATE failed, [%d] %s\n", ++$test_counter,
  642. mysqli_errno($link), mysqli_error($link));
  643. if (!is_array($new_info = mysqli_get_client_stats()) || empty($new_info))
  644. printf("[%03d] Expecting array/any_non_empty, got %s/%s\n",
  645. ++$test_counter, gettype($new_info), $new_info);
  646. mysqli_get_client_stats_assert_eq('non_result_set_queries', $new_info, (string)($info['non_result_set_queries'] + 1), $test_counter, 'TRUNCATE');
  647. $info = $new_info;
  648. $file = tempnam(sys_get_temp_dir(), 'mysqli_test');
  649. if ($fp = fopen($file, 'w')) {
  650. @fwrite($fp, '1;"a"');
  651. fclose($fp);
  652. chmod($file, 0644);
  653. $sql = sprintf('LOAD DATA LOCAL INFILE "%s" INTO TABLE test_mysqli_get_client_stats_table_1', mysqli_real_escape_string($link, $file));
  654. if (mysqli_query($link, $sql)) {
  655. if (!is_array($new_info = mysqli_get_client_stats()) || empty($new_info))
  656. printf("[%03d] Expecting array/any_non_empty, got %s/%s\n",
  657. ++$test_counter, gettype($new_info), $new_info);
  658. mysqli_get_client_stats_assert_eq('non_result_set_queries', $new_info, (string)($info['non_result_set_queries'] + 1), $test_counter, 'LOAD DATA LOCAL');
  659. $info = $new_info;
  660. }
  661. unlink($file);
  662. }
  663. mysqli_get_client_stats_assert_eq('bytes_received_real_data_normal', $info, $expected, $test_counter);
  664. mysqli_get_client_stats_assert_eq('bytes_received_real_data_ps', $info, $expected, $test_counter);
  665. /*
  666. We skip those:
  667. 13.2. Data Manipulation Statements
  668. 13.2.2. DO Syntax
  669. 13.2.3. HANDLER Syntax
  670. 13.2.5. LOAD DATA INFILE Syntax
  671. */
  672. mysqli_query($link, "DELETE FROM test_mysqli_get_client_stats_table_1");
  673. if (!mysqli_query($link, "INSERT INTO test_mysqli_get_client_stats_table_1(id, label) VALUES (1, 'a'), (2, 'b')"))
  674. printf("[%03d] Cannot insert new records, [%d] %s\n", ++$test_counter,
  675. mysqli_errno($link), mysqli_error($link));
  676. if (!$res = mysqli_real_query($link, "SELECT id, label FROM test_mysqli_get_client_stats_table_1 ORDER BY id"))
  677. printf("[%03d] Cannot SELECT with mysqli_real_query(), [%d] %s\n", ++$test_counter,
  678. mysqli_errno($link), mysqli_error($link));
  679. if (!is_object($res = mysqli_use_result($link)))
  680. printf("[%03d] mysqli_use_result() failed, [%d] %s\n", ++$test_counter,
  681. mysqli_errno($link), mysqli_error($link));
  682. while ($row = mysqli_fetch_assoc($res))
  683. ;
  684. mysqli_free_result($res);
  685. if (!is_array($new_info = mysqli_get_client_stats()) || empty($new_info))
  686. printf("[%03d] Expecting array/any_non_empty, got %s/%s\n",
  687. ++$test_counter, gettype($new_info), $new_info);
  688. mysqli_get_client_stats_assert_eq('unbuffered_sets', $new_info, (string)($info['unbuffered_sets'] + 1), $test_counter, 'mysqli_use_result()');
  689. $info = $new_info;
  690. if (!$res = mysqli_real_query($link, "SELECT id, label FROM test_mysqli_get_client_stats_table_1 ORDER BY id"))
  691. printf("[%03d] Cannot SELECT with mysqli_real_query() II, [%d] %s\n", ++$test_counter,
  692. mysqli_errno($link), mysqli_error($link));
  693. if (!is_object($res = mysqli_store_result($link)))
  694. printf("[%03d] mysqli_use_result() failed, [%d] %s\n", ++$test_counter,
  695. mysqli_errno($link), mysqli_error($link));
  696. while ($row = mysqli_fetch_assoc($res))
  697. ;
  698. mysqli_free_result($res);
  699. if (!is_array($new_info = mysqli_get_client_stats()) || empty($new_info))
  700. printf("[%03d] Expecting array/any_non_empty, got %s/%s\n",
  701. ++$test_counter, gettype($new_info), $new_info);
  702. mysqli_get_client_stats_assert_eq('buffered_sets', $new_info, (string)($info['buffered_sets'] + 1), $test_counter, 'mysqli_use_result()');
  703. $info = $new_info;
  704. mysqli_close($link);
  705. mysqli_get_client_stats_assert_gt('bytes_received_real_data_normal', $info, $expected, $test_counter);
  706. $expected['bytes_received_real_data_normal'] = $info['bytes_received_real_data_normal'];
  707. mysqli_get_client_stats_assert_eq('bytes_received_real_data_ps', $info, $expected, $test_counter);
  708. /*
  709. no_index_used
  710. bad_index_used
  711. flushed_normal_sets
  712. flushed_ps_sets
  713. explicit_close
  714. implicit_close
  715. disconnect_close
  716. in_middle_of_command_close
  717. explicit_free_result
  718. implicit_free_result
  719. explicit_stmt_close
  720. implicit_stmt_close
  721. */
  722. print "done!";
  723. ?>
  724. <?php
  725. require_once("connect.inc");
  726. if (!$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket))
  727. printf("[c001] [%d] %s\n", mysqli_connect_errno(), mysqli_connect_error());
  728. if (!mysqli_query($link, "DROP TABLE IF EXISTS test_mysqli_get_client_stats_table_1"))
  729. printf("[c002] Cannot drop table, [%d] %s\n", mysqli_errno($link), mysqli_error($link));
  730. if (!mysqli_query($link, "DROP TABLE IF EXISTS non_result_set_queries_test"))
  731. printf("[c003] Cannot drop table, [%d] %s\n", mysqli_errno($link), mysqli_error($link));
  732. if (!mysqli_query($link, "DROP TABLE IF EXISTS client_stats_test"))
  733. printf("[c004] Cannot drop table, [%d] %s\n", mysqli_errno($link), mysqli_error($link));
  734. if (!mysqli_query($link, "DROP DATABASE IF EXISTS mysqli_get_client_stats_"))
  735. printf("[c005] Cannot drop table, [%d] %s\n", mysqli_errno($link), mysqli_error($link));
  736. if (!mysqli_query($link, "DROP DATABASE IF EXISTS mysqli_get_client_stats"))
  737. printf("[c006] Cannot drop table, [%d] %s\n", mysqli_errno($link), mysqli_error($link));
  738. if (!mysqli_query($link, "DROP SERVER IF EXISTS myself"))
  739. printf("[c007] Cannot drop table, [%d] %s\n", mysqli_errno($link), mysqli_error($link));
  740. mysqli_close($link);
  741. ?>