Annotation of embedaddon/php/ext/mysqli/tests/mysqli_explain_metadata.phpt, revision 1.1.1.1
1.1 misho 1: --TEST--
2: EXPLAIN - metadata
3: --SKIPIF--
4: <?php
5: require_once('skipif.inc');
6: require_once('skipifemb.inc');
7: require_once('skipifconnectfailure.inc');
8: require_once("connect.inc");
9: if (!$IS_MYSQLND)
10: die("skip Open libmysql/MySQL issue http://bugs.mysql.com/?id=62350");
11: ?>
12: --FILE--
13: <?php
14: require_once('connect.inc');
15: require_once('table.inc');
16:
17: if (!$res = mysqli_query($link, 'EXPLAIN SELECT t1.*, t2.* FROM test AS t1, test AS t2'))
18: printf("[001] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
19:
20: $num_rows = 0;
21: $num_fields = 0;
22: $field_names = array();
23: if (!$row = mysqli_fetch_assoc($res)) {
24: printf("[002] Expecting result but got no data [%d] %s\n",
25: mysqli_errno($link), mysqli_error($link));
26: } else {
27: $num_rows++;
28: $num_fields = count($row);
29: foreach ($row as $name => $value)
30: $field_names[$name] = gettype($value);
31: }
32:
33: while ($row = mysqli_fetch_assoc($res))
34: $num_rows++;
35:
36: if (($tmp = mysqli_num_rows($res)) !== $num_rows) {
37: printf("[003] Expecting int/%d got %s/%s\n",
38: $num_rows, gettype($tmp), $tmp);
39: }
40: if (($tmp = mysqli_field_count($link)) !== $num_fields) {
41: printf("[004] Expecting int/%d got %s/%s\n",
42: $num_fields, gettype($tmp), $tmp);
43: }
44: $fields = mysqli_fetch_fields($res);
45: if (($tmp = count($fields)) !== $num_fields) {
46: printf("[005] Expecting int/%d got %s/%s\n",
47: $num_fields, gettype($tmp), $tmp);
48: }
49:
50: foreach ($fields as $k => $field) {
51: $field->max_length = 0;// change it or we will get diff error
52: if (isset($field_names[$field->name])) {
53: unset($field_names[$field->name]);
54: } else {
55: printf("[006] Unexpected field '%s', dumping info\n");
56: var_dump($field);
57: }
58: }
59: if (!empty($field_names)) {
60: printf("[007] Field descriptions missing for the following columns\n");
61: var_dump($field_names);
62: }
63:
64: mysqli_free_result($res);
65:
66: $stmt = mysqli_stmt_init($link);
67: /* Depending on your version, the MySQL server migit not support this */
68: if ($stmt->prepare('EXPLAIN SELECT t1.*, t2.* FROM test AS t1, test AS t2') && $stmt->execute()) {
69: if (!mysqli_stmt_store_result($stmt))
70: printf("[008] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
71:
72: if (!$res_meta = mysqli_stmt_result_metadata($stmt))
73: printf("[009] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
74:
75: if (($tmp = mysqli_stmt_num_rows($stmt)) !== $num_rows) {
76: printf("[010] Expecting int/%d got %s/%s\n",
77: $num_rows, gettype($tmp), $tmp);
78: }
79: if (($tmp = mysqli_stmt_field_count($stmt)) !== $num_fields) {
80: printf("[011] Expecting int/%d got %s/%s\n",
81: $num_fields, gettype($tmp), $tmp);
82: }
83: if (($tmp = mysqli_field_count($link)) !== $num_fields) {
84: printf("[013] Expecting int/%d got %s/%s\n",
85: $num_fields, gettype($tmp), $tmp);
86: }
87: if (($tmp = $res_meta->field_count) !== $num_fields) {
88: printf("[014] Expecting int/%d got %s/%s\n",
89: $num_fields, gettype($tmp), $tmp);
90: }
91: $fields_res_meta = mysqli_fetch_fields($res_meta);
92: if (($tmp = count($fields_res_meta)) !== $num_fields)
93: printf("[015] Expecting int/%d got %s/%s\n",
94: $num_fields, gettype($tmp), $tmp);
95:
96: if ($fields_res_meta != $fields) {
97: printf("[016] Prepared Statement metadata differs from normal metadata, dumping\n");
98: var_dump($fields_res_meta);
99: var_dump($fields);
100: }
101:
102: if (function_exists('mysqli_stmt_get_result') &&
103: $stmt->prepare('EXPLAIN SELECT t1.*, t2.* FROM test AS t1, test AS t2') &&
104: $stmt->execute()) {
105: if (!$res_stmt = mysqli_stmt_get_result($stmt)) {
106: printf("[017] Cannot fetch result from PS [%d] %s\n",
107: mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
108: }
109: if (($tmp = mysqli_num_rows($res_stmt)) !== $num_rows) {
110: printf("[018] Expecting int/%d got %s/%s\n",
111: $num_rows, gettype($tmp), $tmp);
112: }
113: if ((mysqli_stmt_num_rows($stmt)) !== 0) {
114: printf("[019] Expecting int/0 got %s/%s\n", gettype($tmp), $tmp);
115: }
116: if (($tmp = mysqli_stmt_field_count($stmt)) !== $num_fields) {
117: printf("[020] Expecting int/%d got %s/%s\n",
118: $num_fields, gettype($tmp), $tmp);
119:
120: }
121: if (($tmp = $res_stmt->field_count) !== $num_fields) {
122: printf("[021] Expecting int/%d got %s/%s\n",
123: $num_fields, gettype($tmp), $tmp);
124: }
125:
126: $fields_stmt = mysqli_fetch_fields($res_stmt);
127: if (($tmp = count($fields_stmt)) !== $num_fields) {
128: printf("[022] Expecting int/%d got %s/%s\n",
129: $num_fields, gettype($tmp), $tmp);
130: }
131: reset($fields);
132: foreach ($fields_stmt as $fields_stmt_val) {
133: list(,$fields_val) = each($fields);
134: unset($fields_stmt_val->max_length);
135: unset($fields_val->max_length);
136: if ($fields_stmt_val != $fields_val) {
137: printf("[023] PS mysqli_stmt_get_result() metadata seems wrong, dumping\n");
138: var_dump($fields_stmt_val);
139: var_dump($fields_val);
140: }
141: }
142: /*
143: if ($fields_stmt != $fields) {
144: printf("[023] PS mysqli_stmt_get_result() metadata seems wrong, dumping\n");
145: var_dump($fields_stmt);
146: var_dump($fields);
147: }
148: */
149: mysqli_free_result($res_stmt);
150: }
151: }
152: mysqli_stmt_close($stmt);
153:
154: mysqli_close($link);
155: print "done!";
156: ?>
157: --CLEAN--
158: <?php
159: require_once("clean_table.inc");
160: ?>
161: --EXPECTF--
162: done!
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>