Annotation of embedaddon/php/ext/mysqli/tests/mysqli_get_client_stats.phpt, revision 1.1.1.1

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: 
                    169:        // real_data_* get incremeneted after mysqli_*fetch*()
                    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>