1--TEST--
2mysqli_get_client_stats() - PS
3--SKIPIF--
4<?PHP
5require_once('skipif.inc');
6require_once('skipifemb.inc');
7require_once('skipifconnectfailure.inc');
8if (!function_exists('mysqli_get_client_stats')) {
9	die("skip only available with mysqlnd");
10}
11?>
12--INI--
13mysqlnd.collect_statistics=1
14mysqlnd.collect_memory_statistics=1
15--FILE--
16<?php
17	require_once('connect.inc');
18	require_once('table.inc');
19
20	$stats = mysqli_get_client_stats();
21	printf("BEGINNING: rows_fetched_from_client_ps_unbuffered = %d\n",	$stats['rows_fetched_from_client_ps_unbuffered']);
22	printf("BEGINNING: rows_fetched_from_client_ps_buffered = %d\n",	$stats['rows_fetched_from_client_ps_buffered']);
23	printf("BEGINNING: rows_fetched_from_client_ps_cursor = %d\n",	$stats['rows_fetched_from_client_ps_cursor']);
24
25	if (!$stmt = mysqli_stmt_init($link))
26		printf("[001] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
27
28	$id = null;
29	if (!mysqli_stmt_prepare($stmt, 'SELECT id FROM test') ||
30			!mysqli_stmt_execute($stmt) ||
31			!mysqli_stmt_store_result($stmt) ||
32			!mysqli_stmt_bind_result($stmt, $id))
33		printf("[002] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
34
35	$num_rows = 0;
36	while (mysqli_stmt_fetch($stmt))
37		$num_rows++;
38
39	mysqli_stmt_free_result($stmt);
40
41	$after = mysqli_get_client_stats();
42
43	if ($after['rows_fetched_from_client_ps_unbuffered'] != $stats['rows_fetched_from_client_ps_unbuffered'])
44		printf("[003] Unbuffered rows got increased after buffered PS, expecting %d got %d.\n",
45			$stats['rows_fetched_from_client_ps_unbuffered'],
46			$after['rows_fetched_from_client_ps_unbuffered']);
47
48	$stats['rows_fetched_from_client_ps_buffered'] += $num_rows;
49	if ($after['rows_fetched_from_client_ps_buffered'] != $stats['rows_fetched_from_client_ps_buffered'] )
50		printf("[005] Buffered rows should be %d got %d.\n",
51			$stats['rows_fetched_from_client_ps_buffered'],
52			$after['rows_fetched_from_client_ps_buffered']);
53
54	$stats = $after;
55	printf("BUFFERED: rows_fetched_from_client_ps_unbuffered = %d\n",	$stats['rows_fetched_from_client_ps_unbuffered']);
56	printf("BUFFERED: rows_fetched_from_client_ps_buffered = %d\n",	$stats['rows_fetched_from_client_ps_buffered']);
57	printf("BUFFERED: rows_fetched_from_client_ps_cursor = %d\n",	$stats['rows_fetched_from_client_ps_cursor']);
58
59	$id = null;
60	if (!mysqli_stmt_prepare($stmt, 'SELECT id FROM test') ||
61			!mysqli_stmt_execute($stmt) ||
62			!mysqli_stmt_bind_result($stmt, $id))
63		printf("[006] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
64
65	$num_rows = 0;
66	while (mysqli_stmt_fetch($stmt))
67		$num_rows++;
68
69	$after = mysqli_get_client_stats();
70	$stats['rows_fetched_from_client_ps_unbuffered'] += $num_rows;
71	if ($after['rows_fetched_from_client_ps_unbuffered'] != $stats['rows_fetched_from_client_ps_unbuffered'])
72		printf("[007] Unbuffered rows should be %d got %d.\n",
73			$stats['rows_fetched_from_client_ps_unbuffered'],
74			$after['rows_fetched_from_client_ps_unbuffered']);
75
76	if ($after['rows_fetched_from_client_ps_buffered'] != $stats['rows_fetched_from_client_ps_buffered'] )
77		printf("[005] Buffered rows should be unchanged, expecting %d got %d.\n",
78			$stats['rows_fetched_from_client_ps_buffered'],
79			$after['rows_fetched_from_client_ps_buffered']);
80
81	mysqli_stmt_free_result($stmt);
82	mysqli_stmt_close($stmt);
83
84	$stats = $after;
85	printf("UNBUFFERED: rows_fetched_from_client_ps_unbuffered = %d\n",	$stats['rows_fetched_from_client_ps_unbuffered']);
86	printf("UNBUFFERED: rows_fetched_from_client_ps_buffered = %d\n",	$stats['rows_fetched_from_client_ps_buffered']);
87	printf("UNBUFFERED: rows_fetched_from_client_ps_cursor = %d\n",	$stats['rows_fetched_from_client_ps_cursor']);
88
89	mysqli_close($link);
90	print "done!";
91?>
92--CLEAN--
93<?php
94	require_once("clean_table.inc");
95?>
96--EXPECTF--
97BEGINNING: rows_fetched_from_client_ps_unbuffered = %d
98BEGINNING: rows_fetched_from_client_ps_buffered = %d
99BEGINNING: rows_fetched_from_client_ps_cursor = 0
100BUFFERED: rows_fetched_from_client_ps_unbuffered = %d
101BUFFERED: rows_fetched_from_client_ps_buffered = %d
102BUFFERED: rows_fetched_from_client_ps_cursor = 0
103UNBUFFERED: rows_fetched_from_client_ps_unbuffered = %d
104UNBUFFERED: rows_fetched_from_client_ps_buffered = %d
105UNBUFFERED: rows_fetched_from_client_ps_cursor = 0
106done!
107