mysqlnd_enum_n_def.h 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722
  1. /*
  2. +----------------------------------------------------------------------+
  3. | PHP Version 7 |
  4. +----------------------------------------------------------------------+
  5. | Copyright (c) 2006-2018 The PHP Group |
  6. +----------------------------------------------------------------------+
  7. | This source file is subject to version 3.01 of the PHP license, |
  8. | that is bundled with this package in the file LICENSE, and is |
  9. | available through the world-wide-web at the following url: |
  10. | http://www.php.net/license/3_01.txt |
  11. | If you did not receive a copy of the PHP license and are unable to |
  12. | obtain it through the world-wide-web, please send a note to |
  13. | license@php.net so we can mail you a copy immediately. |
  14. +----------------------------------------------------------------------+
  15. | Authors: Andrey Hristov <andrey@php.net> |
  16. | Ulf Wendel <uw@php.net> |
  17. | Georg Richter <georg@php.net> |
  18. +----------------------------------------------------------------------+
  19. */
  20. #ifndef MYSQLND_ENUM_N_DEF_H
  21. #define MYSQLND_ENUM_N_DEF_H
  22. #ifndef TRUE
  23. #define TRUE 1
  24. #endif
  25. #ifndef FALSE
  26. #define FALSE 0
  27. #endif
  28. #define MYSQLND_MIN_COMPRESS_LEN 0
  29. #define MYSQLND_MAX_PACKET_SIZE (256L*256L*256L-1)
  30. #define MYSQLND_ASSEMBLED_PACKET_MAX_SIZE 3UL*1024UL*1024UL*1024UL
  31. #define MYSQLND_DEFAULT_AUTH_PROTOCOL "mysql_native_password"
  32. #define MYSQLND_ERRMSG_SIZE 512
  33. #define MYSQLND_SQLSTATE_LENGTH 5
  34. #define MYSQLND_SQLSTATE_NULL "00000"
  35. #define MYSQLND_MAX_ALLOWED_USER_LEN 252 /* 63 char * 4byte . MySQL supports now only 16 char, but let it be forward compatible */
  36. #define MYSQLND_MAX_ALLOWED_DB_LEN 1024 /* 256 char * 4byte. MySQL supports now only 64 char in the tables, but on the FS could be different. Forward compatible. */
  37. #define MYSQLND_NET_CMD_BUFFER_MIN_SIZE 4096
  38. #define MYSQLND_NET_CMD_BUFFER_MIN_SIZE_STR "4096"
  39. #define MYSQLND_STMT_ID_LENGTH 4
  40. #define SERVER_STATUS_IN_TRANS 1 /* Transaction has started */
  41. #define SERVER_STATUS_AUTOCOMMIT 2 /* Server in auto_commit mode */
  42. #define SERVER_MORE_RESULTS_EXISTS 8 /* Multi query - next query exists */
  43. #define SERVER_QUERY_NO_GOOD_INDEX_USED 16
  44. #define SERVER_QUERY_NO_INDEX_USED 32
  45. /*
  46. The server was able to fulfill the clients request and opened a
  47. read-only non-scrollable cursor for a query. This flag comes
  48. in reply to COM_STMT_EXECUTE and COM_STMT_FETCH commands.
  49. */
  50. #define SERVER_STATUS_CURSOR_EXISTS 64
  51. /*
  52. This flag is sent when a read-only cursor is exhausted, in reply to
  53. COM_STMT_FETCH command.
  54. */
  55. #define SERVER_STATUS_LAST_ROW_SENT 128
  56. #define SERVER_STATUS_DB_DROPPED 256 /* A database was dropped */
  57. #define SERVER_STATUS_NO_BACKSLASH_ESCAPES 512
  58. #define SERVER_QUERY_WAS_SLOW 2048
  59. #define SERVER_PS_OUT_PARAMS 4096
  60. #define MYSQLND_NO_DATA 100
  61. #define MYSQLND_DATA_TRUNCATED 101
  62. #define SHA1_MAX_LENGTH 20
  63. #define SCRAMBLE_LENGTH 20
  64. #define SCRAMBLE_LENGTH_323 8
  65. #define CLIENT_LONG_PASSWORD 1 /* new more secure passwords */
  66. #define CLIENT_FOUND_ROWS 2 /* Found instead of affected rows */
  67. #define CLIENT_LONG_FLAG 4 /* Get all column flags */
  68. #define CLIENT_CONNECT_WITH_DB 8 /* One can specify db on connect */
  69. #define CLIENT_NO_SCHEMA 16 /* Don't allow database.table.column */
  70. #define CLIENT_COMPRESS 32 /* Can use compression protocol */
  71. #define CLIENT_ODBC 64 /* Odbc client */
  72. #define CLIENT_LOCAL_FILES 128 /* Can use LOAD DATA LOCAL */
  73. #define CLIENT_IGNORE_SPACE 256 /* Ignore spaces before '(' */
  74. #define CLIENT_PROTOCOL_41 512 /* New 4.1 protocol */
  75. #define CLIENT_INTERACTIVE 1024 /* This is an interactive client */
  76. #define CLIENT_SSL 2048 /* Switch to SSL after handshake */
  77. #define CLIENT_IGNORE_SIGPIPE 4096 /* IGNORE sigpipes */
  78. #define CLIENT_TRANSACTIONS 8192 /* Client knows about transactions */
  79. #define CLIENT_RESERVED 16384 /* Old flag for 4.1 protocol */
  80. #define CLIENT_SECURE_CONNECTION 32768 /* New 4.1 authentication */
  81. #define CLIENT_MULTI_STATEMENTS (1UL << 16) /* Enable/disable multi-stmt support */
  82. #define CLIENT_MULTI_RESULTS (1UL << 17) /* Enable/disable multi-results */
  83. #define CLIENT_PS_MULTI_RESULTS (1UL << 18) /* Multi-results in PS-protocol */
  84. #define CLIENT_PLUGIN_AUTH (1UL << 19) /* Client supports plugin authentication */
  85. #define CLIENT_CONNECT_ATTRS (1UL << 20) /* Client supports connection attributes */
  86. #define CLIENT_PLUGIN_AUTH_LENENC_CLIENT_DATA (1UL << 21) /* Enable authentication response packet to be larger than 255 bytes. */
  87. #define CLIENT_CAN_HANDLE_EXPIRED_PASSWORDS (1UL << 22) /* Don't close the connection for a connection with expired password. */
  88. #define CLIENT_SESSION_TRACK (1UL << 23) /* Extended OK */
  89. /*
  90. This is a mysqlnd extension. CLIENT_ODBC is not used anyway. We will reuse it for our case and translate it to not using SSL peer verification
  91. */
  92. #define CLIENT_SSL_DONT_VERIFY_SERVER_CERT CLIENT_ODBC
  93. #define CLIENT_SSL_VERIFY_SERVER_CERT (1UL << 30)
  94. #define CLIENT_REMEMBER_OPTIONS (1UL << 31)
  95. #define MYSQLND_CAPABILITIES (CLIENT_LONG_PASSWORD | CLIENT_LONG_FLAG | CLIENT_TRANSACTIONS | \
  96. CLIENT_PROTOCOL_41 | CLIENT_SECURE_CONNECTION | \
  97. CLIENT_MULTI_RESULTS | CLIENT_LOCAL_FILES | CLIENT_PLUGIN_AUTH)
  98. #define MYSQLND_PROTOCOL_FLAG_USE_COMPRESSION 1
  99. /* Client Error codes */
  100. #define CR_UNKNOWN_ERROR 2000
  101. #define CR_CONNECTION_ERROR 2002
  102. #define CR_SERVER_GONE_ERROR 2006
  103. #define CR_OUT_OF_MEMORY 2008
  104. #define CR_SERVER_LOST 2013
  105. #define CR_COMMANDS_OUT_OF_SYNC 2014
  106. #define CR_CANT_FIND_CHARSET 2019
  107. #define CR_MALFORMED_PACKET 2027
  108. #define CR_NOT_IMPLEMENTED 2054
  109. #define CR_NO_PREPARE_STMT 2030
  110. #define CR_PARAMS_NOT_BOUND 2031
  111. #define CR_INVALID_PARAMETER_NO 2034
  112. #define CR_INVALID_BUFFER_USE 2035
  113. #define MYSQLND_EE_FILENOTFOUND 7890
  114. #define UNKNOWN_SQLSTATE "HY000"
  115. #define MAX_CHARSET_LEN 32
  116. #define TRANS_START_NO_OPT 0
  117. #define TRANS_START_WITH_CONSISTENT_SNAPSHOT 1
  118. #define TRANS_START_READ_WRITE 2
  119. #define TRANS_START_READ_ONLY 4
  120. #define TRANS_COR_NO_OPT 0
  121. #define TRANS_COR_AND_CHAIN 1
  122. #define TRANS_COR_AND_NO_CHAIN 2
  123. #define TRANS_COR_RELEASE 4
  124. #define TRANS_COR_NO_RELEASE 8
  125. typedef enum mysqlnd_extension
  126. {
  127. MYSQLND_MYSQL = 0,
  128. MYSQLND_MYSQLI
  129. } enum_mysqlnd_extension;
  130. enum
  131. {
  132. MYSQLND_FETCH_ASSOC = 1,
  133. MYSQLND_FETCH_NUM = 2,
  134. MYSQLND_FETCH_BOTH = 1|2
  135. };
  136. /* Follow libmysql convention */
  137. typedef enum func_status
  138. {
  139. PASS = 0,
  140. FAIL = 1
  141. } enum_func_status;
  142. typedef enum mysqlnd_query_type
  143. {
  144. QUERY_UPSERT,
  145. QUERY_SELECT,
  146. QUERY_LOAD_LOCAL
  147. } enum_mysqlnd_query_type;
  148. typedef enum mysqlnd_res_type
  149. {
  150. MYSQLND_RES_NORMAL = 1,
  151. MYSQLND_RES_PS_BUF,
  152. MYSQLND_RES_PS_UNBUF
  153. } enum_mysqlnd_res_type;
  154. typedef enum mysqlnd_send_query_type
  155. {
  156. MYSQLND_SEND_QUERY_IMPLICIT = 0,
  157. MYSQLND_SEND_QUERY_EXPLICIT
  158. } enum_mysqlnd_send_query_type;
  159. typedef enum mysqlnd_reap_result_type
  160. {
  161. MYSQLND_REAP_RESULT_IMPLICIT = 0,
  162. MYSQLND_REAP_RESULT_EXPLICIT
  163. } enum_mysqlnd_reap_result_type;
  164. typedef enum mysqlnd_send_execute_type
  165. {
  166. MYSQLND_SEND_EXECUTE_IMPLICIT = 0,
  167. MYSQLND_SEND_EXECUTE_EXPLICIT
  168. } enum_mysqlnd_send_execute_type;
  169. typedef enum mysqlnd_parse_exec_response_type
  170. {
  171. MYSQLND_PARSE_EXEC_RESPONSE_IMPLICIT = 0,
  172. MYSQLND_PARSE_EXEC_RESPONSE_IMPLICIT_NEXT_RESULT,
  173. MYSQLND_PARSE_EXEC_RESPONSE_IMPLICIT_OUT_VARIABLES,
  174. MYSQLND_PARSE_EXEC_RESPONSE_EXPLICIT,
  175. } enum_mysqlnd_parse_exec_response_type;
  176. typedef enum mysqlnd_client_option
  177. {
  178. MYSQL_OPT_CONNECT_TIMEOUT,
  179. MYSQL_OPT_COMPRESS,
  180. MYSQL_OPT_NAMED_PIPE,
  181. MYSQL_INIT_COMMAND,
  182. MYSQL_READ_DEFAULT_FILE,
  183. MYSQL_READ_DEFAULT_GROUP,
  184. MYSQL_SET_CHARSET_DIR,
  185. MYSQL_SET_CHARSET_NAME,
  186. MYSQL_OPT_LOCAL_INFILE,
  187. MYSQL_OPT_PROTOCOL,
  188. MYSQL_SHARED_MEMORY_BASE_NAME,
  189. MYSQL_OPT_READ_TIMEOUT,
  190. MYSQL_OPT_WRITE_TIMEOUT,
  191. MYSQL_OPT_USE_RESULT,
  192. MYSQL_OPT_USE_REMOTE_CONNECTION,
  193. MYSQL_OPT_USE_EMBEDDED_CONNECTION,
  194. MYSQL_OPT_GUESS_CONNECTION,
  195. MYSQL_SET_CLIENT_IP,
  196. MYSQL_SECURE_AUTH,
  197. MYSQL_REPORT_DATA_TRUNCATION,
  198. MYSQL_OPT_RECONNECT,
  199. MYSQL_OPT_SSL_VERIFY_SERVER_CERT,
  200. MYSQL_PLUGIN_DIR,
  201. MYSQL_DEFAULT_AUTH,
  202. MYSQL_OPT_BIND,
  203. MYSQL_OPT_SSL_KEY,
  204. MYSQL_OPT_SSL_CERT,
  205. MYSQL_OPT_SSL_CA,
  206. MYSQL_OPT_SSL_CAPATH,
  207. MYSQL_OPT_SSL_CIPHER,
  208. MYSQL_OPT_SSL_CRL,
  209. MYSQL_OPT_SSL_CRLPATH,
  210. MYSQL_OPT_CONNECT_ATTR_RESET,
  211. MYSQL_OPT_CONNECT_ATTR_ADD,
  212. MYSQL_OPT_CONNECT_ATTR_DELETE,
  213. MYSQL_SERVER_PUBLIC_KEY,
  214. MYSQL_ENABLE_CLEARTEXT_PLUGIN,
  215. MYSQL_OPT_CAN_HANDLE_EXPIRED_PASSWORDS,
  216. MYSQL_OPT_SSL_ENFORCE,
  217. MYSQL_OPT_MAX_ALLOWED_PACKET,
  218. MYSQL_OPT_NET_BUFFER_LENGTH,
  219. MYSQL_OPT_TLS_VERSION,
  220. MYSQL_OPT_SSL_MODE,
  221. MYSQLND_DEPRECATED_ENUM1 = 200,
  222. #ifdef MYSQLND_STRING_TO_INT_CONVERSION
  223. MYSQLND_OPT_INT_AND_FLOAT_NATIVE = 201,
  224. #endif
  225. MYSQLND_OPT_NET_CMD_BUFFER_SIZE = 202,
  226. MYSQLND_OPT_NET_READ_BUFFER_SIZE = 203,
  227. MYSQLND_OPT_SSL_KEY = 204,
  228. MYSQLND_OPT_SSL_CERT = 205,
  229. MYSQLND_OPT_SSL_CA = 206,
  230. MYSQLND_OPT_SSL_CAPATH = 207,
  231. MYSQLND_OPT_SSL_CIPHER = 208,
  232. MYSQLND_OPT_SSL_PASSPHRASE = 209,
  233. MYSQLND_OPT_MAX_ALLOWED_PACKET = 210,
  234. MYSQLND_OPT_AUTH_PROTOCOL = 211
  235. } enum_mysqlnd_client_option;
  236. typedef enum mysqlnd_session_protocol_type
  237. {
  238. MYSQL_PROTOCOL_DEFAULT = 0,
  239. MYSQL_PROTOCOL_TCP, /* all, supported */
  240. MYSQL_PROTOCOL_SOCKET, /* unix, supported */
  241. MYSQL_PROTOCOL_PIPE, /* win32, not-supported */
  242. MYSQL_PROTOCOL_MEMORY, /* win32, not-supported */
  243. MYSQL_PROTOCOL_LAST
  244. } enum_mysqlnd_session_protocol_type;
  245. typedef enum mysqlnd_field_types
  246. {
  247. MYSQL_TYPE_DECIMAL = 0,
  248. MYSQL_TYPE_TINY = 1,
  249. MYSQL_TYPE_SHORT = 2,
  250. MYSQL_TYPE_LONG = 3,
  251. MYSQL_TYPE_FLOAT = 4,
  252. MYSQL_TYPE_DOUBLE = 5,
  253. MYSQL_TYPE_NULL = 6,
  254. MYSQL_TYPE_TIMESTAMP= 7,
  255. MYSQL_TYPE_LONGLONG = 8,
  256. MYSQL_TYPE_INT24 = 9,
  257. MYSQL_TYPE_DATE = 10,
  258. MYSQL_TYPE_TIME = 11,
  259. MYSQL_TYPE_DATETIME = 12,
  260. MYSQL_TYPE_YEAR = 13,
  261. MYSQL_TYPE_NEWDATE = 14,
  262. MYSQL_TYPE_VARCHAR = 15,
  263. MYSQL_TYPE_BIT = 16,
  264. MYSQL_TYPE_JSON=245,
  265. MYSQL_TYPE_NEWDECIMAL=246,
  266. MYSQL_TYPE_ENUM=247,
  267. MYSQL_TYPE_SET=248,
  268. MYSQL_TYPE_TINY_BLOB=249,
  269. MYSQL_TYPE_MEDIUM_BLOB=250,
  270. MYSQL_TYPE_LONG_BLOB=251,
  271. MYSQL_TYPE_BLOB=252,
  272. MYSQL_TYPE_VAR_STRING=253,
  273. MYSQL_TYPE_STRING=254,
  274. MYSQL_TYPE_GEOMETRY=255
  275. } enum_mysqlnd_field_types;
  276. /* Please update this if there is a new type after MYSQL_TYPE_GEOMETRY */
  277. #define MYSQL_TYPE_LAST MYSQL_TYPE_GEOMETRY
  278. typedef enum mysqlnd_server_option
  279. {
  280. MYSQL_OPTION_MULTI_STATEMENTS_ON,
  281. MYSQL_OPTION_MULTI_STATEMENTS_OFF
  282. } enum_mysqlnd_server_option;
  283. #define FIELD_TYPE_DECIMAL MYSQL_TYPE_DECIMAL
  284. #define FIELD_TYPE_NEWDECIMAL MYSQL_TYPE_NEWDECIMAL
  285. #define FIELD_TYPE_TINY MYSQL_TYPE_TINY
  286. #define FIELD_TYPE_SHORT MYSQL_TYPE_SHORT
  287. #define FIELD_TYPE_LONG MYSQL_TYPE_LONG
  288. #define FIELD_TYPE_FLOAT MYSQL_TYPE_FLOAT
  289. #define FIELD_TYPE_DOUBLE MYSQL_TYPE_DOUBLE
  290. #define FIELD_TYPE_NULL MYSQL_TYPE_NULL
  291. #define FIELD_TYPE_TIMESTAMP MYSQL_TYPE_TIMESTAMP
  292. #define FIELD_TYPE_LONGLONG MYSQL_TYPE_LONGLONG
  293. #define FIELD_TYPE_INT24 MYSQL_TYPE_INT24
  294. #define FIELD_TYPE_DATE MYSQL_TYPE_DATE
  295. #define FIELD_TYPE_TIME MYSQL_TYPE_TIME
  296. #define FIELD_TYPE_DATETIME MYSQL_TYPE_DATETIME
  297. #define FIELD_TYPE_YEAR MYSQL_TYPE_YEAR
  298. #define FIELD_TYPE_NEWDATE MYSQL_TYPE_NEWDATE
  299. #define FIELD_TYPE_ENUM MYSQL_TYPE_ENUM
  300. #define FIELD_TYPE_SET MYSQL_TYPE_SET
  301. #define FIELD_TYPE_JSON MYSQL_TYPE_JSON
  302. #define FIELD_TYPE_TINY_BLOB MYSQL_TYPE_TINY_BLOB
  303. #define FIELD_TYPE_MEDIUM_BLOB MYSQL_TYPE_MEDIUM_BLOB
  304. #define FIELD_TYPE_LONG_BLOB MYSQL_TYPE_LONG_BLOB
  305. #define FIELD_TYPE_BLOB MYSQL_TYPE_BLOB
  306. #define FIELD_TYPE_VAR_STRING MYSQL_TYPE_VAR_STRING
  307. #define FIELD_TYPE_STRING MYSQL_TYPE_STRING
  308. #define FIELD_TYPE_CHAR MYSQL_TYPE_TINY
  309. #define FIELD_TYPE_INTERVAL MYSQL_TYPE_ENUM
  310. #define FIELD_TYPE_GEOMETRY MYSQL_TYPE_GEOMETRY
  311. #define FIELD_TYPE_BIT MYSQL_TYPE_BIT
  312. #define NOT_NULL_FLAG 1
  313. #define PRI_KEY_FLAG 2
  314. #define UNIQUE_KEY_FLAG 4
  315. #define MULTIPLE_KEY_FLAG 8
  316. #define BLOB_FLAG 16
  317. #define UNSIGNED_FLAG 32
  318. #define ZEROFILL_FLAG 64
  319. #define BINARY_FLAG 128
  320. #define ENUM_FLAG 256
  321. #define AUTO_INCREMENT_FLAG 512
  322. #define TIMESTAMP_FLAG 1024
  323. #define SET_FLAG 2048
  324. #define NO_DEFAULT_VALUE_FLAG 4096
  325. #define ON_UPDATE_NOW_FLAG 8192
  326. #define PART_KEY_FLAG 16384
  327. #define GROUP_FLAG 32768
  328. #define NUM_FLAG 32768
  329. #define IS_PRI_KEY(n) ((n) & PRI_KEY_FLAG)
  330. #define IS_NOT_NULL(n) ((n) & NOT_NULL_FLAG)
  331. #define IS_BLOB(n) ((n) & BLOB_FLAG)
  332. #define IS_NUM(t) ((t) <= FIELD_TYPE_INT24 || (t) == FIELD_TYPE_YEAR || (t) == FIELD_TYPE_NEWDECIMAL)
  333. /* see mysqlnd_charset.c for more information */
  334. #define MYSQLND_BINARY_CHARSET_NR 63
  335. /*
  336. /-----> CONN_CLOSE <---------------\
  337. | ^ \
  338. | | \
  339. CONN_READY -> CONN_QUERY_SENT -> CONN_FETCHING_DATA
  340. ^ |
  341. \-------------------------------------/
  342. */
  343. typedef enum mysqlnd_connection_state
  344. {
  345. CONN_ALLOCED = 0,
  346. CONN_READY = 1,
  347. CONN_QUERY_SENT = 2,
  348. CONN_SENDING_LOAD_DATA = 3,
  349. CONN_FETCHING_DATA = 4,
  350. CONN_NEXT_RESULT_PENDING = 5,
  351. CONN_QUIT_SENT = 6 /* object is "destroyed" at this stage */
  352. } enum_mysqlnd_connection_state;
  353. typedef enum mysqlnd_stmt_state
  354. {
  355. MYSQLND_STMT_INITTED = 0,
  356. MYSQLND_STMT_PREPARED = 1,
  357. MYSQLND_STMT_EXECUTED = 2,
  358. MYSQLND_STMT_WAITING_USE_OR_STORE = 3,
  359. MYSQLND_STMT_USE_OR_STORE_CALLED = 4,
  360. MYSQLND_STMT_USER_FETCHING = 5/* fetch_row_buff or fetch_row_unbuf */
  361. } enum_mysqlnd_stmt_state;
  362. typedef enum param_bind_flags
  363. {
  364. MYSQLND_PARAM_BIND_BLOB_USED = 1
  365. } enum_param_bind_flags;
  366. /* PS */
  367. enum mysqlnd_stmt_attr
  368. {
  369. STMT_ATTR_UPDATE_MAX_LENGTH,
  370. STMT_ATTR_CURSOR_TYPE,
  371. STMT_ATTR_PREFETCH_ROWS
  372. };
  373. enum myslqnd_cursor_type
  374. {
  375. CURSOR_TYPE_NO_CURSOR= 0,
  376. CURSOR_TYPE_READ_ONLY= 1,
  377. CURSOR_TYPE_FOR_UPDATE= 2,
  378. CURSOR_TYPE_SCROLLABLE= 4
  379. };
  380. typedef enum mysqlnd_connection_close_type
  381. {
  382. MYSQLND_CLOSE_EXPLICIT = 0,
  383. MYSQLND_CLOSE_IMPLICIT,
  384. MYSQLND_CLOSE_DISCONNECTED,
  385. MYSQLND_CLOSE_LAST /* for checking, should always be last */
  386. } enum_connection_close_type;
  387. typedef enum mysqlnd_collected_stats
  388. {
  389. STAT_BYTES_SENT,
  390. STAT_BYTES_RECEIVED,
  391. STAT_PACKETS_SENT,
  392. STAT_PACKETS_RECEIVED,
  393. STAT_PROTOCOL_OVERHEAD_IN,
  394. STAT_PROTOCOL_OVERHEAD_OUT,
  395. STAT_BYTES_RECEIVED_OK,
  396. STAT_BYTES_RECEIVED_EOF,
  397. STAT_BYTES_RECEIVED_RSET_HEADER,
  398. STAT_BYTES_RECEIVED_RSET_FIELD_META,
  399. STAT_BYTES_RECEIVED_RSET_ROW,
  400. STAT_BYTES_RECEIVED_PREPARE_RESPONSE,
  401. STAT_BYTES_RECEIVED_CHANGE_USER,
  402. STAT_PACKETS_SENT_CMD,
  403. STAT_PACKETS_RECEIVED_OK,
  404. STAT_PACKETS_RECEIVED_EOF,
  405. STAT_PACKETS_RECEIVED_RSET_HEADER,
  406. STAT_PACKETS_RECEIVED_RSET_FIELD_META,
  407. STAT_PACKETS_RECEIVED_RSET_ROW,
  408. STAT_PACKETS_RECEIVED_PREPARE_RESPONSE,
  409. STAT_PACKETS_RECEIVED_CHANGE_USER,
  410. STAT_RSET_QUERY,
  411. STAT_NON_RSET_QUERY,
  412. STAT_NO_INDEX_USED,
  413. STAT_BAD_INDEX_USED,
  414. STAT_QUERY_WAS_SLOW,
  415. STAT_BUFFERED_SETS,
  416. STAT_UNBUFFERED_SETS,
  417. STAT_PS_BUFFERED_SETS,
  418. STAT_PS_UNBUFFERED_SETS,
  419. STAT_FLUSHED_NORMAL_SETS,
  420. STAT_FLUSHED_PS_SETS,
  421. STAT_PS_PREPARED_NEVER_EXECUTED,
  422. STAT_PS_PREPARED_ONCE_USED,
  423. STAT_ROWS_FETCHED_FROM_SERVER_NORMAL,
  424. STAT_ROWS_FETCHED_FROM_SERVER_PS,
  425. STAT_ROWS_BUFFERED_FROM_CLIENT_NORMAL,
  426. STAT_ROWS_BUFFERED_FROM_CLIENT_PS,
  427. STAT_ROWS_FETCHED_FROM_CLIENT_NORMAL_BUF,
  428. STAT_ROWS_FETCHED_FROM_CLIENT_NORMAL_UNBUF,
  429. STAT_ROWS_FETCHED_FROM_CLIENT_PS_BUF,
  430. STAT_ROWS_FETCHED_FROM_CLIENT_PS_UNBUF,
  431. STAT_ROWS_FETCHED_FROM_CLIENT_PS_CURSOR,
  432. STAT_ROWS_AFFECTED_NORMAL,
  433. STAT_ROWS_AFFECTED_PS,
  434. STAT_ROWS_SKIPPED_NORMAL,
  435. STAT_ROWS_SKIPPED_PS,
  436. STAT_COPY_ON_WRITE_SAVED,
  437. STAT_COPY_ON_WRITE_PERFORMED,
  438. STAT_CMD_BUFFER_TOO_SMALL,
  439. STAT_CONNECT_SUCCESS,
  440. STAT_CONNECT_FAILURE,
  441. STAT_CONNECT_REUSED,
  442. STAT_RECONNECT,
  443. STAT_PCONNECT_SUCCESS,
  444. STAT_OPENED_CONNECTIONS,
  445. STAT_OPENED_PERSISTENT_CONNECTIONS,
  446. STAT_CLOSE_EXPLICIT,
  447. STAT_CLOSE_IMPLICIT,
  448. STAT_CLOSE_DISCONNECT,
  449. STAT_CLOSE_IN_MIDDLE,
  450. STAT_FREE_RESULT_EXPLICIT,
  451. STAT_FREE_RESULT_IMPLICIT,
  452. STAT_STMT_CLOSE_EXPLICIT,
  453. STAT_STMT_CLOSE_IMPLICIT,
  454. STAT_MEM_EMALLOC_COUNT,
  455. STAT_MEM_EMALLOC_AMOUNT,
  456. STAT_MEM_ECALLOC_COUNT,
  457. STAT_MEM_ECALLOC_AMOUNT,
  458. STAT_MEM_EREALLOC_COUNT,
  459. STAT_MEM_EREALLOC_AMOUNT,
  460. STAT_MEM_EFREE_COUNT,
  461. STAT_MEM_EFREE_AMOUNT,
  462. STAT_MEM_MALLOC_COUNT,
  463. STAT_MEM_MALLOC_AMOUNT,
  464. STAT_MEM_CALLOC_COUNT,
  465. STAT_MEM_CALLOC_AMOUNT,
  466. STAT_MEM_REALLOC_COUNT,
  467. STAT_MEM_REALLOC_AMOUNT,
  468. STAT_MEM_FREE_COUNT,
  469. STAT_MEM_FREE_AMOUNT,
  470. STAT_MEM_ESTRNDUP_COUNT,
  471. STAT_MEM_STRNDUP_COUNT,
  472. STAT_MEM_ESTRDUP_COUNT,
  473. STAT_MEM_STRDUP_COUNT,
  474. STAT_MEM_EDUP_COUNT,
  475. STAT_MEM_DUP_COUNT,
  476. STAT_TEXT_TYPE_FETCHED_NULL,
  477. STAT_TEXT_TYPE_FETCHED_BIT,
  478. STAT_TEXT_TYPE_FETCHED_INT8,
  479. STAT_TEXT_TYPE_FETCHED_INT16,
  480. STAT_TEXT_TYPE_FETCHED_INT24,
  481. STAT_TEXT_TYPE_FETCHED_INT32,
  482. STAT_TEXT_TYPE_FETCHED_INT64,
  483. STAT_TEXT_TYPE_FETCHED_DECIMAL,
  484. STAT_TEXT_TYPE_FETCHED_FLOAT,
  485. STAT_TEXT_TYPE_FETCHED_DOUBLE,
  486. STAT_TEXT_TYPE_FETCHED_DATE,
  487. STAT_TEXT_TYPE_FETCHED_YEAR,
  488. STAT_TEXT_TYPE_FETCHED_TIME,
  489. STAT_TEXT_TYPE_FETCHED_DATETIME,
  490. STAT_TEXT_TYPE_FETCHED_TIMESTAMP,
  491. STAT_TEXT_TYPE_FETCHED_STRING,
  492. STAT_TEXT_TYPE_FETCHED_JSON,
  493. STAT_TEXT_TYPE_FETCHED_BLOB,
  494. STAT_TEXT_TYPE_FETCHED_ENUM,
  495. STAT_TEXT_TYPE_FETCHED_SET,
  496. STAT_TEXT_TYPE_FETCHED_GEOMETRY,
  497. STAT_TEXT_TYPE_FETCHED_OTHER,
  498. STAT_BINARY_TYPE_FETCHED_NULL,
  499. STAT_BINARY_TYPE_FETCHED_BIT,
  500. STAT_BINARY_TYPE_FETCHED_INT8,
  501. STAT_BINARY_TYPE_FETCHED_INT16,
  502. STAT_BINARY_TYPE_FETCHED_INT24,
  503. STAT_BINARY_TYPE_FETCHED_INT32,
  504. STAT_BINARY_TYPE_FETCHED_INT64,
  505. STAT_BINARY_TYPE_FETCHED_DECIMAL,
  506. STAT_BINARY_TYPE_FETCHED_FLOAT,
  507. STAT_BINARY_TYPE_FETCHED_DOUBLE,
  508. STAT_BINARY_TYPE_FETCHED_DATE,
  509. STAT_BINARY_TYPE_FETCHED_YEAR,
  510. STAT_BINARY_TYPE_FETCHED_TIME,
  511. STAT_BINARY_TYPE_FETCHED_DATETIME,
  512. STAT_BINARY_TYPE_FETCHED_TIMESTAMP,
  513. STAT_BINARY_TYPE_FETCHED_STRING,
  514. STAT_BINARY_TYPE_FETCHED_BLOB,
  515. STAT_BINARY_TYPE_FETCHED_ENUM,
  516. STAT_BINARY_TYPE_FETCHED_SET,
  517. STAT_BINARY_TYPE_FETCHED_GEOMETRY,
  518. STAT_BINARY_TYPE_FETCHED_OTHER,
  519. STAT_INIT_COMMAND_EXECUTED_COUNT,
  520. STAT_INIT_COMMAND_FAILED_COUNT,
  521. STAT_COM_QUIT,
  522. STAT_COM_INIT_DB,
  523. STAT_COM_QUERY,
  524. STAT_COM_FIELD_LIST,
  525. STAT_COM_CREATE_DB,
  526. STAT_COM_DROP_DB,
  527. STAT_COM_REFRESH,
  528. STAT_COM_SHUTDOWN,
  529. STAT_COM_STATISTICS,
  530. STAT_COM_PROCESS_INFO,
  531. STAT_COM_CONNECT,
  532. STAT_COM_PROCESS_KILL,
  533. STAT_COM_DEBUG,
  534. STAT_COM_PING,
  535. STAT_COM_TIME,
  536. STAT_COM_DELAYED_INSERT,
  537. STAT_COM_CHANGE_USER,
  538. STAT_COM_BINLOG_DUMP,
  539. STAT_COM_TABLE_DUMP,
  540. STAT_COM_CONNECT_OUT,
  541. STAT_COM_REGISTER_SLAVE,
  542. STAT_COM_STMT_PREPARE,
  543. STAT_COM_STMT_EXECUTE,
  544. STAT_COM_STMT_SEND_LONG_DATA,
  545. STAT_COM_STMT_CLOSE,
  546. STAT_COM_STMT_RESET,
  547. STAT_COM_SET_OPTION,
  548. STAT_COM_STMT_FETCH,
  549. STAT_COM_DAEMON,
  550. STAT_BYTES_RECEIVED_PURE_DATA_TEXT,
  551. STAT_BYTES_RECEIVED_PURE_DATA_PS,
  552. STAT_LAST /* Should be always the last */
  553. } enum_mysqlnd_collected_stats;
  554. /* Enums */
  555. enum mysqlnd_packet_type
  556. {
  557. PROT_GREET_PACKET= 0,
  558. PROT_AUTH_PACKET,
  559. PROT_AUTH_RESP_PACKET,
  560. PROT_CHANGE_AUTH_RESP_PACKET,
  561. PROT_OK_PACKET,
  562. PROT_EOF_PACKET,
  563. PROT_CMD_PACKET,
  564. PROT_RSET_HEADER_PACKET,
  565. PROT_RSET_FLD_PACKET,
  566. PROT_ROW_PACKET,
  567. PROT_STATS_PACKET,
  568. PROT_PREPARE_RESP_PACKET,
  569. PROT_CHG_USER_RESP_PACKET,
  570. PROT_SHA256_PK_REQUEST_PACKET,
  571. PROT_SHA256_PK_REQUEST_RESPONSE_PACKET,
  572. PROT_LAST /* should always be last */
  573. };
  574. /*
  575. After adding new elements please update
  576. `mysqlnd_command_to_text` in mysqlnd_wireprotocol.c
  577. */
  578. enum php_mysqlnd_server_command
  579. {
  580. COM_SLEEP = 0,
  581. COM_QUIT,
  582. COM_INIT_DB,
  583. COM_QUERY,
  584. COM_FIELD_LIST,
  585. COM_CREATE_DB,
  586. COM_DROP_DB,
  587. COM_REFRESH,
  588. COM_SHUTDOWN,
  589. COM_STATISTICS,
  590. COM_PROCESS_INFO,
  591. COM_CONNECT,
  592. COM_PROCESS_KILL,
  593. COM_DEBUG,
  594. COM_PING,
  595. COM_TIME = 15,
  596. COM_DELAYED_INSERT,
  597. COM_CHANGE_USER,
  598. COM_BINLOG_DUMP,
  599. COM_TABLE_DUMP,
  600. COM_CONNECT_OUT = 20,
  601. COM_REGISTER_SLAVE,
  602. COM_STMT_PREPARE = 22,
  603. COM_STMT_EXECUTE = 23,
  604. COM_STMT_SEND_LONG_DATA = 24,
  605. COM_STMT_CLOSE = 25,
  606. COM_STMT_RESET = 26,
  607. COM_SET_OPTION = 27,
  608. COM_STMT_FETCH = 28,
  609. COM_DAEMON = 29,
  610. COM_BINLOG_DUMP_GTID = 30,
  611. COM_RESET_CONNECTION = 31,
  612. COM_STMT_EXECUTE_BATCH = 32,
  613. COM_END,
  614. /* Here follow own, non-protocol, commands */
  615. COM_REAP_RESULT=240, /* own command */
  616. COM_ENABLE_SSL, /* own command */
  617. COM_HANDSHAKE, /* own command */
  618. };
  619. #define MYSQLND_DEFAULT_PREFETCH_ROWS (zend_ulong) 1
  620. #define MYSQLND_REFRESH_GRANT 1 /* Refresh grant tables */
  621. #define MYSQLND_REFRESH_LOG 2 /* Start on new log file */
  622. #define MYSQLND_REFRESH_TABLES 4 /* close all tables */
  623. #define MYSQLND_REFRESH_HOSTS 8 /* Flush host cache */
  624. #define MYSQLND_REFRESH_STATUS 16 /* Flush status variables */
  625. #define MYSQLND_REFRESH_THREADS 32 /* Flush thread cache */
  626. #define MYSQLND_REFRESH_SLAVE 64 /* Reset master info and restart slave */
  627. #define MYSQLND_REFRESH_MASTER 128 /* Remove all bin logs in the index */
  628. #define MYSQLND_REFRESH_BACKUP_LOG 0x200000L
  629. #define MYSQLND_STORE_PS 1
  630. #define MYSQLND_STORE_NO_COPY 2
  631. #define MYSQLND_STORE_COPY 4
  632. enum mysqlnd_buffered_type
  633. {
  634. MYSQLND_BUFFERED_TYPE_ZVAL = 1,
  635. MYSQLND_BUFFERED_TYPE_C
  636. };
  637. #define MYSQLND_CLIENT_NO_FLAG 0
  638. #define MYSQLND_CLIENT_KNOWS_RSET_COPY_DATA 1
  639. #endif /* MYSQLND_ENUM_N_DEF_H */
  640. /*
  641. * Local variables:
  642. * tab-width: 4
  643. * c-basic-offset: 4
  644. * End:
  645. * vim600: noet sw=4 ts=4 fdm=marker
  646. * vim<600: noet sw=4 ts=4
  647. */