mysqli_constants.phpt 7.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240
  1. --TEST--
  2. Constants exported by ext/mysqli
  3. --SKIPIF--
  4. <?php
  5. require_once('skipif.inc');
  6. require_once('skipifemb.inc');
  7. require_once('skipifconnectfailure.inc');
  8. ?>
  9. --FILE--
  10. <?php
  11. require("connect.inc");
  12. require("table.inc");
  13. $php_version = (int)str_replace('.', '', PHP_VERSION);
  14. $constants = get_defined_constants(true);
  15. sort($constants);
  16. $expected_constants = array(
  17. 'MYSQLI_READ_DEFAULT_GROUP' => true,
  18. 'MYSQLI_READ_DEFAULT_FILE' => true,
  19. 'MYSQLI_OPT_CONNECT_TIMEOUT' => true,
  20. 'MYSQLI_OPT_LOCAL_INFILE' => true,
  21. 'MYSQLI_INIT_COMMAND' => true,
  22. 'MYSQLI_CLIENT_SSL' => true,
  23. "MYSQLI_CLIENT_COMPRESS" => true,
  24. "MYSQLI_CLIENT_INTERACTIVE" => true,
  25. "MYSQLI_CLIENT_IGNORE_SPACE" => true,
  26. "MYSQLI_CLIENT_NO_SCHEMA" => true,
  27. "MYSQLI_CLIENT_FOUND_ROWS" => true,
  28. "MYSQLI_STORE_RESULT" => true,
  29. "MYSQLI_USE_RESULT" => true,
  30. "MYSQLI_ASSOC" => true,
  31. "MYSQLI_NUM" => true,
  32. "MYSQLI_BOTH" => true,
  33. "MYSQLI_STMT_ATTR_UPDATE_MAX_LENGTH"=> true,
  34. "MYSQLI_NOT_NULL_FLAG" => true,
  35. "MYSQLI_PRI_KEY_FLAG" => true,
  36. "MYSQLI_UNIQUE_KEY_FLAG" => true,
  37. "MYSQLI_MULTIPLE_KEY_FLAG" => true,
  38. "MYSQLI_BLOB_FLAG" => true,
  39. "MYSQLI_UNSIGNED_FLAG" => true,
  40. "MYSQLI_ZEROFILL_FLAG" => true,
  41. "MYSQLI_AUTO_INCREMENT_FLAG" => true,
  42. "MYSQLI_TIMESTAMP_FLAG" => true,
  43. "MYSQLI_SET_FLAG" => true,
  44. "MYSQLI_NUM_FLAG" => true,
  45. "MYSQLI_ENUM_FLAG" => true,
  46. "MYSQLI_BINARY_FLAG" => true,
  47. "MYSQLI_PART_KEY_FLAG" => true,
  48. "MYSQLI_GROUP_FLAG" => true,
  49. "MYSQLI_SERVER_QUERY_NO_GOOD_INDEX_USED"=> true,
  50. "MYSQLI_SERVER_QUERY_NO_INDEX_USED" => true,
  51. "MYSQLI_TYPE_DECIMAL" => true,
  52. "MYSQLI_TYPE_TINY" => true,
  53. "MYSQLI_TYPE_SHORT" => true,
  54. "MYSQLI_TYPE_LONG" => true,
  55. "MYSQLI_TYPE_FLOAT" => true,
  56. "MYSQLI_TYPE_DOUBLE" => true,
  57. "MYSQLI_TYPE_NULL" => true,
  58. "MYSQLI_TYPE_TIMESTAMP" => true,
  59. "MYSQLI_TYPE_LONGLONG" => true,
  60. "MYSQLI_TYPE_INT24" => true,
  61. "MYSQLI_TYPE_DATE" => true,
  62. "MYSQLI_TYPE_TIME" => true,
  63. "MYSQLI_TYPE_DATETIME" => true,
  64. "MYSQLI_TYPE_YEAR" => true,
  65. "MYSQLI_TYPE_NEWDATE" => true,
  66. "MYSQLI_TYPE_ENUM" => true,
  67. "MYSQLI_TYPE_SET" => true,
  68. "MYSQLI_TYPE_TINY_BLOB" => true,
  69. "MYSQLI_TYPE_MEDIUM_BLOB" => true,
  70. "MYSQLI_TYPE_LONG_BLOB" => true,
  71. "MYSQLI_TYPE_BLOB" => true,
  72. "MYSQLI_TYPE_VAR_STRING" => true,
  73. "MYSQLI_TYPE_STRING" => true,
  74. "MYSQLI_TYPE_CHAR" => true,
  75. "MYSQLI_TYPE_INTERVAL" => true,
  76. "MYSQLI_TYPE_GEOMETRY" => true,
  77. "MYSQLI_NO_DATA" => true,
  78. "MYSQLI_REPORT_INDEX" => true,
  79. "MYSQLI_REPORT_STRICT" => true,
  80. "MYSQLI_REPORT_ALL" => true,
  81. "MYSQLI_REPORT_ERROR" => true,
  82. "MYSQLI_REPORT_OFF" => true,
  83. "MYSQLI_SET_CHARSET_NAME" => true,
  84. "MYSQLI_SET_CHARSET_DIR" => true,
  85. "MYSQLI_REFRESH_GRANT" => true,
  86. "MYSQLI_REFRESH_LOG" => true,
  87. "MYSQLI_REFRESH_TABLES" => true,
  88. "MYSQLI_REFRESH_HOSTS" => true,
  89. "MYSQLI_REFRESH_STATUS" => true,
  90. "MYSQLI_REFRESH_THREADS" => true,
  91. "MYSQLI_REFRESH_SLAVE" => true,
  92. "MYSQLI_REFRESH_MASTER" => true,
  93. "MYSQLI_DEBUG_TRACE_ENABLED" => true,
  94. "MYSQLI_TRANS_START_WITH_CONSISTENT_SNAPSHOT" => true,
  95. "MYSQLI_TRANS_START_READ_WRITE" => true,
  96. "MYSQLI_TRANS_START_READ_ONLY" => true,
  97. "MYSQLI_TRANS_COR_AND_CHAIN" => true,
  98. "MYSQLI_TRANS_COR_AND_NO_CHAIN" => true,
  99. "MYSQLI_TRANS_COR_RELEASE" => true,
  100. "MYSQLI_TRANS_COR_NO_RELEASE" => true,
  101. );
  102. /* depends on the build - experimental */
  103. if ($IS_MYSQLND && defined('MYSQLI_OPT_INT_AND_FLOAT_NATIVE')) {
  104. $expected_constants['MYSQLI_OPT_INT_AND_FLOAT_NATIVE'] = true;
  105. }
  106. if ($IS_MYSQLND && defined('MYSQLI_STORE_RESULT_COPY_DATA')) {
  107. $expected_constants['MYSQLI_STORE_RESULT_COPY_DATA'] = true;
  108. }
  109. if ($IS_MYSQLND || defined('MYSQLI_REFRESH_BACKUP_LOG')) {
  110. $expected_constants['MYSQLI_REFRESH_BACKUP_LOG'] = true;
  111. }
  112. if ($IS_MYSQLND) {
  113. $version = 50007 + 1;
  114. $expected_constants['MYSQLI_OPT_NET_CMD_BUFFER_SIZE'] = true;
  115. $expected_constants['MYSQLI_OPT_NET_READ_BUFFER_SIZE'] = true;
  116. $expected_constants['MYSQLI_ASYNC'] = true;
  117. $expected_constants['MYSQLI_SERVER_PS_OUT_PARAMS'] = true;
  118. } else {
  119. $version = mysqli_get_client_version();
  120. }
  121. if (($version > 51122 && $version < 60000) || ($version > 60003) || $IS_MYSQLND) {
  122. $expected_constants['MYSQLI_ON_UPDATE_NOW_FLAG'] = true;
  123. }
  124. /* First introduced in MySQL 6.0, backported to MySQL 5.5 */
  125. if ($version >= 50500 || $IS_MYSQLND) {
  126. $expected_constants['MYSQLI_SERVER_QUERY_WAS_SLOW'] = true;
  127. }
  128. if ($version >= 50033 || $IS_MYSQLND) {
  129. $expected_constants['MYSQLI_CLIENT_SSL_VERIFY_SERVER_CERT'] = true;
  130. }
  131. if ($IS_MYSQLND) {
  132. $expected_constants['MYSQLI_CLIENT_SSL_DONT_VERIFY_SERVER_CERT'] = true;
  133. }
  134. /* First introduced in MySQL 6.0, backported to MySQL 5.5 */
  135. if ($version >= 50606 || $IS_MYSQLND) {
  136. $expected_constants['MYSQLI_SERVER_PUBLIC_KEY'] = true;
  137. }
  138. if ($version > 50002) {
  139. $expected_constants = array_merge($expected_constants, array(
  140. "MYSQLI_TYPE_NEWDECIMAL" => true,
  141. "MYSQLI_TYPE_BIT" => true,
  142. ));
  143. }
  144. if ($version > 50002 || $IS_MYSQLND) {
  145. $expected_constants['MYSQLI_NO_DEFAULT_VALUE_FLAG'] = true;
  146. }
  147. if ($version > 50003) {
  148. $expected_constants = array_merge($expected_constants, array(
  149. "MYSQLI_STMT_ATTR_CURSOR_TYPE" => true,
  150. "MYSQLI_CURSOR_TYPE_NO_CURSOR" => true,
  151. "MYSQLI_CURSOR_TYPE_READ_ONLY" => true,
  152. "MYSQLI_CURSOR_TYPE_FOR_UPDATE" => true,
  153. "MYSQLI_CURSOR_TYPE_SCROLLABLE" => true,
  154. ));
  155. }
  156. if ($version > 50007) {
  157. $expected_constants = array_merge($expected_constants, array(
  158. "MYSQLI_STMT_ATTR_PREFETCH_ROWS" => true,
  159. ));
  160. }
  161. if ($version > 50110 || $IS_MYSQLND) {
  162. $expected_constants['MYSQLI_OPT_SSL_VERIFY_SERVER_CERT'] = true;
  163. }
  164. /* pretty dump test, but that is the best way to mimic mysql.c */
  165. if (defined('MYSQLI_DATA_TRUNCATED'))
  166. $expected_constants["MYSQLI_DATA_TRUNCATED"] = true;
  167. if (defined('MYSQLI_SERVER_PS_OUT_PARAMS'))
  168. $expected_constants["MYSQLI_SERVER_PS_OUT_PARAMS"] = true;
  169. if (!$IS_MYSQLND) {
  170. /* libmysql only */
  171. /* are they available in all versions of ext/mysqli ?
  172. ... no we must have removed them at some point - for BC, weakening the test
  173. */
  174. if (defined("MYSQLI_RPL_MASTER")) {
  175. $expected_constants["MYSQLI_RPL_MASTER"] = true;
  176. $expected_constants["MYSQLI_RPL_SLAVE"] = true;
  177. $expected_constants["MYSQLI_RPL_ADMIN"] = true;
  178. }
  179. }
  180. if (($IS_MYSQLND && version_compare(PHP_VERSION, ' 5.4.12-dev', '>=')) || (!$IS_MYSQLND && ($version > 50610))) {
  181. /* could be that MySQL/libmysql 5.6.9 had the flag already but it was no stable release */
  182. $expected_constants["MYSQLI_OPT_CAN_HANDLE_EXPIRED_PASSWORDS"] = true;
  183. $expected_constants["MYSQLI_CLIENT_CAN_HANDLE_EXPIRED_PASSWORDS"] = true;
  184. }
  185. if ($IS_MYSQLND) {
  186. $expected_constants["MYSQLI_TYPE_JSON"] = true;
  187. }
  188. $unexpected_constants = array();
  189. foreach ($constants as $group => $consts) {
  190. foreach ($consts as $name => $value) {
  191. if (stristr($name, 'mysqli')) {
  192. $name = strtoupper($name);
  193. if (isset($expected_constants[$name])) {
  194. unset($expected_constants[$name]);
  195. } else {
  196. $unexpected_constants[$name] = $name;
  197. }
  198. }
  199. }
  200. }
  201. if (!empty($unexpected_constants)) {
  202. printf("Dumping list of unexpected constants\n");
  203. var_dump($unexpected_constants);
  204. }
  205. if (!empty($expected_constants)) {
  206. printf("Dumping list of missing constants\n");
  207. var_dump($expected_constants);
  208. }
  209. print "done!";
  210. ?>
  211. --EXPECTF--
  212. done!