Annotation of embedaddon/php/ext/mysqli/tests/mysqli_poll_reference.phpt, revision 1.1.1.1
1.1 misho 1: --TEST--
2: mysqli_poll() & references
3: --SKIPIF--
4: <?php
5: require_once('skipif.inc');
6: require_once('skipifemb.inc');
7: require_once('connect.inc');
8: require_once('skipifconnectfailure.inc');
9:
10: if (!$IS_MYSQLND)
11: die("skip mysqlnd only feature, compile PHP using --with-mysqli=mysqlnd");
12:
13: if (!$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket))
14: die("skip cannot connect");
15:
16: if (mysqli_get_server_version($link) < 50012)
17: die("skip Test needs SQL function SLEEP() available as of MySQL 5.0.12");
18:
19: ?>
20: --FILE--
21: <?php
22: require_once('connect.inc');
23:
24: function get_connection() {
25: global $host, $user, $passwd, $db, $port, $socket;
26:
27: if (!$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket))
28: printf("[001] [%d] %s\n", mysqli_connect_errno(), mysqli_connect_error());
29: return $link;
30: }
31:
32:
33: $mysqli1 = get_connection();
34: $mysqli2 = get_connection();
35:
36: var_dump(mysqli_query($mysqli1, "SELECT SLEEP(0.10)", MYSQLI_ASYNC | MYSQLI_USE_RESULT));
37: var_dump(mysqli_query($mysqli2, "SELECT SLEEP(0.20)", MYSQLI_ASYNC | MYSQLI_USE_RESULT));
38:
39: $processed = $loops = 0;
40: do {
41: $loops++;
42: if ($loops > 10) {
43: printf("[002] The queries should have finished already\n");
44: break;
45: }
46: // WARNING: All arrays point to the same object - this will give bogus results!
47: // The behaviour is in line with stream_select(). Be warned, be careful.
48: $links = $errors = $reject = array($mysqli1, $mysqli2);
49: if (0 == ($ready = mysqli_poll($links, $errors, $reject, 0, 50000))) {
50: continue;
51: }
52:
53: foreach ($links as $link) {
54: if ($res = mysqli_reap_async_query($link)) {
55: mysqli_free_result($res);
56: }
57: $processed++;
58: }
59: } while ($processed < 2);
60:
61: mysqli_close($mysqli1);
62: mysqli_close($mysqli2);
63:
64: $mysqli1 = get_connection();
65: $mysqli2 = get_connection();
66:
67: var_dump(mysqli_query($mysqli1, "SELECT SLEEP(0.10)", MYSQLI_ASYNC | MYSQLI_USE_RESULT));
68: var_dump(mysqli_query($mysqli2, "SELECT SLEEP(0.20)", MYSQLI_ASYNC | MYSQLI_USE_RESULT));
69:
70: $processed = $loops = 0;
71: do {
72: $loops++;
73: if ($loops > 10) {
74: printf("[003] The queries should have finished already\n");
75: break;
76: }
77: // WARNING: All arrays point to the same object - this will give bogus results!
78: $links = $errors = array($mysqli1, $mysqli2);
79: $reject = array($mysqli1, $mysqli2);
80: if (0 == ($ready = mysqli_poll($links, $errors, $reject, 0, 50000))) {
81: continue;
82: }
83: foreach ($links as $link) {
84: if ($res = mysqli_reap_async_query($link)) {
85: mysqli_free_result($res);
86: }
87: $processed++;
88: }
89: } while ($processed < 2);
90:
91: mysqli_close($mysqli1);
92: mysqli_close($mysqli2);
93:
94: $mysqli1 = get_connection();
95: $mysqli2 = get_connection();
96:
97: var_dump(mysqli_query($mysqli1, "SELECT SLEEP(0.10)", MYSQLI_ASYNC | MYSQLI_USE_RESULT));
98: var_dump(mysqli_query($mysqli2, "SELECT SLEEP(0.20)", MYSQLI_ASYNC | MYSQLI_USE_RESULT));
99:
100: $processed = $loops = 0;
101: do {
102: $loops++;
103: if ($loops > 10) {
104: printf("[004] The queries should have finished already\n");
105: break;
106: }
107: // WARNING: All arrays point to the same object - this will give bogus results!
108: $links = array($mysqli1, $mysqli2);
109: $errors = $reject = array($mysqli1, $mysqli2);
110: if (0 == ($ready = mysqli_poll($links, $errors, $reject, 0, 50000))) {
111: continue;
112: }
113: foreach ($links as $link) {
114: if ($res = mysqli_reap_async_query($link)) {
115: mysqli_free_result($res);
116: }
117: $processed++;
118: }
119: } while ($processed < 2);
120:
121: mysqli_close($mysqli1);
122: mysqli_close($mysqli2);
123:
124: // This is bogus code and bogus usage - OK to throw no errors!
125: $mysqli1 = get_connection();
126: $mysqli2 = get_connection();
127:
128: var_dump(mysqli_query($mysqli1, "SELECT SLEEP(0.10)", MYSQLI_ASYNC | MYSQLI_USE_RESULT));
129: $thread_id = mysqli_thread_id($mysqli2);
130: printf("Connection %d should be rejected...\n", $thread_id);
131:
132: $processed = $loops = 0;
133: do {
134: $loops++;
135: if ($loops > 10) {
136: printf("[005] The queries should have finished already\n");
137: break;
138: }
139: $links = $errors = $reject = array($mysqli1, $mysqli2);
140: if (0 == ($ready = mysqli_poll($links, $errors, $reject, 0, 50000))) {
141: continue;
142: }
143: // WARNING: Due to the reference issue none of these should ever fire!
144: foreach ($reject as $link) {
145: printf("Connection %d was rejected...\n", mysqli_thread_id($link));
146: if (mysqli_thread_id($link) != $thread_id) {
147: printf("[006] Connector %d should have been rejected. But also %d has been rejected.",
148: $thread_id, mysqli_thread_id($link));
149: }
150: $processed++;
151: }
152: foreach ($errors as $link) {
153: printf("Connection %d has an error...\n", mysqli_thread_id($link));
154: $processed++;
155: }
156: foreach ($links as $link) {
157: if ($res = mysqli_reap_async_query($link)) {
158: mysqli_free_result($res);
159: $processed++;
160: }
161: }
162: } while ($processed < 2);
163:
164: mysqli_close($mysqli1);
165: mysqli_close($mysqli2);
166:
167: $mysqli1 = get_connection();
168: $mysqli2 = get_connection();
169:
170: var_dump(mysqli_query($mysqli1, "SELECT SLEEP(0.10)", MYSQLI_ASYNC | MYSQLI_USE_RESULT));
171: var_dump(mysqli_query($mysqli2, "SELECT SLEEP(0.20)", MYSQLI_ASYNC | MYSQLI_USE_RESULT));
172:
173: $processed = $loops = 0;
174: $all = array($mysqli1, $mysqli2);
175: do {
176: $loops++;
177: if ($loops > 10) {
178: printf("[006] The queries should have finished already\n");
179: break;
180: }
181: $links = $errors = $reject = $all;
182: ob_start();
183: if (0 == ($ready = mysqli_poll($links, $errors, $reject, 0, 50000))) {
184: $tmp = ob_get_contents();
185: ob_end_clean();
186: if ($tmp != '') {
187: printf("Expected error:\n%s\n", $tmp);
188: break;
189: }
190: continue;
191: }
192: foreach ($links as $link) {
193: if ($res = mysqli_reap_async_query($link)) {
194: mysqli_free_result($res);
195: }
196: $processed++;
197: }
198: } while ($processed < 2);
199:
200: $ready = mysqli_poll($links, $errors, $reject, 0, 50000);
201: mysqli_close($mysqli1);
202: mysqli_close($mysqli2);
203:
204: print "done!";
205: ?>
206: --EXPECTF--
207: bool(true)
208: bool(true)
209: bool(true)
210: bool(true)
211: bool(true)
212: bool(true)
213: bool(true)
214: Connection %d should be rejected...
215: Connection %d was rejected...
216: bool(true)
217: bool(true)
218:
219: Warning: mysqli_poll(): All arrays passed are clear in %s on line %d
220: done!
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>