PageRenderTime 44ms CodeModel.GetById 17ms RepoModel.GetById 0ms app.codeStats 0ms

/hphp/test/zend/bad/ext/mysqli/tests/mysqli_class_mysqli_interface.php

http://github.com/facebook/hiphop-php
PHP | 267 lines | 224 code | 39 blank | 4 comment | 21 complexity | 87af07d172c922c1e9aa241dae3aabfd MD5 | raw file
Possible License(s): LGPL-2.1, BSD-2-Clause, BSD-3-Clause, MPL-2.0-no-copyleft-exception, MIT, LGPL-2.0, Apache-2.0
  1. <?php
  2. require('connect.inc');
  3. $mysqli = new mysqli($host, $user, $passwd, $db, $port, $socket);
  4. $link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket);
  5. printf("Parent class:\n");
  6. var_dump(get_parent_class($mysqli));
  7. printf("\nMethods:\n");
  8. $methods = get_class_methods($mysqli);
  9. $expected_methods = array(
  10. 'autocommit' => true,
  11. 'begin_transaction' => true,
  12. 'change_user' => true,
  13. 'character_set_name' => true,
  14. 'close' => true,
  15. 'commit' => true,
  16. 'connect' => true,
  17. 'dump_debug_info' => true,
  18. 'escape_string' => true,
  19. 'get_charset' => true,
  20. 'get_client_info' => true,
  21. 'get_server_info' => true,
  22. 'get_warnings' => true,
  23. 'init' => true,
  24. 'kill' => true,
  25. 'more_results' => true,
  26. 'multi_query' => true,
  27. 'mysqli' => true,
  28. 'next_result' => true,
  29. 'options' => true,
  30. 'ping' => true,
  31. 'prepare' => true,
  32. 'query' => true,
  33. 'real_connect' => true,
  34. 'real_escape_string' => true,
  35. 'real_query' => true,
  36. 'refresh' => true,
  37. 'rollback' => true,
  38. 'release_savepoint' => true,
  39. 'savepoint' => true,
  40. 'select_db' => true,
  41. 'set_charset' => true,
  42. 'set_opt' => true,
  43. 'ssl_set' => true,
  44. 'stat' => true,
  45. 'stmt_init' => true,
  46. 'store_result' => true,
  47. 'thread_safe' => true,
  48. 'use_result' => true,
  49. );
  50. if (version_compare(PHP_VERSION, '5.3.99', '<=')) {
  51. $expected_methods['client_encoding'] = true;
  52. }
  53. if ($IS_MYSQLND) {
  54. // mysqlnd only
  55. /* $expected_methods['get_client_stats'] = true; */
  56. $expected_methods['get_connection_stats'] = true;
  57. $expected_methods['reap_async_query'] = true;
  58. $expected_methods['poll'] = true;
  59. }
  60. /* we should add ruled when to expect them */
  61. if (function_exists('mysqli_debug'))
  62. $expected_methods['debug'] = true;
  63. if (function_exists('ssl_set'))
  64. $expected_methods['ssl_set'] = true;
  65. foreach ($methods as $k => $method) {
  66. if (isset($expected_methods[$method])) {
  67. unset($methods[$k]);
  68. unset($expected_methods[$method]);
  69. }
  70. }
  71. if (!empty($methods)) {
  72. printf("Dumping list of unexpected methods.\n");
  73. var_dump($methods);
  74. }
  75. if (!empty($expected_methods)) {
  76. printf("Dumping list of missing methods.\n");
  77. var_dump($expected_methods);
  78. }
  79. if (empty($methods) && empty($expected_methods))
  80. printf("ok\n");
  81. printf("\nClass variables:\n");
  82. $expected_class_variables = $expected_object_variables = array(
  83. "affected_rows" => true,
  84. "client_info" => true,
  85. "client_version" => true,
  86. "connect_errno" => true,
  87. "connect_error" => true,
  88. "errno" => true,
  89. "error" => true,
  90. "field_count" => true,
  91. "host_info" => true,
  92. "info" => true,
  93. "insert_id" => true,
  94. "protocol_version" => true,
  95. "server_info" => true,
  96. "server_version" => true,
  97. "sqlstate" => true,
  98. "stat" => true,
  99. "thread_id" => true,
  100. "warning_count" => true,
  101. );
  102. if (version_compare(PHP_VERSION, '5.3.99', '>')) {
  103. $expected_class_variables["error_list"] = true;
  104. $expected_object_variables["error_list"] = true;
  105. }
  106. $variables = get_class_vars(get_class($mysqli));
  107. foreach ($variables as $var => $v) {
  108. if (isset($expected_class_variables[$var])) {
  109. unset($expected_class_variables[$var]);
  110. unset($variables[$var]);
  111. }
  112. }
  113. if (!empty($expected_class_variables)) {
  114. printf("Dumping list of missing class variables\n");
  115. var_dump($expected_class_variables);
  116. }
  117. if (!empty($variables)) {
  118. printf("Dumping list of unexpected class variables\n");
  119. var_dump($variables);
  120. }
  121. echo "ok\n";
  122. printf("\nObject variables:\n");
  123. $variables = get_object_vars($mysqli);
  124. foreach ($variables as $var => $v) {
  125. if (isset($expected_object_variables[$var])) {
  126. unset($expected_object_variables[$var]);
  127. unset($variables[$var]);
  128. }
  129. }
  130. if (!empty($expected_object_variables)) {
  131. printf("Dumping list of missing object variables\n");
  132. var_dump($expected_object_variables);
  133. }
  134. if (!empty($variables)) {
  135. printf("Dumping list of unexpected object variables\n");
  136. var_dump($variables);
  137. }
  138. echo "ok\n";
  139. printf("\nMagic, magic properties:\n");
  140. assert(mysqli_affected_rows($link) === $mysqli->affected_rows);
  141. printf("mysqli->affected_rows = '%s'/%s ('%s'/%s)\n",
  142. $mysqli->affected_rows, gettype($mysqli->affected_rows),
  143. mysqli_affected_rows($link), gettype(mysqli_affected_rows($link)));
  144. assert(mysqli_get_client_info() === $mysqli->client_info);
  145. printf("mysqli->client_info = '%s'/%s ('%s'/%s)\n",
  146. $mysqli->client_info, gettype($mysqli->client_info),
  147. mysqli_get_client_info(), gettype(mysqli_get_client_info()));
  148. assert(mysqli_get_client_version() === $mysqli->client_version);
  149. printf("mysqli->client_version = '%s'/%s ('%s'/%s)\n",
  150. $mysqli->client_version, gettype($mysqli->client_version),
  151. mysqli_get_client_version(), gettype(mysqli_get_client_version()));
  152. assert(mysqli_errno($link) === $mysqli->errno);
  153. printf("mysqli->errno = '%s'/%s ('%s'/%s)\n",
  154. $mysqli->errno, gettype($mysqli->errno),
  155. mysqli_errno($link), gettype(mysqli_errno($link)));
  156. assert(mysqli_error($link) === $mysqli->error);
  157. printf("mysqli->error = '%s'/%s ('%s'/%s)\n",
  158. $mysqli->error, gettype($mysqli->error),
  159. mysqli_error($link), gettype(mysqli_error($link)));
  160. if (version_compare(PHP_VERSION, '5.3.99', '>')) {
  161. assert(mysqli_error_list($link) === $mysqli->error_list);
  162. assert(is_array($mysqli->error_list));
  163. }
  164. assert(mysqli_field_count($link) === $mysqli->field_count);
  165. printf("mysqli->field_count = '%s'/%s ('%s'/%s)\n",
  166. $mysqli->field_count, gettype($mysqli->field_count),
  167. mysqli_field_count($link), gettype(mysqli_field_count($link)));
  168. assert(mysqli_insert_id($link) === $mysqli->insert_id);
  169. printf("mysqli->insert_id = '%s'/%s ('%s'/%s)\n",
  170. $mysqli->insert_id, gettype($mysqli->insert_id),
  171. mysqli_insert_id($link), gettype(mysqli_insert_id($link)));
  172. assert(mysqli_sqlstate($link) === $mysqli->sqlstate);
  173. printf("mysqli->sqlstate = '%s'/%s ('%s'/%s)\n",
  174. $mysqli->sqlstate, gettype($mysqli->sqlstate),
  175. mysqli_sqlstate($link), gettype(mysqli_sqlstate($link)));
  176. assert(soundex(mysqli_stat($link)) == soundex($mysqli->stat));
  177. printf("mysqli->stat = '%s'/%s ('%s'/%s)\n",
  178. $mysqli->stat, gettype($mysqli->stat),
  179. mysqli_stat($link), gettype(mysqli_stat($link)));
  180. assert(mysqli_get_host_info($link) === $mysqli->host_info);
  181. printf("mysqli->host_info = '%s'/%s ('%s'/%s)\n",
  182. $mysqli->host_info, gettype($mysqli->host_info),
  183. mysqli_get_host_info($link), gettype(mysqli_get_host_info($link)));
  184. /* note that the data types are different */
  185. assert(mysqli_info($link) == $mysqli->info);
  186. printf("mysqli->info = '%s'/%s ('%s'/%s)\n",
  187. $mysqli->info, gettype($mysqli->info),
  188. mysqli_info($link), gettype(mysqli_info($link)));
  189. assert(mysqli_thread_id($link) > $mysqli->thread_id);
  190. assert(gettype($mysqli->thread_id) == gettype(mysqli_thread_id($link)));
  191. printf("mysqli->thread_id = '%s'/%s ('%s'/%s)\n",
  192. $mysqli->thread_id, gettype($mysqli->thread_id),
  193. mysqli_thread_id($link), gettype(mysqli_thread_id($link)));
  194. assert(mysqli_get_proto_info($link) === $mysqli->protocol_version);
  195. printf("mysqli->protocol_version = '%s'/%s ('%s'/%s)\n",
  196. $mysqli->protocol_version, gettype($mysqli->protocol_version),
  197. mysqli_get_proto_info($link), gettype(mysqli_get_proto_info($link)));
  198. assert(mysqli_get_server_info($link) === $mysqli->server_info);
  199. printf("mysqli->server_info = '%s'/%s ('%s'/%s)\n",
  200. $mysqli->server_info, gettype($mysqli->server_info),
  201. mysqli_get_server_info($link), gettype(mysqli_get_server_info($link)));
  202. assert(mysqli_get_server_version($link) === $mysqli->server_version);
  203. printf("mysqli->server_version = '%s'/%s ('%s'/%s)\n",
  204. $mysqli->server_version, gettype($mysqli->server_version),
  205. mysqli_get_server_version($link), gettype(mysqli_get_server_version($link)));
  206. assert(mysqli_warning_count($link) === $mysqli->warning_count);
  207. printf("mysqli->warning_count = '%s'/%s ('%s'/%s)\n",
  208. $mysqli->warning_count, gettype($mysqli->warning_count),
  209. mysqli_warning_count($link), gettype(mysqli_warning_count($link)));
  210. printf("\nAccess to undefined properties:\n");
  211. printf("mysqli->unknown = '%s'\n", @$mysqli->unknown);
  212. @$mysqli->unknown = 13;
  213. printf("setting mysqli->unknown, mysqli_unknown = '%s'\n", @$mysqli->unknown);
  214. $unknown = 'friday';
  215. @$mysqli->unknown = $unknown;
  216. printf("setting mysqli->unknown, mysqli_unknown = '%s'\n", @$mysqli->unknown);
  217. $mysqli = new my_mysqli($host, $user, $passwd, $db, $port, $socket);
  218. printf("\nAccess hidden properties for MYSLQI_STATUS_INITIALIZED (TODO documentation):\n");
  219. assert(mysqli_connect_error() === $mysqli->connect_error);
  220. printf("mysqli->connect_error = '%s'/%s ('%s'/%s)\n",
  221. $mysqli->connect_error, gettype($mysqli->connect_error),
  222. mysqli_connect_error(), gettype(mysqli_connect_error()));
  223. assert(mysqli_connect_errno() === $mysqli->connect_errno);
  224. printf("mysqli->connect_errno = '%s'/%s ('%s'/%s)\n",
  225. $mysqli->connect_errno, gettype($mysqli->connect_errno),
  226. mysqli_connect_errno(), gettype(mysqli_connect_errno()));
  227. print "done!";
  228. ?>