Annotation of embedaddon/php/ext/mysqli/tests/mysqli_get_client_stats.phpt, revision 1.1.1.2
1.1 misho 1: --TEST--
2: mysqli_get_client_stats()
3: --SKIPIF--
4: <?PHP
5: require_once('skipif.inc');
6: require_once('skipifemb.inc');
7: require_once('skipifconnectfailure.inc');
8: if (!function_exists('mysqli_get_client_stats')) {
9: die("skip only available with mysqlnd");
10: }
11: ?>
12: --INI--
13: mysqlnd.collect_statistics=1
14: mysqlnd.collect_memory_statistics=1
15: --FILE--
16: <?php
17: /*
18: TODO
19: no_index_used - difficult to simulate because server/engine dependent
20: bad_index_used - difficult to simulate because server/engine dependent
21: flushed_normal_sets
22: flushed_ps_sets
23: explicit_close
24: implicit_close
25: disconnect_close
26: in_middle_of_command_close
27: explicit_free_result
28: implicit_free_result
29: explicit_stmt_close
30: implicit_stmt_close
31: */
32:
33: function mysqli_get_client_stats_assert_eq($field, $current, $expected, &$test_counter, $desc = "") {
34:
35: $test_counter++;
36: if (is_array($current) && is_array($expected)) {
37: if ($current[$field] !== $expected[$field]) {
38: printf("[%03d] %s Expecting %s = %s/%s, got %s/%s\n",
39: $test_counter, $desc,
40: $field, $expected[$field], gettype($expected[$field]),
41: $current[$field], gettype($current[$field]));
42: }
43: } else if (is_array($current)) {
44: if ($current[$field] !== $expected) {
45: printf("[%03d] %s Expecting %s = %s/%s, got %s/%s\n",
46: $test_counter, $desc,
47: $field, $expected, gettype($expected),
48: $current[$field], gettype($current[$field]));
49: }
50: } else {
51: if ($current !== $expected) {
52: printf("[%03d] %s Expecting %s = %s/%s, got %s/%s\n",
53: $test_counter, $desc,
54: $field, $expected, gettype($expected),
55: $current, gettype($current));
56: }
57: }
58:
59: }
60:
61: function mysqli_get_client_stats_assert_gt($field, $current, $expected, &$test_counter, $desc = "") {
62:
63: $test_counter++;
64: if (is_array($current) && is_array($expected)) {
65: if ($current[$field] <= $expected[$field]) {
66: printf("[%03d] %s Expecting %s > %s/%s, got %s/%s\n",
67: $test_counter, $desc,
68: $field, $expected[$field], gettype($expected[$field]),
69: $current[$field], gettype($current[$field]));
70: }
71: } else {
72: if ($current <= $expected) {
73: printf("[%03d] %s Expecting %s > %s/%s, got %s/%s\n",
74: $test_counter, $desc, $field,
75: $expected, gettype($expected),
76: $current, gettype($current));
77: }
78: }
79:
80: }
81:
82:
83: $tmp = $link = null;
84: if (!is_null($tmp = @mysqli_get_client_stats($link)))
85: printf("[001] Expecting NULL, got %s/%s\n", gettype($tmp), $tmp);
86:
87: require_once("connect.inc");
88:
89: if (!is_array($info = mysqli_get_client_stats()) || empty($info))
90: printf("[002] Expecting array/any_non_empty, got %s/%s\n", gettype($info), $info);
91:
92: var_dump($info);
93:
94: if (!$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket)) {
95: printf("[003] Cannot connect to the server using host=%s, user=%s, passwd=***, dbname=%s, port=%s, socket=%s\n",
96: $host, $user, $db, $port, $socket);
97: exit(1);
98: }
99:
100: if (!is_array($new_info = mysqli_get_client_stats()) || empty($new_info))
101: printf("[004] Expecting array/any_non_empty, got %s/%s\n", gettype($new_info), $new_info);
102:
103: if (count($info) != count($new_info)) {
104: printf("[005] Expecting the same number of entries in the arrays\n");
105: var_dump($info);
106: var_dump($new_info);
107: }
108:
109: $test_counter = 6;
110:
111: mysqli_get_client_stats_assert_gt('bytes_sent', $new_info, $info, $test_counter);
112: mysqli_get_client_stats_assert_gt('bytes_received', $new_info, $info, $test_counter);
113: mysqli_get_client_stats_assert_gt('packets_sent', $new_info, $info, $test_counter);
114: mysqli_get_client_stats_assert_gt('packets_received', $new_info, $info, $test_counter);
115: mysqli_get_client_stats_assert_gt('protocol_overhead_in', $new_info, $info, $test_counter);
116: mysqli_get_client_stats_assert_gt('protocol_overhead_out', $new_info, $info, $test_counter);
117:
118: // we assume the above as tested and in the following we check only those
119: mysqli_get_client_stats_assert_eq('result_set_queries', $new_info, $info, $test_counter);
120:
121: /* we need to skip this test in unicode - we send set names utf8 during mysql_connect */
122: if (!(version_compare(PHP_VERSION, '5.9.9', '>') == 1))
123: mysqli_get_client_stats_assert_eq('non_result_set_queries', $new_info, $info, $test_counter);
124: mysqli_get_client_stats_assert_eq('buffered_sets', $new_info, $info, $test_counter);
125: mysqli_get_client_stats_assert_eq('unbuffered_sets', $new_info, $info, $test_counter);
126: mysqli_get_client_stats_assert_eq('ps_buffered_sets', $new_info, $info, $test_counter);
127: mysqli_get_client_stats_assert_eq('ps_unbuffered_sets', $new_info, $info, $test_counter);
128:
129: mysqli_get_client_stats_assert_eq('rows_skipped_ps', $new_info, $info, $test_counter);
130: mysqli_get_client_stats_assert_eq('copy_on_write_saved', $new_info, $info, $test_counter);
131: mysqli_get_client_stats_assert_eq('copy_on_write_performed', $new_info, $info, $test_counter);
132: mysqli_get_client_stats_assert_eq('command_buffer_too_small', $new_info, $info, $test_counter);
133: // This is not a mistake that I use %unicode|string%(1) "1" here! Andrey did not go for int to avoid any
134: // issues for very large numbers and 32 vs. 64bit systems
135: mysqli_get_client_stats_assert_eq('connect_success', $new_info, "1", $test_counter);
136: mysqli_get_client_stats_assert_eq('connect_failure', $new_info, $info, $test_counter);
137: mysqli_get_client_stats_assert_eq('connection_reused', $new_info, $info, $test_counter);
138:
139: // No data fetched so far
140: mysqli_get_client_stats_assert_eq('bytes_received_real_data_normal', $new_info, "0", $test_counter);
141: mysqli_get_client_stats_assert_eq('bytes_received_real_data_ps', $new_info, "0", $test_counter);
142:
143: require('table.inc');
144: if (!is_array($info = mysqli_get_client_stats()) || empty($info))
145: printf("[%03d] Expecting array/any_non_empty, got %s/%s\n",
146: ++$test_counter, gettype($info), $info);
147:
148: // fetch stats
149: $expected = $info;
150:
151: // buffered normal
152: print "Testing buffered normal...\n";
153: if (!$res = mysqli_query($link, 'SELECT COUNT(*) AS _num FROM test', MYSQLI_STORE_RESULT))
154: printf("[%03d] SELECT COUNT() FROM test failed, [%d] %s\n",
155: ++$test_counter, mysqli_errno($link), mysqli_error($link));
156:
157: $expected['rows_fetched_from_server_normal'] = (string)($expected['rows_fetched_from_server_normal'] + 1);
158: $expected['buffered_sets'] = (string)($expected['buffered_sets'] + 1);
159: $expected['result_set_queries'] = (string)($expected['result_set_queries'] + 1);
160: $expected['rows_buffered_from_client_normal'] = (string)($expected['rows_buffered_from_client_normal'] + 1);
161:
162: if (!is_array($info = mysqli_get_client_stats()) || empty($info))
163: printf("[%03d] Expecting array/any_non_empty, got %s/%s\n",
164: ++$test_counter, gettype($info), $info);
165:
166: mysqli_get_client_stats_assert_gt('bytes_sent', $info, $expected, $test_counter);
167: mysqli_get_client_stats_assert_gt('bytes_received', $info, $expected, $test_counter);
168:
1.1.1.2 ! misho 169: // real_data_* get incremented after mysqli_*fetch*()
1.1 misho 170: mysqli_get_client_stats_assert_eq('bytes_received_real_data_normal', $info, "0", $test_counter);
171: mysqli_get_client_stats_assert_eq('bytes_received_real_data_ps', $info, "0", $test_counter);
172:
173: mysqli_get_client_stats_assert_eq('rows_fetched_from_server_normal', $info, $expected, $test_counter);
174: mysqli_get_client_stats_assert_eq('rows_fetched_from_client_normal_buffered', $info, $expected, $test_counter);
175: mysqli_get_client_stats_assert_eq('buffered_sets', $info, $expected, $test_counter);
176: mysqli_get_client_stats_assert_eq('result_set_queries', $info, $expected, $test_counter);
177: mysqli_get_client_stats_assert_eq('rows_buffered_from_client_normal', $info, $expected, $test_counter);
178:
179: /* no change to rows_fetched_from_client_normal_buffered! */
180: if (!$row = mysqli_fetch_assoc($res))
181: printf("[%03d] fetch_assoc - SELECT COUNT() FROM test failed, [%d] %s\n",
182: ++$test_counter, mysqli_errno($link), mysqli_error($link));
183:
184: $expected['rows_fetched_from_client_normal_buffered'] = (string)($expected['rows_fetched_from_client_normal_buffered'] + 1);
185:
186: if (!is_array($info = mysqli_get_client_stats()) || empty($info))
187: printf("[%03d] Expecting array/any_non_empty, got %s/%s\n",
188: ++$test_counter, gettype($info), $info);
189:
190: // fetch will increment
191: mysqli_get_client_stats_assert_gt('bytes_received_real_data_normal', $info, $expected, $test_counter);
192: $expected['bytes_received_real_data_normal'] = $info['bytes_received_real_data_normal'];
193: mysqli_get_client_stats_assert_eq('bytes_received_real_data_ps', $info, "0", $test_counter);
194:
195: mysqli_get_client_stats_assert_eq('rows_fetched_from_server_normal', $info, $expected, $test_counter);
196: mysqli_get_client_stats_assert_eq('rows_fetched_from_client_normal_buffered', $info, $expected, $test_counter);
197: mysqli_get_client_stats_assert_eq('rows_buffered_from_client_normal', $info, $expected, $test_counter);
198:
199: $num_rows = $row['_num'];
200: mysqli_free_result($res);
201:
202: print "Testing buffered normal... - SELECT id, label FROM test\n";
203: if (!$res = mysqli_query($link, 'SELECT id, label FROM test', MYSQLI_STORE_RESULT))
204: printf("[%03d] SELECT id, label FROM test failed, [%d] %s\n",
205: ++$test_counter, mysqli_errno($link), mysqli_error($link));
206:
207:
208: assert(mysqli_num_rows($res) == $num_rows);
209:
210: if (!is_array($info = mysqli_get_client_stats()) || empty($info))
211: printf("[%03d] Expecting array/any_non_empty, got %s/%s\n",
212: ++$test_counter, gettype($info), $info);
213:
214:
215: $expected['rows_fetched_from_server_normal'] = (string)($expected['rows_fetched_from_server_normal'] + $num_rows);
216: $expected['rows_buffered_from_client_normal'] = (string)($expected['rows_buffered_from_client_normal'] + $num_rows);
217: $expected['buffered_sets'] = (string)($expected['buffered_sets'] + 1);
218: $expected['result_set_queries'] = (string)($expected['result_set_queries'] + 1);
219:
220: mysqli_get_client_stats_assert_eq('bytes_received_real_data_normal', $info, $expected, $test_counter);
221:
222: mysqli_get_client_stats_assert_eq('rows_fetched_from_server_normal', $info, $expected, $test_counter);
223: mysqli_get_client_stats_assert_eq('rows_fetched_from_client_normal_buffered', $info, $expected, $test_counter);
224: mysqli_get_client_stats_assert_eq('buffered_sets', $info, $expected, $test_counter);
225: mysqli_get_client_stats_assert_eq('result_set_queries', $info, $expected, $test_counter);
226: mysqli_get_client_stats_assert_eq('rows_buffered_from_client_normal', $info, $expected, $test_counter);
227: mysqli_get_client_stats_assert_eq('rows_buffered_from_client_normal', $info, $expected, $test_counter);
228:
229: /* fetching none, but stats should not be affected - current implementation */
230: mysqli_free_result($res);
231:
232: if (!is_array($info = mysqli_get_client_stats()) || empty($info))
233: printf("[%03d] Expecting array/any_non_empty, got %s/%s\n",
234: ++$test_counter, gettype($info), $info);
235:
236:
237: mysqli_get_client_stats_assert_eq('bytes_received_real_data_normal', $info, $expected, $test_counter);
238: mysqli_get_client_stats_assert_eq('rows_fetched_from_server_normal', $info, $expected, $test_counter);
239: mysqli_get_client_stats_assert_eq('rows_fetched_from_client_normal_buffered', $info, $expected, $test_counter);
240:
241: print "Testing unbuffered normal...\n";
242: if (!$res = mysqli_query($link, 'SELECT id, label FROM test', MYSQLI_USE_RESULT))
243: printf("[%03d] SELECT id, label FROM test failed, [%d] %s\n",
244: ++$test_counter, mysqli_errno($link), mysqli_error($link));
245:
246: if (!is_array($info = mysqli_get_client_stats()) || empty($info))
247: printf("[%03d] Expecting array/any_non_empty, got %s/%s\n",
248: ++$test_counter, gettype($info), $info);
249:
250: mysqli_get_client_stats_assert_eq('rows_fetched_from_server_normal', $info, $expected, $test_counter);
251: mysqli_get_client_stats_assert_eq('rows_fetched_from_client_normal_unbuffered', $info, $expected, $test_counter);
252: mysqli_get_client_stats_assert_eq('bytes_received_real_data_normal', $info, $expected, $test_counter);
253:
254: while ($row = mysqli_fetch_assoc($res))
255: ;
256: mysqli_free_result($res);
257:
258: $expected['rows_fetched_from_server_normal'] = (string)($expected['rows_fetched_from_server_normal'] + $num_rows);
259: $expected['rows_fetched_from_client_normal_unbuffered'] = (string)($expected['rows_fetched_from_client_normal_unbuffered'] + $num_rows);
260: $expected['unbuffered_sets'] = (string)($expected['unbuffered_sets'] + 1);
261: $expected['result_set_queries'] = (string)($expected['result_set_queries'] + 1);
262:
263: if (!is_array($info = mysqli_get_client_stats()) || empty($info))
264: printf("[%03d] Expecting array/any_non_empty, got %s/%s\n",
265: ++$test_counter, gettype($info), $info);
266:
267: mysqli_get_client_stats_assert_gt('bytes_received_real_data_normal', $info, $expected, $test_counter);
268: $expected['bytes_received_real_data_normal'] = $info['bytes_received_real_data_normal'];
269:
270: mysqli_get_client_stats_assert_eq('rows_fetched_from_server_normal', $info, $expected, $test_counter);
271: mysqli_get_client_stats_assert_eq('rows_fetched_from_client_normal_unbuffered', $info, $expected, $test_counter);
272: mysqli_get_client_stats_assert_eq('unbuffered_sets', $info, $expected, $test_counter);
273: mysqli_get_client_stats_assert_eq('result_set_queries', $info, $expected, $test_counter);
274:
275: print "Testing unbuffered normal... - SELECT id, label FROM test, not all fetched\n";
276: if (!$res = mysqli_query($link, 'SELECT id, label FROM test', MYSQLI_USE_RESULT))
277: printf("[%03d] SELECT id, label FROM test failed, [%d] %s\n",
278: ++$test_counter, mysqli_errno($link), mysqli_error($link));
279:
280: for ($i = 0; $i < $num_rows - 1; $i++)
281: $row = mysqli_fetch_assoc($res);
282:
283: $expected['rows_fetched_from_server_normal'] = (string)($expected['rows_fetched_from_server_normal'] + $num_rows - 1);
284: $expected['rows_fetched_from_client_normal_unbuffered'] = (string)($expected['rows_fetched_from_client_normal_unbuffered'] + $num_rows - 1);
285: $expected['unbuffered_sets'] = (string)($expected['unbuffered_sets'] + 1);
286: $expected['result_set_queries'] = (string)($expected['result_set_queries'] + 1);
287:
288: if (!is_array($info = mysqli_get_client_stats()) || empty($info))
289: printf("[%03d] Expecting array/any_non_empty, got %s/%s\n",
290: ++$test_counter, gettype($info), $info);
291:
292: mysqli_get_client_stats_assert_gt('bytes_received_real_data_normal', $info, $expected, $test_counter);
293: $expected['bytes_received_real_data_normal'] = $info['bytes_received_real_data_normal'];
294:
295: mysqli_get_client_stats_assert_eq('rows_fetched_from_server_normal', $info, $expected, $test_counter);
296: mysqli_get_client_stats_assert_eq('rows_fetched_from_client_normal_unbuffered', $info, $expected, $test_counter);
297: mysqli_get_client_stats_assert_eq('unbuffered_sets', $info, $expected, $test_counter);
298: mysqli_get_client_stats_assert_eq('result_set_queries', $info, $expected, $test_counter);
299:
300: print "Testing if implicit fetching and cleaning happens...\n";
301: mysqli_free_result($res);
302:
303: /* last row has been implicitly cleaned from the wire by freeing the result set */
304: $expected['rows_fetched_from_server_normal'] = (string)($expected['rows_fetched_from_server_normal'] + 1);
305: $expected['rows_fetched_from_client_normal_unbuffered'] = (string)($expected['rows_fetched_from_client_normal_unbuffered'] + 1);
306: $expected['rows_skipped_normal'] = (string)($info['rows_skipped_normal'] + 1);
307: $expected['flushed_normal_sets'] = (string)($expected['flushed_normal_sets'] + 1);
308:
309: if (!is_array($info = mysqli_get_client_stats()) || empty($info))
310: printf("[%03d] Expecting array/any_non_empty, got %s/%s\n",
311: ++$test_counter, gettype($info), $info);
312:
313: mysqli_get_client_stats_assert_eq('bytes_received_real_data_normal', $info, $expected, $test_counter);
314:
315: mysqli_get_client_stats_assert_eq('rows_fetched_from_server_normal', $info, $expected, $test_counter);
316: mysqli_get_client_stats_assert_eq('rows_fetched_from_client_normal_unbuffered', $info, $expected, $test_counter);
317: mysqli_get_client_stats_assert_eq('rows_skipped_normal', $info, $expected, $test_counter);
318: mysqli_get_client_stats_assert_eq('flushed_normal_sets', $info, $expected, $test_counter);
319:
320: print "Testing buffered Prepared Statements...\n";
321: if (!$stmt = mysqli_stmt_init($link))
322: printf("[%03d] stmt_init() failed, [%d] %s\n",
323: ++$test_counter, mysqli_errno($link), mysqli_error($link));
324:
325: if (!mysqli_stmt_prepare($stmt, 'SELECT id, label FROM test') ||
326: !mysqli_stmt_execute($stmt))
327: printf("[%03d] prepare/execute failed, [%d] %s\n",
328: ++$test_counter, mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
329:
330: /* by default PS is unbuffered - no change */
331: mysqli_get_client_stats_assert_eq('rows_fetched_from_server_ps', $info, $expected, $test_counter);
332: mysqli_get_client_stats_assert_eq('rows_fetched_from_client_ps_buffered', $info, $expected, $test_counter);
333:
334: if (!mysqli_stmt_store_result($stmt))
335: printf("[%03d] store_result failed, [%d] %s\n",
336: ++$test_counter, mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
337: mysqli_stmt_free_result($stmt);
338:
339: mysqli_get_client_stats_assert_eq('bytes_received_real_data_ps', $info, "0", $test_counter);
340: mysqli_get_client_stats_assert_eq('bytes_received_real_data_normal', $info, $expected, $test_counter);
341:
342: $expected['rows_fetched_from_server_ps'] = (string)($expected['rows_fetched_from_server_ps'] + $num_rows);
343: $expected['result_set_queries'] = (string)($expected['result_set_queries'] + 1);
344: $expected['ps_buffered_sets'] = (string)($expected['ps_buffered_sets'] + 1);
345: $expected['rows_buffered_from_client_ps'] = (string)($expected['rows_buffered_from_client_ps'] + $num_rows);
346:
347:
348: if (!is_array($info = mysqli_get_client_stats()) || empty($info))
349: printf("[%03d] Expecting array/any_non_empty, got %s/%s\n",
350: ++$test_counter, gettype($info), $info);
351:
352: mysqli_get_client_stats_assert_eq('rows_fetched_from_server_ps', $info, $expected, $test_counter);
353: mysqli_get_client_stats_assert_eq('rows_fetched_from_client_ps_buffered', $info, $expected, $test_counter);
354: mysqli_get_client_stats_assert_eq('result_set_queries', $info, $expected, $test_counter);
355: mysqli_get_client_stats_assert_eq('ps_buffered_sets', $info, $expected, $test_counter);
356: mysqli_get_client_stats_assert_eq('rows_buffered_from_client_ps', $info, $expected, $test_counter);
357:
358: mysqli_get_client_stats_assert_eq('bytes_received_real_data_ps', $info, "0", $test_counter);
359:
360: print "Testing buffered Prepared Statements... - fetching all\n";
361:
362: if (!mysqli_stmt_prepare($stmt, 'SELECT id, label FROM test') ||
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:
367: $id = $label = null;
368: if (!mysqli_stmt_bind_result($stmt, $id, $label))
369: printf("[%03d] bind_result failed, [%d] %s\n",
370: ++$test_counter, mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
371:
372: if (!mysqli_stmt_store_result($stmt))
373: printf("[%03d] store_result failed, [%d] %s\n",
374: ++$test_counter, mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
375:
376: while (mysqli_stmt_fetch($stmt))
377: ;
378:
379: $expected['rows_fetched_from_server_ps'] = (string)($expected['rows_fetched_from_server_ps'] + $num_rows);
380: $expected['rows_fetched_from_client_ps_buffered'] = (string)($expected['rows_fetched_from_client_ps_buffered'] + $num_rows);
381: $expected['result_set_queries'] = (string)($expected['result_set_queries'] + 1);
382: $expected['ps_buffered_sets'] = (string)($expected['ps_buffered_sets'] + 1);
383: $expected['rows_buffered_from_client_ps'] = (string)($expected['rows_buffered_from_client_ps'] + $num_rows);
384:
385: if (!is_array($info = mysqli_get_client_stats()) || empty($info))
386: printf("[%03d] Expecting array/any_non_empty, got %s/%s\n",
387: ++$test_counter, gettype($info), $info);
388:
389:
390: mysqli_get_client_stats_assert_gt('bytes_received_real_data_ps', $info, $expected, $test_counter);
391: $expected['bytes_received_real_data_ps'] = $info['bytes_received_real_data_ps'];
392:
393: mysqli_get_client_stats_assert_eq('rows_fetched_from_server_ps', $info, $expected, $test_counter);
394: mysqli_get_client_stats_assert_eq('rows_fetched_from_client_ps_buffered', $info, $expected, $test_counter);
395: mysqli_get_client_stats_assert_eq('result_set_queries', $info, $expected, $test_counter);
396: mysqli_get_client_stats_assert_eq('ps_buffered_sets', $info, $expected, $test_counter);
397: mysqli_get_client_stats_assert_eq('rows_buffered_from_client_ps', $info, $expected, $test_counter);
398:
399: mysqli_stmt_free_result($stmt);
400:
401: print "Testing buffered Prepared Statements... - fetching all but one\n";
402:
403: if (!mysqli_stmt_prepare($stmt, 'SELECT id, label FROM test') ||
404: !mysqli_stmt_execute($stmt))
405: printf("[%03d] prepare/execute failed, [%d] %s\n",
406: ++$test_counter, mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
407:
408: $id = $label = null;
409: if (!mysqli_stmt_bind_result($stmt, $id, $label))
410: printf("[%03d] bind_result failed, [%d] %s\n",
411: ++$test_counter, mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
412:
413: if (!mysqli_stmt_store_result($stmt))
414: printf("[%03d] store_result failed, [%d] %s\n",
415: ++$test_counter, mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
416:
417: for ($i = 0; $i < $num_rows - 1; $i++)
418: mysqli_stmt_fetch($stmt);
419:
420: $expected['rows_fetched_from_server_ps'] = (string)($expected['rows_fetched_from_server_ps'] + $num_rows);
421: $expected['rows_fetched_from_client_ps_buffered'] = (string)($expected['rows_fetched_from_client_ps_buffered'] + $num_rows - 1);
422: $expected['result_set_queries'] = (string)($expected['result_set_queries'] + 1);
423: $expected['ps_buffered_sets'] = (string)($expected['ps_buffered_sets'] + 1);
424: $expected['rows_buffered_from_client_ps'] = (string)($expected['rows_buffered_from_client_ps'] + $num_rows);
425:
426: if (!is_array($info = mysqli_get_client_stats()) || empty($info))
427: printf("[%03d] Expecting array/any_non_empty, got %s/%s\n",
428: ++$test_counter, gettype($info), $info);
429:
430: mysqli_get_client_stats_assert_gt('bytes_received_real_data_ps', $info, $expected, $test_counter);
431: $expected['bytes_received_real_data_ps'] = $info['bytes_received_real_data_ps'];
432:
433: mysqli_get_client_stats_assert_eq('rows_fetched_from_server_ps', $info, $expected, $test_counter);
434: mysqli_get_client_stats_assert_eq('rows_fetched_from_client_ps_buffered', $info, $expected, $test_counter);
435: mysqli_get_client_stats_assert_eq('result_set_queries', $info, $expected, $test_counter);
436: mysqli_get_client_stats_assert_eq('ps_buffered_sets', $info, $expected, $test_counter);
437: mysqli_get_client_stats_assert_eq('rows_buffered_from_client_ps', $info, $expected, $test_counter);
438:
439: $expected['rows_skipped_ps'] = $info['rows_skipped_ps'];
440: mysqli_stmt_free_result($stmt);
441:
442: if (!is_array($info = mysqli_get_client_stats()) || empty($info))
443: printf("[%03d] Expecting array/any_non_empty, got %s/%s\n",
444: ++$test_counter, gettype($info), $info);
445:
446: /* buffered result set - no skipping possible! */
447: mysqli_get_client_stats_assert_eq('rows_skipped_ps', $info, $expected, $test_counter);
448:
449: print "Testing unbuffered Prepared Statements... - fetching all\n";
450:
451: if (!mysqli_stmt_prepare($stmt, 'SELECT id, label FROM test') ||
452: !mysqli_stmt_execute($stmt))
453: printf("[%03d] prepare/execute failed, [%d] %s\n",
454: ++$test_counter, mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
455:
456: $id = $label = null;
457: if (!mysqli_stmt_bind_result($stmt, $id, $label))
458: printf("[%03d] bind_result failed, [%d] %s\n",
459: ++$test_counter, mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
460:
461: $i = 0;
462: while (mysqli_stmt_fetch($stmt))
463: $i++;
464: assert($num_rows = $i);
465:
466: $expected['rows_fetched_from_server_ps'] = (string)($expected['rows_fetched_from_server_ps'] + $num_rows);
467: $expected['rows_fetched_from_client_ps_unbuffered'] = (string)($expected['rows_fetched_from_client_ps_unbuffered'] + $num_rows);
468: $expected['result_set_queries'] = (string)($expected['result_set_queries'] + 1);
469: $expected['ps_unbuffered_sets'] = (string)($expected['ps_unbuffered_sets'] + 1);
470:
471: if (!is_array($info = mysqli_get_client_stats()) || empty($info))
472: printf("[%03d] Expecting array/any_non_empty, got %s/%s\n",
473: ++$test_counter, gettype($info), $info);
474:
475: mysqli_get_client_stats_assert_gt('bytes_received_real_data_ps', $info, $expected, $test_counter);
476: $expected['bytes_received_real_data_ps'] = $info['bytes_received_real_data_ps'];
477:
478: mysqli_get_client_stats_assert_eq('rows_fetched_from_server_ps', $info, $expected, $test_counter);
479: mysqli_get_client_stats_assert_eq('rows_fetched_from_client_ps_unbuffered', $info, $expected, $test_counter);
480: mysqli_get_client_stats_assert_eq('result_set_queries', $info, $expected, $test_counter);
481: mysqli_get_client_stats_assert_eq('ps_unbuffered_sets', $info, $expected, $test_counter);
482: mysqli_get_client_stats_assert_eq('rows_buffered_from_client_ps', $info, $expected, $test_counter);
483:
484: mysqli_stmt_free_result($stmt);
485:
486: print "Testing unbuffered Prepared Statements... - fetching all but one\n";
487:
488: if (!mysqli_stmt_prepare($stmt, 'SELECT id, label FROM test') ||
489: !mysqli_stmt_execute($stmt))
490: printf("[%03d] prepare/execute failed, [%d] %s\n",
491: ++$test_counter, mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
492:
493: $id = $label = null;
494: if (!mysqli_stmt_bind_result($stmt, $id, $label))
495: printf("[%03d] bind_result failed, [%d] %s\n",
496: ++$test_counter, mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
497:
498: for ($i = 0; $i < $num_rows - 1; $i++)
499: mysqli_stmt_fetch($stmt);
500:
501: $expected['rows_fetched_from_server_ps'] = (string)($expected['rows_fetched_from_server_ps'] + $num_rows - 1);
502: $expected['rows_fetched_from_client_ps_unbuffered'] = (string)($expected['rows_fetched_from_client_ps_unbuffered'] + $num_rows - 1);
503: $expected['result_set_queries'] = (string)($expected['result_set_queries'] + 1);
504: $expected['ps_unbuffered_sets'] = (string)($expected['ps_unbuffered_sets'] + 1);
505:
506: if (!is_array($info = mysqli_get_client_stats()) || empty($info))
507: printf("[%03d] Expecting array/any_non_empty, got %s/%s\n",
508: ++$test_counter, gettype($info), $info);
509:
510: mysqli_get_client_stats_assert_gt('bytes_received_real_data_ps', $info, $expected, $test_counter);
511: $expected['bytes_received_real_data_ps'] = $info['bytes_received_real_data_ps'];
512:
513: mysqli_get_client_stats_assert_eq('rows_fetched_from_server_ps', $info, $expected, $test_counter);
514: mysqli_get_client_stats_assert_eq('rows_fetched_from_client_ps_unbuffered', $info, $expected, $test_counter);
515: mysqli_get_client_stats_assert_eq('result_set_queries', $info, $expected, $test_counter);
516: mysqli_get_client_stats_assert_eq('ps_unbuffered_sets', $info, $expected, $test_counter);
517: mysqli_get_client_stats_assert_eq('rows_buffered_from_client_ps', $info, $expected, $test_counter);
518:
519: mysqli_stmt_free_result($stmt);
520: $expected['rows_skipped_ps'] = (string)($expected['rows_skipped_ps'] + 1);
521: $expected['flushed_ps_sets'] = (string)($expected['flushed_ps_sets'] + 1);
522: $expected['rows_fetched_from_server_ps'] = (string)($expected['rows_fetched_from_server_ps'] + 1);
523:
524: if (!is_array($info = mysqli_get_client_stats()) || empty($info))
525: printf("[%03d] Expecting array/any_non_empty, got %s/%s\n",
526: ++$test_counter, gettype($info), $info);
527:
528: mysqli_get_client_stats_assert_eq('bytes_received_real_data_ps', $info, $expected, $test_counter);
529:
530: mysqli_get_client_stats_assert_eq('rows_skipped_ps', $info, $expected, $test_counter);
531: mysqli_get_client_stats_assert_eq('flushed_ps_sets', $info, $expected, $test_counter);
532: mysqli_get_client_stats_assert_eq('rows_fetched_from_server_ps', $info, $expected, $test_counter);
533:
534: /*
535: print "Checking for normal buffered side effects...\n";
536: foreach ($info as $k => $v)
537: if ($info[$k] != $expected[$k])
538: printf("$k - $v != %s\n", $expected[$k]);
539: */
540: print "... done with fetch statistics\n";
541:
542: if (!is_array($info = mysqli_get_client_stats()) || empty($info))
543: printf("[%03d] Expecting array/any_non_empty, got %s/%s\n",
544: ++$test_counter, gettype($info), $info);
545:
546: mysqli_get_client_stats_assert_eq('bytes_received_real_data_normal', $info, $expected, $test_counter);
547: mysqli_get_client_stats_assert_eq('bytes_received_real_data_ps', $info, $expected, $test_counter);
548:
549: //
550: // result_set_queries statistics
551: //
552:
553: if (!is_array($info = mysqli_get_client_stats()) || empty($info))
554: printf("[%03d] Expecting array/any_non_empty, got %s/%s\n",
555: ++$test_counter, gettype($info), $info);
556:
557: if (!$res = mysqli_query($link, "SELECT id, label FROM test"))
558: printf("[%03d] SELECT failed, [%d] %s\n", ++$test_counter,
559: mysqli_errno($link), mysqli_error($link));
560:
561: $rows = 0;
562: while ($row = mysqli_fetch_assoc($res))
563: $rows++;
564:
565: if (0 == $rows)
566: printf("[%03d] Expecting at least one result, [%d] %s\n", ++$test_counter,
567: mysqli_errno($link), mysqli_error($link));
568:
569: mysqli_free_result($res);
570:
571: if (!is_array($new_info = mysqli_get_client_stats()) || empty($new_info))
572: printf("[%03d] Expecting array/any_non_empty, got %s/%s\n",
573: ++$test_counter, gettype($new_info), $new_info);
574:
575: mysqli_get_client_stats_assert_eq('result_set_queries', $new_info, (string)($info['result_set_queries'] + 1), $test_counter);
576: $info = $new_info;
577:
578: mysqli_get_client_stats_assert_gt('bytes_received_real_data_normal', $info, $expected, $test_counter);
579: $expected['bytes_received_real_data_normal'] = $info['bytes_received_real_data_normal'];
580:
581: //
582: // non_result_set_queries - DDL
583: //
584:
585: // CREATE TABLE, DROP TABLE
586: if (!mysqli_query($link, "DROP TABLE IF EXISTS non_result_set_queries_test"))
587: printf("[%03d] DROP TABLE failed, [%d] %s\n", ++$test_counter,
588: mysqli_errno($link), mysqli_error($link));
589:
590: if (!mysqli_query($link, "CREATE TABLE non_result_set_queries_test(id INT) ENGINE = " . $engine)) {
591: printf("[%03d] CREATE TABLE failed, [%d] %s\n", ++$test_counter,
592: mysqli_errno($link), mysqli_error($link));
593: } else {
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: mysqli_get_client_stats_assert_eq('non_result_set_queries', $new_info, (string)($info['non_result_set_queries'] + 2), $test_counter, 'CREATE/DROP TABLE');
598: }
599: $info = $new_info;
600:
601: // ALERT TABLE
602: if (!mysqli_query($link, "ALTER TABLE non_result_set_queries_test ADD label CHAR(1)")) {
603: printf("[%03d] ALTER TABLE failed, [%d] %s\n", ++$test_counter,
604: mysqli_errno($link), mysqli_error($link));
605: } else {
606: if (!is_array($new_info = mysqli_get_client_stats()) || empty($new_info))
607: printf("[%03d] Expecting array/any_non_empty, got %s/%s\n",
608: ++$test_counter, gettype($new_info), $new_info);
609: mysqli_get_client_stats_assert_eq('non_result_set_queries', $new_info, (string)($info['non_result_set_queries'] + 1), $test_counter, 'ALTER TABLE');
610: }
611: $info = $new_info;
612:
613: // CREATE INDEX, DROP INDEX
614: if (!mysqli_query($link, "CREATE INDEX idx_1 ON non_result_set_queries_test(id)")) {
615: printf("[%03d] CREATE INDEX failed, [%d] %s\n", ++$test_counter,
616: mysqli_errno($link), mysqli_error($link));
617: } else {
618:
619: if (!mysqli_query($link, "DROP INDEX idx_1 ON non_result_set_queries_test"))
620: printf("[%03d] DROP INDEX failed, [%d] %s\n", ++$test_counter,
621: mysqli_errno($link), mysqli_error($link));
622:
623: if (!is_array($new_info = mysqli_get_client_stats()) || empty($new_info))
624: printf("[%03d] Expecting array/any_non_empty, got %s/%s\n",
625: ++$test_counter, gettype($new_info), $new_info);
626: mysqli_get_client_stats_assert_eq('non_result_set_queries', $new_info, (string)($info['non_result_set_queries'] + 2), $test_counter, 'DROP INDEX');
627: }
628: $info = $new_info;
629:
630: // RENAME TABLE
631: if (!mysqli_query($link, "DROP TABLE IF EXISTS client_stats_test"))
632: printf("[%03d] Cleanup, DROP TABLE client_stats_test failed, [%d] %s\n", ++$test_counter,
633: mysqli_errno($link), mysqli_error($link));
634:
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: $info = $new_info;
639:
640: if (!mysqli_query($link, "RENAME TABLE non_result_set_queries_test TO client_stats_test")) {
641: printf("[%03d] RENAME TABLE failed, [%d] %s\n", ++$test_counter,
642: mysqli_errno($link), mysqli_error($link));
643:
644: } else {
645: if (!is_array($new_info = mysqli_get_client_stats()) || empty($new_info))
646: printf("[%03d] Expecting array/any_non_empty, got %s/%s\n",
647: ++$test_counter, gettype($new_info), $new_info);
648: mysqli_get_client_stats_assert_eq('non_result_set_queries', $new_info, (string)($info['non_result_set_queries'] + 1), $test_counter, 'RENAME TABLE');
649:
650: }
651: $info = $new_info;
652:
653: if (!mysqli_query($link, "DROP TABLE IF EXISTS non_result_set_queries_test"))
654: printf("[%03d] Cleanup, DROP TABLE failed, [%d] %s\n", ++$test_counter,
655: mysqli_errno($link), mysqli_error($link));
656:
657: if (!mysqli_query($link, "DROP TABLE IF EXISTS client_stats_test"))
658: printf("[%03d] Cleanup, DROP TABLE failed, [%d] %s\n", ++$test_counter,
659: mysqli_errno($link), mysqli_error($link));
660:
661: // Let's see if we have privileges for CREATE DATABASE
662: mysqli_query($link, "DROP DATABASE IF EXISTS mysqli_get_client_stats");
663: if (!is_array($new_info = mysqli_get_client_stats()) || empty($new_info))
664: printf("[%03d] Expecting array/any_non_empty, got %s/%s\n",
665: ++$test_counter, gettype($new_info), $new_info);
666: $info = $new_info;
667:
668:
669: // CREATE, ALTER, RENAME, DROP DATABASE
670: if (mysqli_query($link, "CREATE DATABASE mysqli_get_client_stats")) {
671:
672: if (!is_array($new_info = mysqli_get_client_stats()) || empty($new_info))
673: printf("[%03d] Expecting array/any_non_empty, got %s/%s\n",
674: ++$test_counter, gettype($new_info), $new_info);
675: mysqli_get_client_stats_assert_eq('non_result_set_queries', $new_info, (string)($info['non_result_set_queries'] + 1), $test_counter, 'CREATE DATABASE');
676: $info = $new_info;
677:
678: if (!mysqli_query($link, "ALTER DATABASE DEFAULT CHARACTER SET latin1"))
679: printf("[%03d] ALTER DATABASE failed, [%d] %s\n", ++$test_counter,
680: mysqli_errno($link), mysqli_error($link));
681:
682: if (!is_array($new_info = mysqli_get_client_stats()) || empty($new_info))
683: printf("[%03d] Expecting array/any_non_empty, got %s/%s\n",
684: ++$test_counter, gettype($new_info), $new_info);
685: mysqli_get_client_stats_assert_eq('non_result_set_queries', $new_info, (string)($info['non_result_set_queries'] + 1), $test_counter, 'CREATE DATABASE');
686: $info = $new_info;
687:
688: if (mysqli_get_server_version($link) > 51700) {
689: if (!mysqli_query($link, "RENAME DATABASE mysqli_get_client_stats TO mysqli_get_client_stats_"))
690: printf("[%03d] RENAME DATABASE failed, [%d] %s\n", ++$test_counter,
691: mysqli_errno($link), mysqli_error($link));
692:
693: if (!is_array($new_info = mysqli_get_client_stats()) || empty($new_info))
694: printf("[%03d] Expecting array/any_non_empty, got %s/%s\n",
695: ++$test_counter, gettype($new_info), $new_info);
696: mysqli_get_client_stats_assert_eq('non_result_set_queries', $new_info, (string)($info['non_result_set_queries'] + 1), $test_counter, 'CREATE DATABASE');
697: $info = $new_info;
698: } else {
699: if (!mysqli_query($link, "CREATE DATABASE mysqli_get_client_stats_"))
700: printf("[%03d] CREATE DATABASE failed, [%d] %s\n", ++$test_counter,
701: mysqli_errno($link), mysqli_error($link));
702: if (!is_array($new_info = mysqli_get_client_stats()) || empty($new_info))
703: printf("[%03d] Expecting array/any_non_empty, got %s/%s\n",
704: ++$test_counter, gettype($new_info), $new_info);
705: $info = $new_info;
706: }
707:
708: if (!mysqli_query($link, "DROP DATABASE mysqli_get_client_stats_"))
709: printf("[%03d] DROP DATABASE failed, [%d] %s\n", ++$test_counter,
710: mysqli_errno($link), mysqli_error($link));
711:
712: if (!is_array($new_info = mysqli_get_client_stats()) || empty($new_info))
713: printf("[%03d] Expecting array/any_non_empty, got %s/%s\n",
714: ++$test_counter, gettype($new_info), $new_info);
715: mysqli_get_client_stats_assert_eq('non_result_set_queries', $new_info, (string)($info['non_result_set_queries'] + 1), $test_counter, 'DROP DATABASE');
716: $info = $new_info;
717: }
718:
719: // CREATE SERVER, ALTER SERVER, DROP SERVER
720: // We don't really try to use federated, we just want to see if the syntax works
721: mysqli_query($link, "DROP SERVER IF EXISTS myself");
722:
723: if (!is_array($new_info = mysqli_get_client_stats()) || empty($new_info))
724: printf("[%03d] Expecting array/any_non_empty, got %s/%s\n",
725: ++$test_counter, gettype($new_info), $new_info);
726: $info = $new_info;
727:
728: $sql = sprintf("CREATE SERVER myself FOREIGN DATA WRAPPER mysql OPTIONS (user '%s', password '%s', database '%s')",
729: $user, $passwd, $db);
730: if (mysqli_query($link, $sql)) {
731: // server knows about it
732:
733: if (!is_array($new_info = mysqli_get_client_stats()) || empty($new_info))
734: printf("[%03d] Expecting array/any_non_empty, got %s/%s\n",
735: ++$test_counter, gettype($new_info), $new_info);
736:
737: mysqli_get_client_stats_assert_eq('non_result_set_queries', $new_info, (string)($info['non_result_set_queries'] + 1), $test_counter, 'CREATE SERVER');
738: $info = $new_info;
739:
740: if (!mysqli_query($link, sprintf("ALTER SERVER myself OPTIONS(user '%s_')", $user)))
741: printf("[%03d] ALTER SERVER failed, [%d] %s\n", ++$test_counter,
742: mysqli_errno($link), mysqli_error($link));
743:
744: if (!is_array($new_info = mysqli_get_client_stats()) || empty($new_info))
745: printf("[%03d] Expecting array/any_non_empty, got %s/%s\n",
746: ++$test_counter, gettype($new_info), $new_info);
747: mysqli_get_client_stats_assert_eq('non_result_set_queries', $new_info, (string)($info['non_result_set_queries'] + 1), $test_counter, 'ALTER SERVER');
748: $info = $new_info;
749:
750: if (!mysqli_query($link, "DROP SERVER myself"))
751: printf("[%03d] DROP SERVER failed, [%d] %s\n", ++$test_counter,
752: mysqli_errno($link), mysqli_error($link));
753:
754: if (!is_array($new_info = mysqli_get_client_stats()) || empty($new_info))
755: printf("[%03d] Expecting array/any_non_empty, got %s/%s\n",
756: ++$test_counter, gettype($new_info), $new_info);
757: mysqli_get_client_stats_assert_eq('non_result_set_queries', $new_info, (string)($info['non_result_set_queries'] + 1), $test_counter, 'DROP SERVER');
758: $info = $new_info;
759: }
760:
761: mysqli_get_client_stats_assert_eq('bytes_received_real_data_normal', $info, $expected, $test_counter);
762: mysqli_get_client_stats_assert_eq('bytes_received_real_data_ps', $info, $expected, $test_counter);
763:
764: /*
765: We don't test the NDB ones.
766: 13.1. Data Definition Statements
767: 13.1.3. ALTER LOGFILE GROUP Syntax
768: 13.1.4. ALTER TABLESPACE Syntax
769: 13.1.9. CREATE LOGFILE GROUP Syntax
770: 13.1.10. CREATE TABLESPACE Syntax
771: 13.1.15. DROP LOGFILE GROUP Syntax
772: 13.1.16. DROP TABLESPACE Syntax
773: */
774:
775: //
776: // DML
777: //
778: if (!is_array($new_info = mysqli_get_client_stats()) || empty($new_info))
779: printf("[%03d] Expecting array/any_non_empty, got %s/%s\n",
780: ++$test_counter, gettype($new_info), $new_info);
781: $info = $new_info;
782:
783: if (!mysqli_query($link, "INSERT INTO test(id) VALUES (100)"))
784: printf("[%03d] INSERT failed, [%d] %s\n", ++$test_counter,
785: mysqli_errno($link), mysqli_error($link));
786:
787: if (!is_array($new_info = mysqli_get_client_stats()) || empty($new_info))
788: printf("[%03d] Expecting array/any_non_empty, got %s/%s\n",
789: ++$test_counter, gettype($new_info), $new_info);
790: mysqli_get_client_stats_assert_eq('non_result_set_queries', $new_info, (string)($info['non_result_set_queries'] + 1), $test_counter, 'INSERT');
791: $info = $new_info;
792:
793: if (!mysqli_query($link, "UPDATE test SET label ='z' WHERE id = 100"))
794: printf("[%03d] UPDATE failed, [%d] %s\n", ++$test_counter,
795: mysqli_errno($link), mysqli_error($link));
796:
797: if (!is_array($new_info = mysqli_get_client_stats()) || empty($new_info))
798: printf("[%03d] Expecting array/any_non_empty, got %s/%s\n",
799: ++$test_counter, gettype($new_info), $new_info);
800: mysqli_get_client_stats_assert_eq('non_result_set_queries', $new_info, (string)($info['non_result_set_queries'] + 1), $test_counter, 'UPDATE');
801: $info = $new_info;
802:
803: if (!mysqli_query($link, "REPLACE INTO test(id, label) VALUES (100, 'b')"))
804: printf("[%03d] INSERT failed, [%d] %s\n", ++$test_counter,
805: mysqli_errno($link), mysqli_error($link));
806:
807: if (!is_array($new_info = mysqli_get_client_stats()) || empty($new_info))
808: printf("[%03d] Expecting array/any_non_empty, got %s/%s\n",
809: ++$test_counter, gettype($new_info), $new_info);
810: mysqli_get_client_stats_assert_eq('non_result_set_queries', $new_info, (string)($info['non_result_set_queries'] + 1), $test_counter, 'REPLACE');
811: $info = $new_info;
812:
813: // NOTE: this will NOT update dbl_ddls counter
814: if (!$res = mysqli_query($link, "SELECT id, label FROM test WHERE id = 100"))
815: printf("[%03d] SELECT@dml failed, [%d] %s\n", ++$test_counter,
816: mysqli_errno($link), mysqli_error($link));
817: mysqli_free_result($res);
818:
819: if (!is_array($new_info = mysqli_get_client_stats()) || empty($new_info))
820: printf("[%03d] Expecting array/any_non_empty, got %s/%s\n",
821: ++$test_counter, gettype($new_info), $new_info);
822: mysqli_get_client_stats_assert_eq('non_result_set_queries', $new_info, $info, $test_counter, 'SELECT@dml');
823: $info = $new_info;
824:
825: if (!mysqli_query($link, "DELETE FROM test WHERE id = 100"))
826: printf("[%03d] DELETE failed, [%d] %s\n", ++$test_counter,
827: mysqli_errno($link), mysqli_error($link));
828:
829: if (!is_array($new_info = mysqli_get_client_stats()) || empty($new_info))
830: printf("[%03d] Expecting array/any_non_empty, got %s/%s\n",
831: ++$test_counter, gettype($new_info), $new_info);
832: mysqli_get_client_stats_assert_eq('non_result_set_queries', $new_info, (string)($info['non_result_set_queries'] + 1), $test_counter, 'DELETE');
833: $info = $new_info;
834:
835: if (!$res = mysqli_query($link, "TRUNCATE TABLE test"))
836: printf("[%03d] TRUNCATE failed, [%d] %s\n", ++$test_counter,
837: mysqli_errno($link), mysqli_error($link));
838:
839: if (!is_array($new_info = mysqli_get_client_stats()) || empty($new_info))
840: printf("[%03d] Expecting array/any_non_empty, got %s/%s\n",
841: ++$test_counter, gettype($new_info), $new_info);
842: mysqli_get_client_stats_assert_eq('non_result_set_queries', $new_info, (string)($info['non_result_set_queries'] + 1), $test_counter, 'TRUNCATE');
843: $info = $new_info;
844:
845:
846: $file = tempnam(sys_get_temp_dir(), 'mysqli_test');
847: if ($fp = fopen($file, 'w')) {
848: @fwrite($fp, '1;"a"');
849: fclose($fp);
850: chmod($file, 0644);
851: $sql = sprintf('LOAD DATA LOCAL INFILE "%s" INTO TABLE test', mysqli_real_escape_string($link, $file));
852: if (mysqli_query($link, $sql)) {
853: if (!is_array($new_info = mysqli_get_client_stats()) || empty($new_info))
854: printf("[%03d] Expecting array/any_non_empty, got %s/%s\n",
855: ++$test_counter, gettype($new_info), $new_info);
856: mysqli_get_client_stats_assert_eq('non_result_set_queries', $new_info, (string)($info['non_result_set_queries'] + 1), $test_counter, 'LOAD DATA LOCAL');
857: $info = $new_info;
858: }
859: unlink($file);
860: }
861:
862: mysqli_get_client_stats_assert_eq('bytes_received_real_data_normal', $info, $expected, $test_counter);
863: mysqli_get_client_stats_assert_eq('bytes_received_real_data_ps', $info, $expected, $test_counter);
864:
865: /*
866: We skip those:
867: 13.2. Data Manipulation Statements
868: 13.2.2. DO Syntax
869: 13.2.3. HANDLER Syntax
870: 13.2.5. LOAD DATA INFILE Syntax
871: */
872: mysqli_query($link, "DELETE FROM test");
873: if (!mysqli_query($link, "INSERT INTO test(id, label) VALUES (1, 'a'), (2, 'b')"))
874: printf("[%03d] Cannot insert new records, [%d] %s\n", ++$test_counter,
875: mysqli_errno($link), mysqli_error($link));
876:
877: if (!$res = mysqli_real_query($link, "SELECT id, label FROM test ORDER BY id"))
878: printf("[%03d] Cannot SELECT with mysqli_real_query(), [%d] %s\n", ++$test_counter,
879: mysqli_errno($link), mysqli_error($link));
880:
881: if (!is_object($res = mysqli_use_result($link)))
882: printf("[%03d] mysqli_use_result() failed, [%d] %s\n", ++$test_counter,
883: mysqli_errno($link), mysqli_error($link));
884:
885: while ($row = mysqli_fetch_assoc($res))
886: ;
887: mysqli_free_result($res);
888: if (!is_array($new_info = mysqli_get_client_stats()) || empty($new_info))
889: printf("[%03d] Expecting array/any_non_empty, got %s/%s\n",
890: ++$test_counter, gettype($new_info), $new_info);
891: mysqli_get_client_stats_assert_eq('unbuffered_sets', $new_info, (string)($info['unbuffered_sets'] + 1), $test_counter, 'mysqli_use_result()');
892: $info = $new_info;
893:
894: if (!$res = mysqli_real_query($link, "SELECT id, label FROM test ORDER BY id"))
895: printf("[%03d] Cannot SELECT with mysqli_real_query() II, [%d] %s\n", ++$test_counter,
896: mysqli_errno($link), mysqli_error($link));
897:
898: if (!is_object($res = mysqli_store_result($link)))
899: printf("[%03d] mysqli_use_result() failed, [%d] %s\n", ++$test_counter,
900: mysqli_errno($link), mysqli_error($link));
901:
902: while ($row = mysqli_fetch_assoc($res))
903: ;
904: mysqli_free_result($res);
905: if (!is_array($new_info = mysqli_get_client_stats()) || empty($new_info))
906: printf("[%03d] Expecting array/any_non_empty, got %s/%s\n",
907: ++$test_counter, gettype($new_info), $new_info);
908: mysqli_get_client_stats_assert_eq('buffered_sets', $new_info, (string)($info['buffered_sets'] + 1), $test_counter, 'mysqli_use_result()');
909: $info = $new_info;
910:
911: mysqli_close($link);
912:
913: mysqli_get_client_stats_assert_gt('bytes_received_real_data_normal', $info, $expected, $test_counter);
914: $expected['bytes_received_real_data_normal'] = $info['bytes_received_real_data_normal'];
915: mysqli_get_client_stats_assert_eq('bytes_received_real_data_ps', $info, $expected, $test_counter);
916:
917: /*
918: no_index_used
919: bad_index_used
920: flushed_normal_sets
921: flushed_ps_sets
922: explicit_close
923: implicit_close
924: disconnect_close
925: in_middle_of_command_close
926: explicit_free_result
927: implicit_free_result
928: explicit_stmt_close
929: implicit_stmt_close
930: */
931:
932: print "done!";
933: ?>
934: --CLEAN--
935: <?php
936: require_once("connect.inc");
937: if (!$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket))
938: printf("[c001] [%d] %s\n", mysqli_connect_errno(), mysqli_connect_error());
939:
940: if (!mysqli_query($link, "DROP TABLE IF EXISTS test"))
941: printf("[c002] Cannot drop table, [%d] %s\n", mysqli_errno($link), mysqli_error($link));
942:
943: if (!mysqli_query($link, "DROP TABLE IF EXISTS non_result_set_queries_test"))
944: printf("[c003] Cannot drop table, [%d] %s\n", mysqli_errno($link), mysqli_error($link));
945:
946: if (!mysqli_query($link, "DROP TABLE IF EXISTS client_stats_test"))
947: printf("[c004] Cannot drop table, [%d] %s\n", mysqli_errno($link), mysqli_error($link));
948:
949: if (!mysqli_query($link, "DROP DATABASE IF EXISTS mysqli_get_client_stats_"))
950: printf("[c005] Cannot drop table, [%d] %s\n", mysqli_errno($link), mysqli_error($link));
951:
952: if (!mysqli_query($link, "DROP DATABASE IF EXISTS mysqli_get_client_stats"))
953: printf("[c006] Cannot drop table, [%d] %s\n", mysqli_errno($link), mysqli_error($link));
954:
955: if (!mysqli_query($link, "DROP SERVER IF EXISTS myself"))
956: printf("[c007] Cannot drop table, [%d] %s\n", mysqli_errno($link), mysqli_error($link));
957:
958: mysqli_close($link);
959: ?>
960: --EXPECTF--
961: array(160) {
962: [%u|b%"bytes_sent"]=>
963: %unicode|string%(1) "0"
964: [%u|b%"bytes_received"]=>
965: %unicode|string%(1) "0"
966: [%u|b%"packets_sent"]=>
967: %unicode|string%(1) "0"
968: [%u|b%"packets_received"]=>
969: %unicode|string%(1) "0"
970: [%u|b%"protocol_overhead_in"]=>
971: %unicode|string%(1) "0"
972: [%u|b%"protocol_overhead_out"]=>
973: %unicode|string%(1) "0"
974: [%u|b%"bytes_received_ok_packet"]=>
975: %unicode|string%(1) "0"
976: [%u|b%"bytes_received_eof_packet"]=>
977: %unicode|string%(1) "0"
978: [%u|b%"bytes_received_rset_header_packet"]=>
979: %unicode|string%(1) "0"
980: [%u|b%"bytes_received_rset_field_meta_packet"]=>
981: %unicode|string%(1) "0"
982: [%u|b%"bytes_received_rset_row_packet"]=>
983: %unicode|string%(1) "0"
984: [%u|b%"bytes_received_prepare_response_packet"]=>
985: %unicode|string%(1) "0"
986: [%u|b%"bytes_received_change_user_packet"]=>
987: %unicode|string%(1) "0"
988: [%u|b%"packets_sent_command"]=>
989: %unicode|string%(1) "0"
990: [%u|b%"packets_received_ok"]=>
991: %unicode|string%(1) "0"
992: [%u|b%"packets_received_eof"]=>
993: %unicode|string%(1) "0"
994: [%u|b%"packets_received_rset_header"]=>
995: %unicode|string%(1) "0"
996: [%u|b%"packets_received_rset_field_meta"]=>
997: %unicode|string%(1) "0"
998: [%u|b%"packets_received_rset_row"]=>
999: %unicode|string%(1) "0"
1000: [%u|b%"packets_received_prepare_response"]=>
1001: %unicode|string%(1) "0"
1002: [%u|b%"packets_received_change_user"]=>
1003: %unicode|string%(1) "0"
1004: [%u|b%"result_set_queries"]=>
1005: %unicode|string%(1) "0"
1006: [%u|b%"non_result_set_queries"]=>
1007: %unicode|string%(1) "0"
1008: [%u|b%"no_index_used"]=>
1009: %unicode|string%(1) "0"
1010: [%u|b%"bad_index_used"]=>
1011: %unicode|string%(1) "0"
1012: [%u|b%"slow_queries"]=>
1013: %unicode|string%(1) "0"
1014: [%u|b%"buffered_sets"]=>
1015: %unicode|string%(1) "0"
1016: [%u|b%"unbuffered_sets"]=>
1017: %unicode|string%(1) "0"
1018: [%u|b%"ps_buffered_sets"]=>
1019: %unicode|string%(1) "0"
1020: [%u|b%"ps_unbuffered_sets"]=>
1021: %unicode|string%(1) "0"
1022: [%u|b%"flushed_normal_sets"]=>
1023: %unicode|string%(1) "0"
1024: [%u|b%"flushed_ps_sets"]=>
1025: %unicode|string%(1) "0"
1026: [%u|b%"ps_prepared_never_executed"]=>
1027: %unicode|string%(1) "0"
1028: [%u|b%"ps_prepared_once_executed"]=>
1029: %unicode|string%(1) "0"
1030: [%u|b%"rows_fetched_from_server_normal"]=>
1031: %unicode|string%(1) "0"
1032: [%u|b%"rows_fetched_from_server_ps"]=>
1033: %unicode|string%(1) "0"
1034: [%u|b%"rows_buffered_from_client_normal"]=>
1035: %unicode|string%(1) "0"
1036: [%u|b%"rows_buffered_from_client_ps"]=>
1037: %unicode|string%(1) "0"
1038: [%u|b%"rows_fetched_from_client_normal_buffered"]=>
1039: %unicode|string%(1) "0"
1040: [%u|b%"rows_fetched_from_client_normal_unbuffered"]=>
1041: %unicode|string%(1) "0"
1042: [%u|b%"rows_fetched_from_client_ps_buffered"]=>
1043: %unicode|string%(1) "0"
1044: [%u|b%"rows_fetched_from_client_ps_unbuffered"]=>
1045: %unicode|string%(1) "0"
1046: [%u|b%"rows_fetched_from_client_ps_cursor"]=>
1047: %unicode|string%(1) "0"
1048: [%u|b%"rows_affected_normal"]=>
1049: %unicode|string%(1) "0"
1050: [%u|b%"rows_affected_ps"]=>
1051: %unicode|string%(1) "0"
1052: [%u|b%"rows_skipped_normal"]=>
1053: %unicode|string%(1) "0"
1054: [%u|b%"rows_skipped_ps"]=>
1055: %unicode|string%(1) "0"
1056: [%u|b%"copy_on_write_saved"]=>
1057: %unicode|string%(1) "0"
1058: [%u|b%"copy_on_write_performed"]=>
1059: %unicode|string%(1) "0"
1060: [%u|b%"command_buffer_too_small"]=>
1061: %unicode|string%(1) "0"
1062: [%u|b%"connect_success"]=>
1063: %unicode|string%(1) "0"
1064: [%u|b%"connect_failure"]=>
1065: %unicode|string%(1) "0"
1066: [%u|b%"connection_reused"]=>
1067: %unicode|string%(1) "0"
1068: [%u|b%"reconnect"]=>
1069: %unicode|string%(1) "0"
1070: [%u|b%"pconnect_success"]=>
1071: %unicode|string%(1) "0"
1072: [%u|b%"active_connections"]=>
1073: %unicode|string%(1) "0"
1074: [%u|b%"active_persistent_connections"]=>
1075: %unicode|string%(1) "0"
1076: [%u|b%"explicit_close"]=>
1077: %unicode|string%(1) "0"
1078: [%u|b%"implicit_close"]=>
1079: %unicode|string%(1) "0"
1080: [%u|b%"disconnect_close"]=>
1081: %unicode|string%(1) "0"
1082: [%u|b%"in_middle_of_command_close"]=>
1083: %unicode|string%(1) "0"
1084: [%u|b%"explicit_free_result"]=>
1085: %unicode|string%(1) "0"
1086: [%u|b%"implicit_free_result"]=>
1087: %unicode|string%(1) "0"
1088: [%u|b%"explicit_stmt_close"]=>
1089: %unicode|string%(1) "0"
1090: [%u|b%"implicit_stmt_close"]=>
1091: %unicode|string%(1) "0"
1092: [%u|b%"mem_emalloc_count"]=>
1093: %unicode|string%(1) "0"
1094: [%u|b%"mem_emalloc_amount"]=>
1095: %unicode|string%(1) "0"
1096: [%u|b%"mem_ecalloc_count"]=>
1097: %unicode|string%(1) "0"
1098: [%u|b%"mem_ecalloc_amount"]=>
1099: %unicode|string%(1) "0"
1100: [%u|b%"mem_erealloc_count"]=>
1101: %unicode|string%(1) "0"
1102: [%u|b%"mem_erealloc_amount"]=>
1103: %unicode|string%(1) "0"
1104: [%u|b%"mem_efree_count"]=>
1105: %unicode|string%(1) "0"
1106: [%u|b%"mem_efree_amount"]=>
1107: %unicode|string%(1) "0"
1108: [%u|b%"mem_malloc_count"]=>
1109: %unicode|string%(1) "0"
1110: [%u|b%"mem_malloc_amount"]=>
1111: %unicode|string%(1) "0"
1112: [%u|b%"mem_calloc_count"]=>
1113: %unicode|string%(%d) "%d"
1114: [%u|b%"mem_calloc_amount"]=>
1115: %unicode|string%(%d) "%d"
1116: [%u|b%"mem_realloc_count"]=>
1117: %unicode|string%(1) "0"
1118: [%u|b%"mem_realloc_amount"]=>
1119: %unicode|string%(1) "0"
1120: [%u|b%"mem_free_count"]=>
1121: %unicode|string%(1) "0"
1122: [%u|b%"mem_free_amount"]=>
1123: %unicode|string%(1) "0"
1124: [%u|b%"mem_estrndup_count"]=>
1125: %unicode|string%(1) "0"
1126: [%u|b%"mem_strndup_count"]=>
1127: %unicode|string%(1) "0"
1128: [%u|b%"mem_estndup_count"]=>
1129: %unicode|string%(1) "0"
1130: [%u|b%"mem_strdup_count"]=>
1131: %unicode|string%(1) "0"
1132: [%u|b%"proto_text_fetched_null"]=>
1133: %unicode|string%(1) "0"
1134: [%u|b%"proto_text_fetched_bit"]=>
1135: %unicode|string%(1) "0"
1136: [%u|b%"proto_text_fetched_tinyint"]=>
1137: %unicode|string%(1) "0"
1138: [%u|b%"proto_text_fetched_short"]=>
1139: %unicode|string%(1) "0"
1140: [%u|b%"proto_text_fetched_int24"]=>
1141: %unicode|string%(1) "0"
1142: [%u|b%"proto_text_fetched_int"]=>
1143: %unicode|string%(1) "0"
1144: [%u|b%"proto_text_fetched_bigint"]=>
1145: %unicode|string%(1) "0"
1146: [%u|b%"proto_text_fetched_decimal"]=>
1147: %unicode|string%(1) "0"
1148: [%u|b%"proto_text_fetched_float"]=>
1149: %unicode|string%(1) "0"
1150: [%u|b%"proto_text_fetched_double"]=>
1151: %unicode|string%(1) "0"
1152: [%u|b%"proto_text_fetched_date"]=>
1153: %unicode|string%(1) "0"
1154: [%u|b%"proto_text_fetched_year"]=>
1155: %unicode|string%(1) "0"
1156: [%u|b%"proto_text_fetched_time"]=>
1157: %unicode|string%(1) "0"
1158: [%u|b%"proto_text_fetched_datetime"]=>
1159: %unicode|string%(1) "0"
1160: [%u|b%"proto_text_fetched_timestamp"]=>
1161: %unicode|string%(1) "0"
1162: [%u|b%"proto_text_fetched_string"]=>
1163: %unicode|string%(1) "0"
1164: [%u|b%"proto_text_fetched_blob"]=>
1165: %unicode|string%(1) "0"
1166: [%u|b%"proto_text_fetched_enum"]=>
1167: %unicode|string%(1) "0"
1168: [%u|b%"proto_text_fetched_set"]=>
1169: %unicode|string%(1) "0"
1170: [%u|b%"proto_text_fetched_geometry"]=>
1171: %unicode|string%(1) "0"
1172: [%u|b%"proto_text_fetched_other"]=>
1173: %unicode|string%(1) "0"
1174: [%u|b%"proto_binary_fetched_null"]=>
1175: %unicode|string%(1) "0"
1176: [%u|b%"proto_binary_fetched_bit"]=>
1177: %unicode|string%(1) "0"
1178: [%u|b%"proto_binary_fetched_tinyint"]=>
1179: %unicode|string%(1) "0"
1180: [%u|b%"proto_binary_fetched_short"]=>
1181: %unicode|string%(1) "0"
1182: [%u|b%"proto_binary_fetched_int24"]=>
1183: %unicode|string%(1) "0"
1184: [%u|b%"proto_binary_fetched_int"]=>
1185: %unicode|string%(1) "0"
1186: [%u|b%"proto_binary_fetched_bigint"]=>
1187: %unicode|string%(1) "0"
1188: [%u|b%"proto_binary_fetched_decimal"]=>
1189: %unicode|string%(1) "0"
1190: [%u|b%"proto_binary_fetched_float"]=>
1191: %unicode|string%(1) "0"
1192: [%u|b%"proto_binary_fetched_double"]=>
1193: %unicode|string%(1) "0"
1194: [%u|b%"proto_binary_fetched_date"]=>
1195: %unicode|string%(1) "0"
1196: [%u|b%"proto_binary_fetched_year"]=>
1197: %unicode|string%(1) "0"
1198: [%u|b%"proto_binary_fetched_time"]=>
1199: %unicode|string%(1) "0"
1200: [%u|b%"proto_binary_fetched_datetime"]=>
1201: %unicode|string%(1) "0"
1202: [%u|b%"proto_binary_fetched_timestamp"]=>
1203: %unicode|string%(1) "0"
1204: [%u|b%"proto_binary_fetched_string"]=>
1205: %unicode|string%(1) "0"
1206: [%u|b%"proto_binary_fetched_blob"]=>
1207: %unicode|string%(1) "0"
1208: [%u|b%"proto_binary_fetched_enum"]=>
1209: %unicode|string%(1) "0"
1210: [%u|b%"proto_binary_fetched_set"]=>
1211: %unicode|string%(1) "0"
1212: [%u|b%"proto_binary_fetched_geometry"]=>
1213: %unicode|string%(1) "0"
1214: [%u|b%"proto_binary_fetched_other"]=>
1215: %unicode|string%(1) "0"
1216: [%u|b%"init_command_executed_count"]=>
1217: %unicode|string%(1) "0"
1218: [%u|b%"init_command_failed_count"]=>
1219: %unicode|string%(1) "0"
1220: [%u|b%"com_quit"]=>
1221: %unicode|string%(1) "0"
1222: [%u|b%"com_init_db"]=>
1223: %unicode|string%(1) "0"
1224: [%u|b%"com_query"]=>
1225: %unicode|string%(1) "0"
1226: [%u|b%"com_field_list"]=>
1227: %unicode|string%(1) "0"
1228: [%u|b%"com_create_db"]=>
1229: %unicode|string%(1) "0"
1230: [%u|b%"com_drop_db"]=>
1231: %unicode|string%(1) "0"
1232: [%u|b%"com_refresh"]=>
1233: %unicode|string%(1) "0"
1234: [%u|b%"com_shutdown"]=>
1235: %unicode|string%(1) "0"
1236: [%u|b%"com_statistics"]=>
1237: %unicode|string%(1) "0"
1238: [%u|b%"com_process_info"]=>
1239: %unicode|string%(1) "0"
1240: [%u|b%"com_connect"]=>
1241: %unicode|string%(1) "0"
1242: [%u|b%"com_process_kill"]=>
1243: %unicode|string%(1) "0"
1244: [%u|b%"com_debug"]=>
1245: %unicode|string%(1) "0"
1246: [%u|b%"com_ping"]=>
1247: %unicode|string%(1) "0"
1248: [%u|b%"com_time"]=>
1249: %unicode|string%(1) "0"
1250: [%u|b%"com_delayed_insert"]=>
1251: %unicode|string%(1) "0"
1252: [%u|b%"com_change_user"]=>
1253: %unicode|string%(1) "0"
1254: [%u|b%"com_binlog_dump"]=>
1255: %unicode|string%(1) "0"
1256: [%u|b%"com_table_dump"]=>
1257: %unicode|string%(1) "0"
1258: [%u|b%"com_connect_out"]=>
1259: %unicode|string%(1) "0"
1260: [%u|b%"com_register_slave"]=>
1261: %unicode|string%(1) "0"
1262: [%u|b%"com_stmt_prepare"]=>
1263: %unicode|string%(1) "0"
1264: [%u|b%"com_stmt_execute"]=>
1265: %unicode|string%(1) "0"
1266: [%u|b%"com_stmt_send_long_data"]=>
1267: %unicode|string%(1) "0"
1268: [%u|b%"com_stmt_close"]=>
1269: %unicode|string%(1) "0"
1270: [%u|b%"com_stmt_reset"]=>
1271: %unicode|string%(1) "0"
1272: [%u|b%"com_stmt_set_option"]=>
1273: %unicode|string%(1) "0"
1274: [%u|b%"com_stmt_fetch"]=>
1275: %unicode|string%(1) "0"
1276: [%u|b%"com_deamon"]=>
1277: %unicode|string%(1) "0"
1278: [%u|b%"bytes_received_real_data_normal"]=>
1279: %unicode|string%(1) "0"
1280: [%u|b%"bytes_received_real_data_ps"]=>
1281: %unicode|string%(1) "0"
1282: }
1283: Testing buffered normal...
1284: Testing buffered normal... - SELECT id, label FROM test
1285: Testing unbuffered normal...
1286: Testing unbuffered normal... - SELECT id, label FROM test, not all fetched
1287: Testing if implicit fetching and cleaning happens...
1288: Testing buffered Prepared Statements...
1289: Testing buffered Prepared Statements... - fetching all
1290: Testing buffered Prepared Statements... - fetching all but one
1291: Testing unbuffered Prepared Statements... - fetching all
1292: Testing unbuffered Prepared Statements... - fetching all but one
1293: ... done with fetch statistics
1294: done!
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>