1 /* 2 +----------------------------------------------------------------------+ 3 | PHP Version 5 | 4 +----------------------------------------------------------------------+ 5 | Copyright (c) 2006-2016 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@mysql.com> | 16 | Ulf Wendel <uwendel@mysql.com> | 17 | Georg Richter <georg@mysql.com> | 18 +----------------------------------------------------------------------+ 19 */ 20 21 /* $Id$ */ 22 23 #ifndef MYSQLND_STRUCTS_H 24 #define MYSQLND_STRUCTS_H 25 26 #include "ext/standard/php_smart_str_public.h" 27 28 #define MYSQLND_TYPEDEFED_METHODS 29 30 #define MYSQLND_CLASS_METHOD_TABLE_NAME(class) mysqlnd_##class##_methods 31 #define MYSQLND_CLASS_METHOD_TABLE_NAME_FORWARD(class) struct st_##class##_methods MYSQLND_CLASS_METHOD_TABLE_NAME(class) 32 33 #define MYSQLND_CLASS_METHODS_START(class) MYSQLND_CLASS_METHOD_TABLE_NAME_FORWARD(class) = { 34 #define MYSQLND_CLASS_METHODS_END } 35 36 37 typedef struct st_mysqlnd_memory_pool MYSQLND_MEMORY_POOL; 38 typedef struct st_mysqlnd_memory_pool_chunk MYSQLND_MEMORY_POOL_CHUNK; 39 typedef struct st_mysqlnd_memory_pool_chunk_llist MYSQLND_MEMORY_POOL_CHUNK_LLIST; 40 41 42 #define MYSQLND_MEMORY_POOL_CHUNK_LIST_SIZE 100 43 44 struct st_mysqlnd_memory_pool 45 { 46 zend_uchar *arena; 47 unsigned int refcount; 48 unsigned int arena_size; 49 unsigned int free_size; 50 51 MYSQLND_MEMORY_POOL_CHUNK* (*get_chunk)(MYSQLND_MEMORY_POOL * pool, unsigned int size TSRMLS_DC); 52 }; 53 54 struct st_mysqlnd_memory_pool_chunk 55 { 56 size_t app; 57 MYSQLND_MEMORY_POOL *pool; 58 zend_uchar *ptr; 59 unsigned int size; 60 enum_func_status (*resize_chunk)(MYSQLND_MEMORY_POOL_CHUNK * chunk, unsigned int size TSRMLS_DC); 61 void (*free_chunk)(MYSQLND_MEMORY_POOL_CHUNK * chunk TSRMLS_DC); 62 zend_bool from_pool; 63 }; 64 65 66 typedef struct st_mysqlnd_cmd_buffer 67 { 68 zend_uchar *buffer; 69 size_t length; 70 } MYSQLND_CMD_BUFFER; 71 72 73 typedef struct st_mysqlnd_field 74 { 75 const char *name; /* Name of column */ 76 const char *org_name; /* Original column name, if an alias */ 77 const char *table; /* Table of column if column was a field */ 78 const char *org_table; /* Org table name, if table was an alias */ 79 const char *db; /* Database for table */ 80 const char *catalog; /* Catalog for table */ 81 char *def; /* Default value (set by mysql_list_fields) */ 82 unsigned long length; /* Width of column (create length) */ 83 unsigned long max_length; /* Max width for selected set */ 84 unsigned int name_length; 85 unsigned int org_name_length; 86 unsigned int table_length; 87 unsigned int org_table_length; 88 unsigned int db_length; 89 unsigned int catalog_length; 90 unsigned int def_length; 91 unsigned int flags; /* Diverse flags */ 92 unsigned int decimals; /* Number of decimals in field */ 93 unsigned int charsetnr; /* Character set */ 94 enum mysqlnd_field_types type; /* Type of field. See mysql_com.h for types */ 95 char *root; 96 size_t root_len; 97 } MYSQLND_FIELD; 98 99 100 typedef struct st_mysqlnd_upsert_result 101 { 102 unsigned int warning_count; 103 unsigned int server_status; 104 uint64_t affected_rows; 105 uint64_t last_insert_id; 106 } MYSQLND_UPSERT_STATUS; 107 108 109 typedef struct st_mysqlnd_error_info 110 { 111 char error[MYSQLND_ERRMSG_SIZE+1]; 112 char sqlstate[MYSQLND_SQLSTATE_LENGTH + 1]; 113 unsigned int error_no; 114 zend_llist * error_list; 115 } MYSQLND_ERROR_INFO; 116 117 118 typedef struct st_mysqlnd_error_list_element 119 { 120 char * error; 121 char sqlstate[MYSQLND_SQLSTATE_LENGTH + 1]; 122 unsigned int error_no; 123 } MYSQLND_ERROR_LIST_ELEMENT; 124 125 126 typedef struct st_mysqlnd_infile_info 127 { 128 php_stream *fd; 129 int error_no; 130 char error_msg[MYSQLND_ERRMSG_SIZE + 1]; 131 const char *filename; 132 } MYSQLND_INFILE_INFO; 133 134 135 /* character set information */ 136 typedef struct st_mysqlnd_charset 137 { 138 unsigned int nr; 139 const char *name; 140 const char *collation; 141 unsigned int char_minlen; 142 unsigned int char_maxlen; 143 const char *comment; 144 unsigned int (*mb_charlen)(unsigned int c); 145 unsigned int (*mb_valid)(const char *start, const char *end); 146 } MYSQLND_CHARSET; 147 148 149 /* local infile handler */ 150 typedef struct st_mysqlnd_infile 151 { 152 int (*local_infile_init)(void **ptr, char *filename, void **userdata TSRMLS_DC); 153 int (*local_infile_read)(void *ptr, zend_uchar * buf, unsigned int buf_len TSRMLS_DC); 154 int (*local_infile_error)(void *ptr, char *error_msg, unsigned int error_msg_len TSRMLS_DC); 155 void (*local_infile_end)(void *ptr TSRMLS_DC); 156 zval *callback; 157 void *userdata; 158 } MYSQLND_INFILE; 159 160 typedef struct st_mysqlnd_options 161 { 162 ulong flags; 163 164 /* init commands - we need to send them to server directly after connect */ 165 unsigned int num_commands; 166 char **init_commands; 167 168 /* configuration file information */ 169 char *cfg_file; 170 char *cfg_section; 171 172 char *auth_protocol; 173 /* 174 We need to keep these because otherwise st_mysqlnd_conn will be changed. 175 The ABI will be broken and the methods structure will be somewhere else 176 in the memory which can crash external code. Feel free to reuse these. 177 */ 178 HashTable * connect_attr; 179 char * unused3; 180 char * unused4; 181 char * unused5; 182 183 enum_mysqlnd_protocol_type protocol; 184 185 char *charset_name; 186 /* maximum allowed packet size for communication */ 187 ulong max_allowed_packet; 188 189 #ifdef MYSQLND_STRING_TO_INT_CONVERSION 190 zend_bool int_and_float_native; 191 #endif 192 } MYSQLND_OPTIONS; 193 194 typedef struct st_mysqlnd_net_options 195 { 196 /* timeouts */ 197 unsigned int timeout_connect; 198 unsigned int timeout_read; 199 unsigned int timeout_write; 200 201 size_t net_read_buffer_size; 202 203 /* SSL information */ 204 char *ssl_key; 205 char *ssl_cert; 206 char *ssl_ca; 207 char *ssl_capath; 208 char *ssl_cipher; 209 char *ssl_passphrase; 210 enum mysqlnd_ssl_peer { 211 MYSQLND_SSL_PEER_DEFAULT = 0, 212 MYSQLND_SSL_PEER_VERIFY = 1, 213 MYSQLND_SSL_PEER_DONT_VERIFY = 2, 214 215 #define MYSQLND_SSL_PEER_DEFAULT_ACTION MYSQLND_SSL_PEER_VERIFY 216 } ssl_verify_peer; 217 uint64_t flags; 218 219 char * sha256_server_public_key; 220 221 char * unused1; 222 char * unused2; 223 char * unused3; 224 char * unused4; 225 } MYSQLND_NET_OPTIONS; 226 227 228 229 typedef struct st_mysqlnd_connection MYSQLND; 230 typedef struct st_mysqlnd_connection_data MYSQLND_CONN_DATA; 231 typedef struct st_mysqlnd_net MYSQLND_NET; 232 typedef struct st_mysqlnd_net_data MYSQLND_NET_DATA; 233 typedef struct st_mysqlnd_protocol MYSQLND_PROTOCOL; 234 typedef struct st_mysqlnd_res MYSQLND_RES; 235 typedef char** MYSQLND_ROW_C; /* return data as array of strings */ 236 typedef struct st_mysqlnd_stmt_data MYSQLND_STMT_DATA; 237 typedef struct st_mysqlnd_stmt MYSQLND_STMT; 238 typedef unsigned int MYSQLND_FIELD_OFFSET; 239 240 typedef struct st_mysqlnd_param_bind MYSQLND_PARAM_BIND; 241 242 typedef struct st_mysqlnd_result_bind MYSQLND_RESULT_BIND; 243 244 typedef struct st_mysqlnd_result_metadata MYSQLND_RES_METADATA; 245 typedef struct st_mysqlnd_buffered_result_parent MYSQLND_RES_BUFFERED; 246 typedef struct st_mysqlnd_buffered_result_zval MYSQLND_RES_BUFFERED_ZVAL; 247 typedef struct st_mysqlnd_buffered_result_c MYSQLND_RES_BUFFERED_C; 248 typedef struct st_mysqlnd_unbuffered_result MYSQLND_RES_UNBUFFERED; 249 250 typedef struct st_mysqlnd_debug MYSQLND_DEBUG; 251 252 253 typedef MYSQLND_RES* (*mysqlnd_stmt_use_or_store_func)(MYSQLND_STMT * const TSRMLS_DC); 254 typedef enum_func_status (*mysqlnd_fetch_row_func)(MYSQLND_RES *result, 255 void * param, 256 const unsigned int flags, 257 zend_bool * fetched_anything 258 TSRMLS_DC); 259 260 261 typedef struct st_mysqlnd_stats MYSQLND_STATS; 262 263 typedef void (*mysqlnd_stat_trigger)(MYSQLND_STATS * stats, enum_mysqlnd_collected_stats stat, int64_t change TSRMLS_DC); 264 265 struct st_mysqlnd_stats 266 { 267 uint64_t *values; 268 mysqlnd_stat_trigger *triggers; 269 size_t count; 270 zend_bool in_trigger; 271 #ifdef ZTS 272 MUTEX_T LOCK_access; 273 #endif 274 }; 275 276 277 typedef struct st_mysqlnd_read_buffer { 278 zend_uchar * data; 279 size_t offset; 280 size_t size; 281 size_t len; 282 zend_bool (*is_empty)(struct st_mysqlnd_read_buffer *); 283 void (*read)(struct st_mysqlnd_read_buffer *, size_t count, zend_uchar * dest); 284 size_t (*bytes_left)(struct st_mysqlnd_read_buffer *); 285 void (*free_buffer)(struct st_mysqlnd_read_buffer ** TSRMLS_DC); 286 } MYSQLND_READ_BUFFER; 287 288 289 290 typedef enum_func_status (*func_mysqlnd_net__set_client_option)(MYSQLND_NET * const net, enum_mysqlnd_option option, const char * const value TSRMLS_DC); 291 typedef enum_func_status (*func_mysqlnd_net__decode)(zend_uchar * uncompressed_data, const size_t uncompressed_data_len, const zend_uchar * const compressed_data, const size_t compressed_data_len TSRMLS_DC); 292 typedef enum_func_status (*func_mysqlnd_net__encode)(zend_uchar * compress_buffer, size_t * compress_buffer_len, const zend_uchar * const uncompressed_data, const size_t uncompressed_data_len TSRMLS_DC); 293 typedef size_t (*func_mysqlnd_net__consume_uneaten_data)(MYSQLND_NET * const net, enum php_mysqlnd_server_command cmd TSRMLS_DC); 294 typedef void (*func_mysqlnd_net__free_contents)(MYSQLND_NET * net TSRMLS_DC); 295 typedef enum_func_status (*func_mysqlnd_net__enable_ssl)(MYSQLND_NET * const net TSRMLS_DC); 296 typedef enum_func_status (*func_mysqlnd_net__disable_ssl)(MYSQLND_NET * const net TSRMLS_DC); 297 typedef enum_func_status (*func_mysqlnd_net__network_read_ex)(MYSQLND_NET * const net, zend_uchar * const buffer, const size_t count, MYSQLND_STATS * const stats, MYSQLND_ERROR_INFO * const error_info TSRMLS_DC); 298 typedef size_t (*func_mysqlnd_net__network_write_ex)(MYSQLND_NET * const net, const zend_uchar * const buf, const size_t count, MYSQLND_STATS * const stats, MYSQLND_ERROR_INFO * const error_info TSRMLS_DC); 299 typedef size_t (*func_mysqlnd_net__send_ex)(MYSQLND_NET * const net, zend_uchar * const buffer, const size_t count, MYSQLND_STATS * const conn_stats, MYSQLND_ERROR_INFO * const error_info TSRMLS_DC); 300 typedef enum_func_status (*func_mysqlnd_net__receive_ex)(MYSQLND_NET * const net, zend_uchar * const buffer, const size_t count, MYSQLND_STATS * const conn_stats, MYSQLND_ERROR_INFO * const error_info TSRMLS_DC); 301 typedef enum_func_status (*func_mysqlnd_net__init)(MYSQLND_NET * const net, MYSQLND_STATS * const stats, MYSQLND_ERROR_INFO * const error_info TSRMLS_DC); 302 typedef void (*func_mysqlnd_net__dtor)(MYSQLND_NET * const net, MYSQLND_STATS * const conn_stats, MYSQLND_ERROR_INFO * const error_info TSRMLS_DC); 303 typedef enum_func_status (*func_mysqlnd_net__connect_ex)(MYSQLND_NET * const net, const char * const scheme, const size_t scheme_len, const zend_bool persistent, MYSQLND_STATS * const conn_stats, MYSQLND_ERROR_INFO * const error_info TSRMLS_DC); 304 typedef void (*func_mysqlnd_net__close_stream)(MYSQLND_NET * const net, MYSQLND_STATS * const conn_stats, MYSQLND_ERROR_INFO * const error_info TSRMLS_DC); 305 typedef php_stream * (*func_mysqlnd_net__open_stream)(MYSQLND_NET * const net, const char * const scheme, const size_t scheme_len, const zend_bool persistent, MYSQLND_STATS * const conn_stats, MYSQLND_ERROR_INFO * const error_info TSRMLS_DC); 306 typedef php_stream * (*func_mysqlnd_net__get_stream)(const MYSQLND_NET * const net TSRMLS_DC); 307 typedef php_stream * (*func_mysqlnd_net__set_stream)(MYSQLND_NET * const net, php_stream * net_stream TSRMLS_DC); 308 typedef func_mysqlnd_net__open_stream (*func_mysqlnd_net__get_open_stream)(MYSQLND_NET * const net, const char * const scheme, const size_t scheme_len, MYSQLND_ERROR_INFO * const error_info TSRMLS_DC); 309 typedef void (*func_mysqlnd_net__post_connect_set_opt)(MYSQLND_NET * const net, const char * const scheme, const size_t scheme_len, MYSQLND_STATS * const conn_stats, MYSQLND_ERROR_INFO * const error_info TSRMLS_DC); 310 typedef enum_func_status (*func_mysqlnd_net__read_compressed_packet_from_stream_and_fill_read_buffer)(MYSQLND_NET * net, size_t net_payload_size, MYSQLND_STATS * conn_stats, MYSQLND_ERROR_INFO * error_info TSRMLS_DC); 311 312 struct st_mysqlnd_net_methods 313 { 314 func_mysqlnd_net__init init; 315 func_mysqlnd_net__dtor dtor; 316 func_mysqlnd_net__connect_ex connect_ex; 317 func_mysqlnd_net__close_stream close_stream; 318 func_mysqlnd_net__open_stream open_pipe; 319 func_mysqlnd_net__open_stream open_tcp_or_unix; 320 321 func_mysqlnd_net__get_stream get_stream; 322 func_mysqlnd_net__set_stream set_stream; 323 func_mysqlnd_net__get_open_stream get_open_stream; 324 325 func_mysqlnd_net__post_connect_set_opt post_connect_set_opt; 326 327 func_mysqlnd_net__set_client_option set_client_option; 328 func_mysqlnd_net__decode decode; 329 func_mysqlnd_net__encode encode; 330 func_mysqlnd_net__consume_uneaten_data consume_uneaten_data; 331 func_mysqlnd_net__free_contents free_contents; 332 func_mysqlnd_net__enable_ssl enable_ssl; 333 func_mysqlnd_net__disable_ssl disable_ssl; 334 335 func_mysqlnd_net__network_read_ex network_read_ex; 336 func_mysqlnd_net__network_write_ex network_write_ex; 337 func_mysqlnd_net__send_ex send_ex; 338 func_mysqlnd_net__receive_ex receive_ex; 339 340 func_mysqlnd_net__read_compressed_packet_from_stream_and_fill_read_buffer read_compressed_packet_from_stream_and_fill_read_buffer; 341 342 void * unused1; 343 void * unused2; 344 void * unused3; 345 void * unused4; 346 void * unused5; 347 }; 348 349 350 struct st_mysqlnd_packet_greet; 351 struct st_mysqlnd_packet_greet; 352 struct st_mysqlnd_packet_auth; 353 struct st_mysqlnd_packet_ok; 354 struct st_mysqlnd_packet_command; 355 struct st_mysqlnd_packet_eof; 356 struct st_mysqlnd_packet_rset_header; 357 struct st_mysqlnd_packet_res_field; 358 struct st_mysqlnd_packet_row; 359 struct st_mysqlnd_packet_stats; 360 struct st_mysqlnd_packet_prepare_response; 361 struct st_mysqlnd_packet_chg_user_resp; 362 struct st_mysqlnd_packet_auth_pam; 363 struct st_mysqlnd_packet_sha256_pk_request; 364 struct st_mysqlnd_packet_sha256_pk_request_response; 365 366 typedef struct st_mysqlnd_packet_greet * (*func_mysqlnd_protocol__get_greet_packet)(MYSQLND_PROTOCOL * const protocol, zend_bool persistent TSRMLS_DC); 367 typedef struct st_mysqlnd_packet_auth * (*func_mysqlnd_protocol__get_auth_packet)(MYSQLND_PROTOCOL * const protocol, zend_bool persistent TSRMLS_DC); 368 typedef struct st_mysqlnd_packet_auth_response *(*func_mysqlnd_protocol__get_auth_response_packet)(MYSQLND_PROTOCOL * const protocol, zend_bool persistent TSRMLS_DC); 369 typedef struct st_mysqlnd_packet_change_auth_response * (*func_mysqlnd_protocol__get_change_auth_response_packet)(MYSQLND_PROTOCOL * const protocol, zend_bool persistent TSRMLS_DC); 370 typedef struct st_mysqlnd_packet_ok * (*func_mysqlnd_protocol__get_ok_packet)(MYSQLND_PROTOCOL * const protocol, zend_bool persistent TSRMLS_DC); 371 typedef struct st_mysqlnd_packet_command * (*func_mysqlnd_protocol__get_command_packet)(MYSQLND_PROTOCOL * const protocol, zend_bool persistent TSRMLS_DC); 372 typedef struct st_mysqlnd_packet_eof * (*func_mysqlnd_protocol__get_eof_packet)(MYSQLND_PROTOCOL * const protocol, zend_bool persistent TSRMLS_DC); 373 typedef struct st_mysqlnd_packet_rset_header * (*func_mysqlnd_protocol__get_rset_header_packet)(MYSQLND_PROTOCOL * const protocol, zend_bool persistent TSRMLS_DC); 374 typedef struct st_mysqlnd_packet_res_field * (*func_mysqlnd_protocol__get_result_field_packet)(MYSQLND_PROTOCOL * const protocol, zend_bool persistent TSRMLS_DC); 375 typedef struct st_mysqlnd_packet_row * (*func_mysqlnd_protocol__get_row_packet)(MYSQLND_PROTOCOL * const protocol, zend_bool persistent TSRMLS_DC); 376 typedef struct st_mysqlnd_packet_stats * (*func_mysqlnd_protocol__get_stats_packet)(MYSQLND_PROTOCOL * const protocol, zend_bool persistent TSRMLS_DC); 377 typedef struct st_mysqlnd_packet_prepare_response *(*func_mysqlnd_protocol__get_prepare_response_packet)(MYSQLND_PROTOCOL * const protocol, zend_bool persistent TSRMLS_DC); 378 typedef struct st_mysqlnd_packet_chg_user_resp*(*func_mysqlnd_protocol__get_change_user_response_packet)(MYSQLND_PROTOCOL * const protocol, zend_bool persistent TSRMLS_DC); 379 typedef struct st_mysqlnd_packet_sha256_pk_request *(*func_mysqlnd_protocol__get_sha256_pk_request_packet)(MYSQLND_PROTOCOL * const protocol, zend_bool persistent TSRMLS_DC); 380 typedef struct st_mysqlnd_packet_sha256_pk_request_response *(*func_mysqlnd_protocol__get_sha256_pk_request_response_packet)(MYSQLND_PROTOCOL * const protocol, zend_bool persistent TSRMLS_DC); 381 382 struct st_mysqlnd_protocol_methods 383 { 384 func_mysqlnd_protocol__get_greet_packet get_greet_packet; 385 func_mysqlnd_protocol__get_auth_packet get_auth_packet; 386 func_mysqlnd_protocol__get_auth_response_packet get_auth_response_packet; 387 func_mysqlnd_protocol__get_change_auth_response_packet get_change_auth_response_packet; 388 func_mysqlnd_protocol__get_ok_packet get_ok_packet; 389 func_mysqlnd_protocol__get_command_packet get_command_packet; 390 func_mysqlnd_protocol__get_eof_packet get_eof_packet; 391 func_mysqlnd_protocol__get_rset_header_packet get_rset_header_packet; 392 func_mysqlnd_protocol__get_result_field_packet get_result_field_packet; 393 func_mysqlnd_protocol__get_row_packet get_row_packet; 394 func_mysqlnd_protocol__get_stats_packet get_stats_packet; 395 func_mysqlnd_protocol__get_prepare_response_packet get_prepare_response_packet; 396 func_mysqlnd_protocol__get_change_user_response_packet get_change_user_response_packet; 397 func_mysqlnd_protocol__get_sha256_pk_request_packet get_sha256_pk_request_packet; 398 func_mysqlnd_protocol__get_sha256_pk_request_response_packet get_sha256_pk_request_response_packet; 399 400 void * unused1; 401 void * unused2; 402 void * unused3; 403 }; 404 405 406 typedef MYSQLND * (*func_mysqlnd_object_factory__get_connection)(zend_bool persistent TSRMLS_DC); 407 typedef MYSQLND * (*func_mysqlnd_object_factory__clone_connection_object)(MYSQLND * conn TSRMLS_DC); 408 typedef MYSQLND_STMT * (*func_mysqlnd_object_factory__get_prepared_statement)(MYSQLND_CONN_DATA * conn TSRMLS_DC); 409 typedef MYSQLND_NET * (*func_mysqlnd_object_factory__get_io_channel)(zend_bool persistent, MYSQLND_STATS * stats, MYSQLND_ERROR_INFO * error_info TSRMLS_DC); 410 typedef MYSQLND_PROTOCOL * (*func_mysqlnd_object_factory__get_protocol_decoder)(zend_bool persistent TSRMLS_DC); 411 412 413 struct st_mysqlnd_object_factory_methods 414 { 415 func_mysqlnd_object_factory__get_connection get_connection; 416 func_mysqlnd_object_factory__clone_connection_object clone_connection_object; 417 func_mysqlnd_object_factory__get_prepared_statement get_prepared_statement; 418 func_mysqlnd_object_factory__get_io_channel get_io_channel; 419 func_mysqlnd_object_factory__get_protocol_decoder get_protocol_decoder; 420 }; 421 422 423 typedef enum_func_status (*func_mysqlnd_conn_data__init)(MYSQLND_CONN_DATA * conn TSRMLS_DC); 424 typedef enum_func_status (*func_mysqlnd_conn_data__connect)(MYSQLND_CONN_DATA * conn, const char * host, const char * user, const char * passwd, unsigned int passwd_len, const char * db, unsigned int db_len, unsigned int port, const char * socket_or_pipe, unsigned int mysql_flags TSRMLS_DC); 425 typedef ulong (*func_mysqlnd_conn_data__escape_string)(MYSQLND_CONN_DATA * const conn, char *newstr, const char *escapestr, size_t escapestr_len TSRMLS_DC); 426 typedef enum_func_status (*func_mysqlnd_conn_data__set_charset)(MYSQLND_CONN_DATA * const conn, const char * const charset TSRMLS_DC); 427 typedef enum_func_status (*func_mysqlnd_conn_data__query)(MYSQLND_CONN_DATA * conn, const char * query, unsigned int query_len TSRMLS_DC); 428 typedef enum_func_status (*func_mysqlnd_conn_data__send_query)(MYSQLND_CONN_DATA * conn, const char *query, unsigned int query_len TSRMLS_DC); 429 typedef enum_func_status (*func_mysqlnd_conn_data__reap_query)(MYSQLND_CONN_DATA * conn TSRMLS_DC); 430 typedef MYSQLND_RES * (*func_mysqlnd_conn_data__use_result)(MYSQLND_CONN_DATA * const conn, const unsigned int flags TSRMLS_DC); 431 typedef MYSQLND_RES * (*func_mysqlnd_conn_data__store_result)(MYSQLND_CONN_DATA * const conn, const unsigned int flags TSRMLS_DC); 432 typedef enum_func_status (*func_mysqlnd_conn_data__next_result)(MYSQLND_CONN_DATA * const conn TSRMLS_DC); 433 typedef zend_bool (*func_mysqlnd_conn_data__more_results)(const MYSQLND_CONN_DATA * const conn TSRMLS_DC); 434 435 typedef MYSQLND_STMT * (*func_mysqlnd_conn_data__stmt_init)(MYSQLND_CONN_DATA * const conn TSRMLS_DC); 436 437 typedef enum_func_status (*func_mysqlnd_conn_data__shutdown_server)(MYSQLND_CONN_DATA * const conn, uint8_t level TSRMLS_DC); 438 typedef enum_func_status (*func_mysqlnd_conn_data__refresh_server)(MYSQLND_CONN_DATA * const conn, uint8_t options TSRMLS_DC); 439 440 typedef enum_func_status (*func_mysqlnd_conn_data__ping)(MYSQLND_CONN_DATA * const conn TSRMLS_DC); 441 typedef enum_func_status (*func_mysqlnd_conn_data__kill_connection)(MYSQLND_CONN_DATA * conn, unsigned int pid TSRMLS_DC); 442 typedef enum_func_status (*func_mysqlnd_conn_data__select_db)(MYSQLND_CONN_DATA * const conn, const char * const db, unsigned int db_len TSRMLS_DC); 443 typedef enum_func_status (*func_mysqlnd_conn_data__server_dump_debug_information)(MYSQLND_CONN_DATA * const conn TSRMLS_DC); 444 typedef enum_func_status (*func_mysqlnd_conn_data__change_user)(MYSQLND_CONN_DATA * const conn, const char * user, const char * passwd, const char * db, zend_bool silent, size_t passwd_len TSRMLS_DC); 445 446 typedef unsigned int (*func_mysqlnd_conn_data__get_error_no)(const MYSQLND_CONN_DATA * const conn TSRMLS_DC); 447 typedef const char * (*func_mysqlnd_conn_data__get_error_str)(const MYSQLND_CONN_DATA * const conn TSRMLS_DC); 448 typedef const char * (*func_mysqlnd_conn_data__get_sqlstate)(const MYSQLND_CONN_DATA * const conn TSRMLS_DC); 449 typedef uint64_t (*func_mysqlnd_conn_data__get_thread_id)(const MYSQLND_CONN_DATA * const conn TSRMLS_DC); 450 typedef void (*func_mysqlnd_conn_data__get_statistics)(const MYSQLND_CONN_DATA * const conn, zval *return_value TSRMLS_DC ZEND_FILE_LINE_DC); 451 452 typedef unsigned long (*func_mysqlnd_conn_data__get_server_version)(const MYSQLND_CONN_DATA * const conn TSRMLS_DC); 453 typedef const char * (*func_mysqlnd_conn_data__get_server_information)(const MYSQLND_CONN_DATA * const conn TSRMLS_DC); 454 typedef enum_func_status (*func_mysqlnd_conn_data__get_server_statistics)(MYSQLND_CONN_DATA * conn, char **message, unsigned int * message_len TSRMLS_DC); 455 typedef const char * (*func_mysqlnd_conn_data__get_host_information)(const MYSQLND_CONN_DATA * const conn TSRMLS_DC); 456 typedef unsigned int (*func_mysqlnd_conn_data__get_protocol_information)(const MYSQLND_CONN_DATA * const conn TSRMLS_DC); 457 typedef const char * (*func_mysqlnd_conn_data__get_last_message)(const MYSQLND_CONN_DATA * const conn TSRMLS_DC); 458 typedef const char * (*func_mysqlnd_conn_data__charset_name)(const MYSQLND_CONN_DATA * const conn TSRMLS_DC); 459 typedef MYSQLND_RES * (*func_mysqlnd_conn_data__list_fields)(MYSQLND_CONN_DATA * conn, const char * table, const char * achtung_wild TSRMLS_DC); 460 typedef MYSQLND_RES * (*func_mysqlnd_conn_data__list_method)(MYSQLND_CONN_DATA * conn, const char * query, const char * achtung_wild, char *par1 TSRMLS_DC); 461 462 typedef uint64_t (*func_mysqlnd_conn_data__get_last_insert_id)(const MYSQLND_CONN_DATA * const conn TSRMLS_DC); 463 typedef uint64_t (*func_mysqlnd_conn_data__get_affected_rows)(const MYSQLND_CONN_DATA * const conn TSRMLS_DC); 464 typedef unsigned int (*func_mysqlnd_conn_data__get_warning_count)(const MYSQLND_CONN_DATA * const conn TSRMLS_DC); 465 466 typedef unsigned int (*func_mysqlnd_conn_data__get_field_count)(const MYSQLND_CONN_DATA * const conn TSRMLS_DC); 467 468 typedef unsigned int (*func_mysqlnd_conn_data__get_server_status)(const MYSQLND_CONN_DATA * const conn TSRMLS_DC); 469 typedef enum_func_status (*func_mysqlnd_conn_data__set_server_option)(MYSQLND_CONN_DATA * const conn, enum_mysqlnd_server_option option TSRMLS_DC); 470 typedef enum_func_status (*func_mysqlnd_conn_data__set_client_option)(MYSQLND_CONN_DATA * const conn, enum_mysqlnd_option option, const char * const value TSRMLS_DC); 471 typedef void (*func_mysqlnd_conn_data__free_contents)(MYSQLND_CONN_DATA * conn TSRMLS_DC);/* private */ 472 typedef void (*func_mysqlnd_conn_data__free_options)(MYSQLND_CONN_DATA * conn TSRMLS_DC); /* private */ 473 typedef void (*func_mysqlnd_conn_data__dtor)(MYSQLND_CONN_DATA * conn TSRMLS_DC); /* private */ 474 475 typedef enum_func_status (*func_mysqlnd_conn_data__query_read_result_set_header)(MYSQLND_CONN_DATA * conn, MYSQLND_STMT * stmt TSRMLS_DC); 476 477 typedef MYSQLND_CONN_DATA * (*func_mysqlnd_conn_data__get_reference)(MYSQLND_CONN_DATA * const conn TSRMLS_DC); 478 typedef enum_func_status (*func_mysqlnd_conn_data__free_reference)(MYSQLND_CONN_DATA * const conn TSRMLS_DC); 479 typedef enum mysqlnd_connection_state (*func_mysqlnd_conn_data__get_state)(const MYSQLND_CONN_DATA * const conn TSRMLS_DC); 480 typedef void (*func_mysqlnd_conn_data__set_state)(MYSQLND_CONN_DATA * const conn, enum mysqlnd_connection_state new_state TSRMLS_DC); 481 482 typedef enum_func_status (*func_mysqlnd_conn_data__simple_command)(MYSQLND_CONN_DATA * conn, enum php_mysqlnd_server_command command, const zend_uchar * const arg, size_t arg_len, enum mysqlnd_packet_type ok_packet, zend_bool silent, zend_bool ignore_upsert_status TSRMLS_DC); 483 typedef enum_func_status (*func_mysqlnd_conn_data__simple_command_handle_response)(MYSQLND_CONN_DATA * conn, enum mysqlnd_packet_type ok_packet, zend_bool silent, enum php_mysqlnd_server_command command, zend_bool ignore_upsert_status TSRMLS_DC); 484 485 typedef enum_func_status (*func_mysqlnd_conn_data__restart_psession)(MYSQLND_CONN_DATA * conn TSRMLS_DC); 486 typedef enum_func_status (*func_mysqlnd_conn_data__end_psession)(MYSQLND_CONN_DATA * conn TSRMLS_DC); 487 typedef enum_func_status (*func_mysqlnd_conn_data__send_close)(MYSQLND_CONN_DATA * conn TSRMLS_DC); 488 489 typedef enum_func_status (*func_mysqlnd_conn_data__ssl_set)(MYSQLND_CONN_DATA * const conn, const char * key, const char * const cert, const char * const ca, const char * const capath, const char * const cipher TSRMLS_DC); 490 491 typedef MYSQLND_RES * (*func_mysqlnd_conn_data__result_init)(unsigned int field_count, zend_bool persistent TSRMLS_DC); 492 493 typedef enum_func_status (*func_mysqlnd_conn_data__set_autocommit)(MYSQLND_CONN_DATA * conn, unsigned int mode TSRMLS_DC); 494 typedef enum_func_status (*func_mysqlnd_conn_data__tx_commit)(MYSQLND_CONN_DATA * conn TSRMLS_DC); 495 typedef enum_func_status (*func_mysqlnd_conn_data__tx_rollback)(MYSQLND_CONN_DATA * conn TSRMLS_DC); 496 typedef enum_func_status (*func_mysqlnd_conn_data__tx_begin)(MYSQLND_CONN_DATA * conn, const unsigned int mode, const char * const name TSRMLS_DC); 497 typedef enum_func_status (*func_mysqlnd_conn_data__tx_commit_or_rollback)(MYSQLND_CONN_DATA * conn, const zend_bool commit, const unsigned int flags, const char * const name TSRMLS_DC); 498 typedef void (*func_mysqlnd_conn_data__tx_cor_options_to_string)(const MYSQLND_CONN_DATA * const conn, smart_str * tmp_str, const unsigned int mode TSRMLS_DC); 499 typedef enum_func_status (*func_mysqlnd_conn_data__tx_savepoint)(MYSQLND_CONN_DATA * conn, const char * const name TSRMLS_DC); 500 typedef enum_func_status (*func_mysqlnd_conn_data__tx_savepoint_release)(MYSQLND_CONN_DATA * conn, const char * const name TSRMLS_DC); 501 502 typedef enum_func_status (*func_mysqlnd_conn_data__local_tx_start)(MYSQLND_CONN_DATA * conn, size_t this_func TSRMLS_DC); 503 typedef enum_func_status (*func_mysqlnd_conn_data__local_tx_end)(MYSQLND_CONN_DATA * conn, size_t this_func, enum_func_status status TSRMLS_DC); 504 typedef enum_func_status (*func_mysqlnd_conn_data__execute_init_commands)(MYSQLND_CONN_DATA * conn TSRMLS_DC); 505 typedef unsigned int (*func_mysqlnd_conn_data__get_updated_connect_flags)(MYSQLND_CONN_DATA * conn, unsigned int mysql_flags TSRMLS_DC); 506 typedef enum_func_status (*func_mysqlnd_conn_data__connect_handshake)(MYSQLND_CONN_DATA * conn, const char * const host, const char * const user, const char * const passwd, const unsigned int passwd_len, const char * const db, const unsigned int db_len, const unsigned int mysql_flags TSRMLS_DC); 507 typedef enum_func_status (*func_mysqlnd_conn_data__simple_command_send_request)(MYSQLND_CONN_DATA * conn, enum php_mysqlnd_server_command command, const zend_uchar * const arg, size_t arg_len, zend_bool silent, zend_bool ignore_upsert_status TSRMLS_DC); 508 typedef struct st_mysqlnd_authentication_plugin * (*func_mysqlnd_conn_data__fetch_auth_plugin_by_name)(const char * const requested_protocol TSRMLS_DC); 509 510 typedef enum_func_status (*func_mysqlnd_conn_data__set_client_option_2d)(MYSQLND_CONN_DATA * const conn, enum mysqlnd_option option, const char * const key, const char * const value TSRMLS_DC); 511 512 513 typedef unsigned int (*func_mysqlnd_conn_data__negotiate_client_api_capabilities)(MYSQLND_CONN_DATA * const conn, const unsigned int flags TSRMLS_DC); 514 typedef unsigned int (*func_mysqlnd_conn_data__get_client_api_capabilities)(const MYSQLND_CONN_DATA * const conn TSRMLS_DC); 515 516 517 struct st_mysqlnd_conn_data_methods 518 { 519 func_mysqlnd_conn_data__init init; 520 func_mysqlnd_conn_data__connect connect; 521 func_mysqlnd_conn_data__escape_string escape_string; 522 func_mysqlnd_conn_data__set_charset set_charset; 523 func_mysqlnd_conn_data__query query; 524 func_mysqlnd_conn_data__send_query send_query; 525 func_mysqlnd_conn_data__reap_query reap_query; 526 func_mysqlnd_conn_data__use_result use_result; 527 func_mysqlnd_conn_data__store_result store_result; 528 func_mysqlnd_conn_data__next_result next_result; 529 func_mysqlnd_conn_data__more_results more_results; 530 531 func_mysqlnd_conn_data__stmt_init stmt_init; 532 533 func_mysqlnd_conn_data__shutdown_server shutdown_server; 534 func_mysqlnd_conn_data__refresh_server refresh_server; 535 536 func_mysqlnd_conn_data__ping ping; 537 func_mysqlnd_conn_data__kill_connection kill_connection; 538 func_mysqlnd_conn_data__select_db select_db; 539 func_mysqlnd_conn_data__server_dump_debug_information server_dump_debug_information; 540 func_mysqlnd_conn_data__change_user change_user; 541 542 func_mysqlnd_conn_data__get_error_no get_error_no; 543 func_mysqlnd_conn_data__get_error_str get_error_str; 544 func_mysqlnd_conn_data__get_sqlstate get_sqlstate; 545 func_mysqlnd_conn_data__get_thread_id get_thread_id; 546 func_mysqlnd_conn_data__get_statistics get_statistics; 547 548 func_mysqlnd_conn_data__get_server_version get_server_version; 549 func_mysqlnd_conn_data__get_server_information get_server_information; 550 func_mysqlnd_conn_data__get_server_statistics get_server_statistics; 551 func_mysqlnd_conn_data__get_host_information get_host_information; 552 func_mysqlnd_conn_data__get_protocol_information get_protocol_information; 553 func_mysqlnd_conn_data__get_last_message get_last_message; 554 func_mysqlnd_conn_data__charset_name charset_name; 555 func_mysqlnd_conn_data__list_fields list_fields; 556 func_mysqlnd_conn_data__list_method list_method; 557 558 func_mysqlnd_conn_data__get_last_insert_id get_last_insert_id; 559 func_mysqlnd_conn_data__get_affected_rows get_affected_rows; 560 func_mysqlnd_conn_data__get_warning_count get_warning_count; 561 562 func_mysqlnd_conn_data__get_field_count get_field_count; 563 564 func_mysqlnd_conn_data__get_server_status get_server_status; 565 566 func_mysqlnd_conn_data__set_server_option set_server_option; 567 func_mysqlnd_conn_data__set_client_option set_client_option; 568 func_mysqlnd_conn_data__free_contents free_contents; 569 func_mysqlnd_conn_data__free_options free_options; 570 func_mysqlnd_conn_data__dtor dtor; 571 572 func_mysqlnd_conn_data__query_read_result_set_header query_read_result_set_header; 573 574 func_mysqlnd_conn_data__get_reference get_reference; 575 func_mysqlnd_conn_data__free_reference free_reference; 576 func_mysqlnd_conn_data__get_state get_state; 577 func_mysqlnd_conn_data__set_state set_state; 578 579 func_mysqlnd_conn_data__simple_command simple_command; 580 func_mysqlnd_conn_data__simple_command_handle_response simple_command_handle_response; 581 582 func_mysqlnd_conn_data__restart_psession restart_psession; 583 func_mysqlnd_conn_data__end_psession end_psession; 584 func_mysqlnd_conn_data__send_close send_close; 585 586 func_mysqlnd_conn_data__ssl_set ssl_set; 587 588 func_mysqlnd_conn_data__result_init result_init; 589 func_mysqlnd_conn_data__set_autocommit set_autocommit; 590 func_mysqlnd_conn_data__tx_commit tx_commit; 591 func_mysqlnd_conn_data__tx_rollback tx_rollback; 592 func_mysqlnd_conn_data__tx_begin tx_begin; 593 func_mysqlnd_conn_data__tx_commit_or_rollback tx_commit_or_rollback; 594 func_mysqlnd_conn_data__tx_cor_options_to_string tx_cor_options_to_string; 595 func_mysqlnd_conn_data__tx_savepoint tx_savepoint; 596 func_mysqlnd_conn_data__tx_savepoint_release tx_savepoint_release; 597 598 func_mysqlnd_conn_data__local_tx_start local_tx_start; 599 func_mysqlnd_conn_data__local_tx_end local_tx_end; 600 601 func_mysqlnd_conn_data__execute_init_commands execute_init_commands; 602 func_mysqlnd_conn_data__get_updated_connect_flags get_updated_connect_flags; 603 func_mysqlnd_conn_data__connect_handshake connect_handshake; 604 func_mysqlnd_conn_data__simple_command_send_request simple_command_send_request; 605 func_mysqlnd_conn_data__fetch_auth_plugin_by_name fetch_auth_plugin_by_name; 606 607 func_mysqlnd_conn_data__set_client_option_2d set_client_option_2d; 608 609 func_mysqlnd_conn_data__negotiate_client_api_capabilities negotiate_client_api_capabilities; 610 func_mysqlnd_conn_data__get_client_api_capabilities get_client_api_capabilities; 611 }; 612 613 614 typedef enum_func_status (*func_mysqlnd_data__connect)(MYSQLND * conn, const char * host, const char * user, const char * passwd, unsigned int passwd_len, const char * db, unsigned int db_len, unsigned int port, const char * socket_or_pipe, unsigned int mysql_flags TSRMLS_DC); 615 typedef MYSQLND * (*func_mysqlnd_conn__clone_object)(MYSQLND * const conn TSRMLS_DC); 616 typedef void (*func_mysqlnd_conn__dtor)(MYSQLND * conn TSRMLS_DC); 617 typedef enum_func_status (*func_mysqlnd_conn__close)(MYSQLND * conn, enum_connection_close_type close_type TSRMLS_DC); 618 619 struct st_mysqlnd_conn_methods 620 { 621 func_mysqlnd_data__connect connect; 622 func_mysqlnd_conn__clone_object clone_object; 623 func_mysqlnd_conn__dtor dtor; 624 func_mysqlnd_conn__close close; 625 }; 626 627 /* for decoding - binary or text protocol */ 628 typedef enum_func_status (*func_mysqlnd_res__row_decoder)(MYSQLND_MEMORY_POOL_CHUNK * row_buffer, zval ** fields, 629 unsigned int field_count, const MYSQLND_FIELD * fields_metadata, 630 zend_bool as_int_or_float, MYSQLND_STATS * stats TSRMLS_DC); 631 632 633 typedef MYSQLND_RES * (*func_mysqlnd_res__use_result)(MYSQLND_RES * const result, zend_bool ps_protocol TSRMLS_DC); 634 typedef MYSQLND_RES * (*func_mysqlnd_res__store_result)(MYSQLND_RES * result, MYSQLND_CONN_DATA * const conn, const unsigned int flags TSRMLS_DC); 635 typedef void (*func_mysqlnd_res__fetch_into)(MYSQLND_RES *result, const unsigned int flags, zval *return_value, enum_mysqlnd_extension ext TSRMLS_DC ZEND_FILE_LINE_DC); 636 typedef MYSQLND_ROW_C (*func_mysqlnd_res__fetch_row_c)(MYSQLND_RES *result TSRMLS_DC); 637 typedef void (*func_mysqlnd_res__fetch_all)(MYSQLND_RES *result, const unsigned int flags, zval *return_value TSRMLS_DC ZEND_FILE_LINE_DC); 638 typedef void (*func_mysqlnd_res__fetch_field_data)(MYSQLND_RES *result, unsigned int offset, zval *return_value TSRMLS_DC); 639 typedef uint64_t (*func_mysqlnd_res__num_rows)(const MYSQLND_RES * const result TSRMLS_DC); 640 typedef unsigned int (*func_mysqlnd_res__num_fields)(const MYSQLND_RES * const result TSRMLS_DC); 641 typedef enum_func_status (*func_mysqlnd_res__skip_result)(MYSQLND_RES * const result TSRMLS_DC); 642 typedef enum_func_status (*func_mysqlnd_res__seek_data)(MYSQLND_RES * const result, const uint64_t row TSRMLS_DC); 643 typedef MYSQLND_FIELD_OFFSET (*func_mysqlnd_res__seek_field)(MYSQLND_RES * const result, const MYSQLND_FIELD_OFFSET field_offset TSRMLS_DC); 644 typedef MYSQLND_FIELD_OFFSET (*func_mysqlnd_res__field_tell)(const MYSQLND_RES * const result TSRMLS_DC); 645 typedef const MYSQLND_FIELD *(*func_mysqlnd_res__fetch_field)(MYSQLND_RES * const result TSRMLS_DC); 646 typedef const MYSQLND_FIELD *(*func_mysqlnd_res__fetch_field_direct)(MYSQLND_RES * const result, const MYSQLND_FIELD_OFFSET fieldnr TSRMLS_DC); 647 typedef const MYSQLND_FIELD *(*func_mysqlnd_res__fetch_fields)(MYSQLND_RES * const result TSRMLS_DC); 648 649 typedef enum_func_status (*func_mysqlnd_res__read_result_metadata)(MYSQLND_RES * result, MYSQLND_CONN_DATA * conn TSRMLS_DC); 650 typedef unsigned long * (*func_mysqlnd_res__fetch_lengths)(MYSQLND_RES * const result TSRMLS_DC); 651 typedef enum_func_status (*func_mysqlnd_res__store_result_fetch_data)(MYSQLND_CONN_DATA * const conn, MYSQLND_RES * result, MYSQLND_RES_METADATA * meta, MYSQLND_MEMORY_POOL_CHUNK *** row_buffers, zend_bool binary_protocol TSRMLS_DC); 652 653 typedef void (*func_mysqlnd_res__free_result_buffers)(MYSQLND_RES * result TSRMLS_DC); /* private */ 654 typedef enum_func_status (*func_mysqlnd_res__free_result)(MYSQLND_RES * result, zend_bool implicit TSRMLS_DC); 655 typedef void (*func_mysqlnd_res__free_result_internal)(MYSQLND_RES *result TSRMLS_DC); 656 typedef void (*func_mysqlnd_res__free_result_contents)(MYSQLND_RES *result TSRMLS_DC); 657 typedef void (*func_mysqlnd_res__free_buffered_data)(MYSQLND_RES *result TSRMLS_DC); 658 typedef void (*func_mysqlnd_res__unbuffered_free_last_data)(MYSQLND_RES *result TSRMLS_DC); 659 660 661 typedef MYSQLND_RES_METADATA * (*func_mysqlnd_res__result_meta_init)(unsigned int field_count, zend_bool persistent TSRMLS_DC); 662 663 struct st_mysqlnd_res_methods 664 { 665 mysqlnd_fetch_row_func fetch_row; 666 667 func_mysqlnd_res__use_result use_result; 668 func_mysqlnd_res__store_result store_result; 669 func_mysqlnd_res__fetch_into fetch_into; 670 func_mysqlnd_res__fetch_row_c fetch_row_c; 671 func_mysqlnd_res__fetch_all fetch_all; 672 func_mysqlnd_res__fetch_field_data fetch_field_data; 673 func_mysqlnd_res__num_rows num_rows; 674 func_mysqlnd_res__num_fields num_fields; 675 func_mysqlnd_res__skip_result skip_result; 676 func_mysqlnd_res__seek_data seek_data; 677 func_mysqlnd_res__seek_field seek_field; 678 func_mysqlnd_res__field_tell field_tell; 679 func_mysqlnd_res__fetch_field fetch_field; 680 func_mysqlnd_res__fetch_field_direct fetch_field_direct; 681 func_mysqlnd_res__fetch_fields fetch_fields; 682 func_mysqlnd_res__read_result_metadata read_result_metadata; 683 func_mysqlnd_res__fetch_lengths fetch_lengths; 684 func_mysqlnd_res__store_result_fetch_data store_result_fetch_data; 685 func_mysqlnd_res__free_result_buffers free_result_buffers; 686 func_mysqlnd_res__free_result free_result; 687 func_mysqlnd_res__free_result_internal free_result_internal; 688 func_mysqlnd_res__free_result_contents free_result_contents; 689 690 func_mysqlnd_res__result_meta_init result_meta_init; 691 692 void * unused1; 693 void * unused2; 694 void * unused3; 695 void * unused4; 696 void * unused5; 697 }; 698 699 700 typedef uint64_t (*func_mysqlnd_result_unbuffered__num_rows)(const MYSQLND_RES_UNBUFFERED * const result TSRMLS_DC); 701 typedef unsigned long * (*func_mysqlnd_result_unbuffered__fetch_lengths)(MYSQLND_RES_UNBUFFERED * const result TSRMLS_DC); 702 typedef void (*func_mysqlnd_result_unbuffered__free_last_data)(MYSQLND_RES_UNBUFFERED * result, MYSQLND_STATS * const global_stats TSRMLS_DC); 703 typedef void (*func_mysqlnd_result_unbuffered__free_result)(MYSQLND_RES_UNBUFFERED * const result, MYSQLND_STATS * const global_stats TSRMLS_DC); 704 705 struct st_mysqlnd_result_unbuffered_methods 706 { 707 mysqlnd_fetch_row_func fetch_row; 708 func_mysqlnd_res__row_decoder row_decoder; 709 func_mysqlnd_result_unbuffered__num_rows num_rows; 710 func_mysqlnd_result_unbuffered__fetch_lengths fetch_lengths; 711 func_mysqlnd_result_unbuffered__free_last_data free_last_data; 712 func_mysqlnd_result_unbuffered__free_result free_result; 713 }; 714 715 typedef uint64_t (*func_mysqlnd_result_buffered__num_rows)(const MYSQLND_RES_BUFFERED * const result TSRMLS_DC); 716 typedef enum_func_status (*func_mysqlnd_result_buffered__initialize_result_set_rest)(MYSQLND_RES_BUFFERED * const result, MYSQLND_RES_METADATA * const meta, 717 MYSQLND_STATS * stats, zend_bool int_and_float_native TSRMLS_DC); 718 typedef unsigned long * (*func_mysqlnd_result_buffered__fetch_lengths)(MYSQLND_RES_BUFFERED * const result TSRMLS_DC); 719 typedef enum_func_status (*func_mysqlnd_result_buffered__data_seek)(MYSQLND_RES_BUFFERED * const result, const uint64_t row TSRMLS_DC); 720 typedef void (*func_mysqlnd_result_buffered__free_result)(MYSQLND_RES_BUFFERED * const result TSRMLS_DC); 721 722 struct st_mysqlnd_result_buffered_methods 723 { 724 mysqlnd_fetch_row_func fetch_row; 725 func_mysqlnd_res__row_decoder row_decoder; 726 func_mysqlnd_result_buffered__num_rows num_rows; 727 func_mysqlnd_result_buffered__fetch_lengths fetch_lengths; 728 func_mysqlnd_result_buffered__data_seek data_seek; 729 func_mysqlnd_result_buffered__initialize_result_set_rest initialize_result_set_rest; 730 func_mysqlnd_result_buffered__free_result free_result; 731 }; 732 733 734 typedef const MYSQLND_FIELD * (*func_mysqlnd_res_meta__fetch_field)(MYSQLND_RES_METADATA * const meta TSRMLS_DC); 735 typedef const MYSQLND_FIELD * (*func_mysqlnd_res_meta__fetch_field_direct)(const MYSQLND_RES_METADATA * const meta, const MYSQLND_FIELD_OFFSET fieldnr TSRMLS_DC); 736 typedef const MYSQLND_FIELD * (*func_mysqlnd_res_meta__fetch_fields)(MYSQLND_RES_METADATA * const meta TSRMLS_DC); 737 typedef MYSQLND_FIELD_OFFSET (*func_mysqlnd_res_meta__field_tell)(const MYSQLND_RES_METADATA * const meta TSRMLS_DC); 738 typedef MYSQLND_FIELD_OFFSET (*func_mysqlnd_res_meta__field_seek)(MYSQLND_RES_METADATA * const meta, const MYSQLND_FIELD_OFFSET field_offset TSRMLS_DC); 739 typedef enum_func_status (*func_mysqlnd_res_meta__read_metadata)(MYSQLND_RES_METADATA * const meta, MYSQLND_CONN_DATA * conn TSRMLS_DC); 740 typedef MYSQLND_RES_METADATA * (*func_mysqlnd_res_meta__clone_metadata)(const MYSQLND_RES_METADATA * const meta, zend_bool persistent TSRMLS_DC); 741 typedef void (*func_mysqlnd_res_meta__free_metadata)(MYSQLND_RES_METADATA * meta TSRMLS_DC); 742 743 struct st_mysqlnd_res_meta_methods 744 { 745 func_mysqlnd_res_meta__fetch_field fetch_field; 746 func_mysqlnd_res_meta__fetch_field_direct fetch_field_direct; 747 func_mysqlnd_res_meta__fetch_fields fetch_fields; 748 func_mysqlnd_res_meta__field_tell field_tell; 749 func_mysqlnd_res_meta__field_seek field_seek; 750 func_mysqlnd_res_meta__read_metadata read_metadata; 751 func_mysqlnd_res_meta__clone_metadata clone_metadata; 752 func_mysqlnd_res_meta__free_metadata free_metadata; 753 }; 754 755 756 typedef enum_func_status (*func_mysqlnd_stmt__prepare)(MYSQLND_STMT * const stmt, const char * const query, unsigned int query_len TSRMLS_DC); 757 typedef enum_func_status (*func_mysqlnd_stmt__execute)(MYSQLND_STMT * const stmt TSRMLS_DC); 758 typedef MYSQLND_RES * (*func_mysqlnd_stmt__use_result)(MYSQLND_STMT * const stmt TSRMLS_DC); 759 typedef MYSQLND_RES * (*func_mysqlnd_stmt__store_result)(MYSQLND_STMT * const stmt TSRMLS_DC); 760 typedef MYSQLND_RES * (*func_mysqlnd_stmt__get_result)(MYSQLND_STMT * const stmt TSRMLS_DC); 761 typedef zend_bool (*func_mysqlnd_stmt__more_results)(const MYSQLND_STMT * const stmt TSRMLS_DC); 762 typedef enum_func_status (*func_mysqlnd_stmt__next_result)(MYSQLND_STMT * const stmt TSRMLS_DC); 763 typedef enum_func_status (*func_mysqlnd_stmt__free_result)(MYSQLND_STMT * const stmt TSRMLS_DC); 764 typedef enum_func_status (*func_mysqlnd_stmt__seek_data)(const MYSQLND_STMT * const stmt, uint64_t row TSRMLS_DC); 765 typedef enum_func_status (*func_mysqlnd_stmt__reset)(MYSQLND_STMT * const stmt TSRMLS_DC); 766 typedef enum_func_status (*func_mysqlnd_stmt__net_close)(MYSQLND_STMT * const stmt, zend_bool implicit TSRMLS_DC); /* private */ 767 typedef enum_func_status (*func_mysqlnd_stmt__dtor)(MYSQLND_STMT * const stmt, zend_bool implicit TSRMLS_DC); /* use this for mysqlnd_stmt_close */ 768 typedef enum_func_status (*func_mysqlnd_stmt__fetch)(MYSQLND_STMT * const stmt, zend_bool * const fetched_anything TSRMLS_DC); 769 typedef enum_func_status (*func_mysqlnd_stmt__bind_parameters)(MYSQLND_STMT * const stmt, MYSQLND_PARAM_BIND * const param_bind TSRMLS_DC); 770 typedef enum_func_status (*func_mysqlnd_stmt__bind_one_parameter)(MYSQLND_STMT * const stmt, unsigned int param_no, zval * const zv, zend_uchar type TSRMLS_DC); 771 typedef enum_func_status (*func_mysqlnd_stmt__refresh_bind_param)(MYSQLND_STMT * const stmt TSRMLS_DC); 772 typedef enum_func_status (*func_mysqlnd_stmt__bind_result)(MYSQLND_STMT * const stmt, MYSQLND_RESULT_BIND * const result_bind TSRMLS_DC); 773 typedef enum_func_status (*func_mysqlnd_stmt__bind_one_result)(MYSQLND_STMT * const stmt, unsigned int param_no TSRMLS_DC); 774 typedef enum_func_status (*func_mysqlnd_stmt__send_long_data)(MYSQLND_STMT * const stmt, unsigned int param_num, const char * const data, unsigned long length TSRMLS_DC); 775 typedef MYSQLND_RES * (*func_mysqlnd_stmt__get_parameter_metadata)(MYSQLND_STMT * const stmt TSRMLS_DC); 776 typedef MYSQLND_RES * (*func_mysqlnd_stmt__get_result_metadata)(MYSQLND_STMT * const stmt TSRMLS_DC); 777 typedef uint64_t (*func_mysqlnd_stmt__get_last_insert_id)(const MYSQLND_STMT * const stmt TSRMLS_DC); 778 typedef uint64_t (*func_mysqlnd_stmt__get_affected_rows)(const MYSQLND_STMT * const stmt TSRMLS_DC); 779 typedef uint64_t (*func_mysqlnd_stmt__get_num_rows)(const MYSQLND_STMT * const stmt TSRMLS_DC); 780 typedef unsigned int (*func_mysqlnd_stmt__get_param_count)(const MYSQLND_STMT * const stmt TSRMLS_DC); 781 typedef unsigned int (*func_mysqlnd_stmt__get_field_count)(const MYSQLND_STMT * const stmt TSRMLS_DC); 782 typedef unsigned int (*func_mysqlnd_stmt__get_warning_count)(const MYSQLND_STMT * const stmt TSRMLS_DC); 783 typedef unsigned int (*func_mysqlnd_stmt__get_error_no)(const MYSQLND_STMT * const stmt TSRMLS_DC); 784 typedef const char * (*func_mysqlnd_stmt__get_error_str)(const MYSQLND_STMT * const stmt TSRMLS_DC); 785 typedef const char * (*func_mysqlnd_stmt__get_sqlstate)(const MYSQLND_STMT * const stmt TSRMLS_DC); 786 typedef enum_func_status (*func_mysqlnd_stmt__get_attribute)(const MYSQLND_STMT * const stmt, enum mysqlnd_stmt_attr attr_type, void * const value TSRMLS_DC); 787 typedef enum_func_status (*func_mysqlnd_stmt__set_attribute)(MYSQLND_STMT * const stmt, enum mysqlnd_stmt_attr attr_type, const void * const value TSRMLS_DC); 788 typedef MYSQLND_PARAM_BIND *(*func_mysqlnd_stmt__alloc_param_bind)(MYSQLND_STMT * const stmt TSRMLS_DC); 789 typedef MYSQLND_RESULT_BIND*(*func_mysqlnd_stmt__alloc_result_bind)(MYSQLND_STMT * const stmt TSRMLS_DC); 790 typedef void (*func_mysqlnd_stmt__free_parameter_bind)(MYSQLND_STMT * const stmt, MYSQLND_PARAM_BIND * TSRMLS_DC); 791 typedef void (*func_mysqlnd_stmt__free_result_bind)(MYSQLND_STMT * const stmt, MYSQLND_RESULT_BIND * TSRMLS_DC); 792 typedef unsigned int (*func_mysqlnd_stmt__server_status)(const MYSQLND_STMT * const stmt TSRMLS_DC); 793 typedef enum_func_status (*func_mysqlnd_stmt__generate_execute_request)(MYSQLND_STMT * const s, zend_uchar ** request, size_t *request_len, zend_bool * free_buffer TSRMLS_DC); 794 typedef enum_func_status (*func_mysqlnd_stmt__parse_execute_response)(MYSQLND_STMT * const s TSRMLS_DC); 795 typedef void (*func_mysqlnd_stmt__free_stmt_content)(MYSQLND_STMT * const s TSRMLS_DC); 796 typedef enum_func_status (*func_mysqlnd_stmt__flush)(MYSQLND_STMT * const stmt TSRMLS_DC); 797 typedef void (*func_mysqlnd_stmt__free_stmt_result)(MYSQLND_STMT * const s TSRMLS_DC); 798 799 struct st_mysqlnd_stmt_methods 800 { 801 func_mysqlnd_stmt__prepare prepare; 802 func_mysqlnd_stmt__execute execute; 803 func_mysqlnd_stmt__use_result use_result; 804 func_mysqlnd_stmt__store_result store_result; 805 func_mysqlnd_stmt__get_result get_result; 806 func_mysqlnd_stmt__more_results more_results; 807 func_mysqlnd_stmt__next_result next_result; 808 func_mysqlnd_stmt__free_result free_result; 809 func_mysqlnd_stmt__seek_data seek_data; 810 func_mysqlnd_stmt__reset reset; 811 func_mysqlnd_stmt__net_close net_close; 812 func_mysqlnd_stmt__dtor dtor; 813 func_mysqlnd_stmt__fetch fetch; 814 815 func_mysqlnd_stmt__bind_parameters bind_parameters; 816 func_mysqlnd_stmt__bind_one_parameter bind_one_parameter; 817 func_mysqlnd_stmt__refresh_bind_param refresh_bind_param; 818 func_mysqlnd_stmt__bind_result bind_result; 819 func_mysqlnd_stmt__bind_one_result bind_one_result; 820 func_mysqlnd_stmt__send_long_data send_long_data; 821 func_mysqlnd_stmt__get_parameter_metadata get_parameter_metadata; 822 func_mysqlnd_stmt__get_result_metadata get_result_metadata; 823 824 func_mysqlnd_stmt__get_last_insert_id get_last_insert_id; 825 func_mysqlnd_stmt__get_affected_rows get_affected_rows; 826 func_mysqlnd_stmt__get_num_rows get_num_rows; 827 828 func_mysqlnd_stmt__get_param_count get_param_count; 829 func_mysqlnd_stmt__get_field_count get_field_count; 830 func_mysqlnd_stmt__get_warning_count get_warning_count; 831 832 func_mysqlnd_stmt__get_error_no get_error_no; 833 func_mysqlnd_stmt__get_error_str get_error_str; 834 func_mysqlnd_stmt__get_sqlstate get_sqlstate; 835 836 func_mysqlnd_stmt__get_attribute get_attribute; 837 func_mysqlnd_stmt__set_attribute set_attribute; 838 839 func_mysqlnd_stmt__alloc_param_bind alloc_parameter_bind; 840 func_mysqlnd_stmt__alloc_result_bind alloc_result_bind; 841 842 func_mysqlnd_stmt__free_parameter_bind free_parameter_bind; 843 func_mysqlnd_stmt__free_result_bind free_result_bind; 844 845 func_mysqlnd_stmt__server_status get_server_status; 846 847 func_mysqlnd_stmt__generate_execute_request generate_execute_request; 848 func_mysqlnd_stmt__parse_execute_response parse_execute_response; 849 850 func_mysqlnd_stmt__free_stmt_content free_stmt_content; 851 852 func_mysqlnd_stmt__flush flush; 853 854 func_mysqlnd_stmt__free_stmt_result free_stmt_result; 855 }; 856 857 858 struct st_mysqlnd_net_data 859 { 860 php_stream *stream; 861 zend_bool compressed; 862 zend_bool ssl; 863 #ifdef MYSQLND_DO_WIRE_CHECK_BEFORE_COMMAND 864 zend_uchar last_command; 865 #else 866 zend_uchar unused_pad1; 867 #endif 868 MYSQLND_NET_OPTIONS options; 869 870 unsigned int refcount; 871 872 zend_bool persistent; 873 874 struct st_mysqlnd_net_methods m; 875 }; 876 877 878 struct st_mysqlnd_net 879 { 880 struct st_mysqlnd_net_data * data; 881 882 /* sequence for simple checking of correct packets */ 883 zend_uchar packet_no; 884 zend_uchar compressed_envelope_packet_no; 885 886 #ifdef MYSQLND_COMPRESSION_ENABLED 887 MYSQLND_READ_BUFFER * uncompressed_data; 888 #else 889 void * unused_pad1; 890 #endif 891 892 /* cmd buffer */ 893 MYSQLND_CMD_BUFFER cmd_buffer; 894 895 zend_bool persistent; 896 }; 897 898 899 struct st_mysqlnd_protocol 900 { 901 zend_bool persistent; 902 struct st_mysqlnd_protocol_methods m; 903 }; 904 905 906 struct st_mysqlnd_connection_data 907 { 908 /* Operation related */ 909 MYSQLND_NET * net; 910 MYSQLND_PROTOCOL * protocol; 911 912 /* Information related */ 913 char *host; 914 unsigned int host_len; 915 char *unix_socket; 916 unsigned int unix_socket_len; 917 char *user; 918 unsigned int user_len; 919 char *passwd; 920 unsigned int passwd_len; 921 char *scheme; 922 unsigned int scheme_len; 923 uint64_t thread_id; 924 char *server_version; 925 char *host_info; 926 zend_uchar *auth_plugin_data; 927 size_t auth_plugin_data_len; 928 const MYSQLND_CHARSET *charset; 929 const MYSQLND_CHARSET *greet_charset; 930 char *connect_or_select_db; 931 unsigned int connect_or_select_db_len; 932 MYSQLND_INFILE infile; 933 unsigned int protocol_version; 934 unsigned long max_packet_size; 935 unsigned int port; 936 unsigned long client_flag; 937 unsigned long server_capabilities; 938 939 /* For UPSERT queries */ 940 MYSQLND_UPSERT_STATUS * upsert_status; 941 MYSQLND_UPSERT_STATUS upsert_status_impl; 942 char *last_message; 943 unsigned int last_message_len; 944 945 /* If error packet, we use these */ 946 MYSQLND_ERROR_INFO * error_info; 947 MYSQLND_ERROR_INFO error_info_impl; 948 949 /* 950 To prevent queries during unbuffered fetches. Also to 951 mark the connection as destroyed for garbage collection. 952 */ 953 enum mysqlnd_connection_state state; 954 enum_mysqlnd_query_type last_query_type; 955 /* Temporary storage between query and (use|store)_result() call */ 956 MYSQLND_RES *current_result; 957 958 /* 959 How many result sets reference this connection. 960 It won't be freed until this number reaches 0. 961 The last one, please close the door! :-) 962 The result set objects can determine by inspecting 963 'quit_sent' whether the connection is still valid. 964 */ 965 unsigned int refcount; 966 967 /* Temporal storage for mysql_query */ 968 unsigned int field_count; 969 970 /* options */ 971 MYSQLND_OPTIONS * options; 972 MYSQLND_OPTIONS options_impl; 973 974 /* stats */ 975 MYSQLND_STATS * stats; 976 977 unsigned int client_api_capabilities; 978 979 struct st_mysqlnd_conn_data_methods * m; 980 981 /* persistent connection */ 982 zend_bool persistent; 983 }; 984 985 986 struct st_mysqlnd_connection 987 { 988 MYSQLND_CONN_DATA * data; 989 zend_bool persistent; 990 struct st_mysqlnd_conn_methods * m; 991 }; 992 993 994 struct mysqlnd_field_hash_key 995 { 996 zend_bool is_numeric; 997 unsigned long key; 998 }; 999 1000 1001 struct st_mysqlnd_result_metadata 1002 { 1003 MYSQLND_FIELD *fields; 1004 struct mysqlnd_field_hash_key *zend_hash_keys; 1005 unsigned int current_field; 1006 unsigned int field_count; 1007 /* We need this to make fast allocs in rowp_read */ 1008 unsigned int bit_fields_count; 1009 size_t bit_fields_total_len; /* trailing \0 not counted */ 1010 zend_bool persistent; 1011 1012 struct st_mysqlnd_res_meta_methods * m; 1013 }; 1014 1015 1016 #define def_mysqlnd_buffered_result_parent \ 1017 MYSQLND_MEMORY_POOL_CHUNK **row_buffers; \ 1018 uint64_t row_count; \ 1019 uint64_t initialized_rows; \ 1020 \ 1021 /* Column lengths of current row - both buffered and unbuffered. For buffered results it duplicates the data found in **data */ \ 1022 unsigned long *lengths; \ 1023 \ 1024 MYSQLND_MEMORY_POOL *result_set_memory_pool; \ 1025 \ 1026 unsigned int references; \ 1027 \ 1028 MYSQLND_ERROR_INFO error_info; \ 1029 \ 1030 unsigned int field_count; \ 1031 zend_bool ps; \ 1032 zend_bool persistent; \ 1033 struct st_mysqlnd_result_buffered_methods m; \ 1034 enum mysqlnd_buffered_type type; \ 1035 void * unused1; \ 1036 void * unused2; \ 1037 void * unused3 1038 1039 1040 struct st_mysqlnd_buffered_result_parent 1041 { 1042 def_mysqlnd_buffered_result_parent; 1043 }; 1044 1045 1046 struct st_mysqlnd_buffered_result_zval 1047 { 1048 def_mysqlnd_buffered_result_parent; 1049 1050 zval **data; 1051 zval **data_cursor; 1052 }; 1053 1054 1055 struct st_mysqlnd_buffered_result_c 1056 { 1057 def_mysqlnd_buffered_result_parent; 1058 1059 zend_uchar *initialized; /* every row is a single bit */ 1060 uint64_t current_row; 1061 }; 1062 1063 1064 struct st_mysqlnd_unbuffered_result 1065 { 1066 1067 /* For unbuffered (both normal and PS) */ 1068 zval **last_row_data; 1069 MYSQLND_MEMORY_POOL_CHUNK *last_row_buffer; 1070 1071 /* 1072 Column lengths of current row - both buffered and unbuffered. 1073 For buffered results it duplicates the data found in **data 1074 */ 1075 unsigned long *lengths; 1076 1077 MYSQLND_MEMORY_POOL *result_set_memory_pool; 1078 1079 struct st_mysqlnd_packet_row * row_packet; 1080 1081 uint64_t row_count; 1082 zend_bool eof_reached; 1083 1084 unsigned int field_count; 1085 zend_bool ps; 1086 zend_bool persistent; 1087 1088 struct st_mysqlnd_result_unbuffered_methods m; 1089 }; 1090 1091 1092 struct st_mysqlnd_res 1093 { 1094 MYSQLND_CONN_DATA *conn; 1095 enum_mysqlnd_res_type type; 1096 unsigned int field_count; 1097 1098 /* For metadata functions */ 1099 MYSQLND_RES_METADATA *meta; 1100 1101 /* To be used with store_result() - both normal and PS */ 1102 MYSQLND_RES_BUFFERED *stored_data; 1103 MYSQLND_RES_UNBUFFERED *unbuf; 1104 1105 zend_bool persistent; 1106 1107 struct st_mysqlnd_res_methods m; 1108 }; 1109 1110 1111 struct st_mysqlnd_param_bind 1112 { 1113 zval *zv; 1114 zend_uchar type; 1115 enum_param_bind_flags flags; 1116 }; 1117 1118 struct st_mysqlnd_result_bind 1119 { 1120 zval *zv; 1121 zend_bool bound; 1122 }; 1123 1124 1125 struct st_mysqlnd_stmt_data 1126 { 1127 MYSQLND_CONN_DATA *conn; 1128 unsigned long stmt_id; 1129 unsigned long flags;/* cursor is set here */ 1130 enum_mysqlnd_stmt_state state; 1131 unsigned int warning_count; 1132 MYSQLND_RES *result; 1133 unsigned int field_count; 1134 unsigned int param_count; 1135 unsigned char send_types_to_server; 1136 MYSQLND_PARAM_BIND *param_bind; 1137 MYSQLND_RESULT_BIND *result_bind; 1138 zend_bool result_zvals_separated_once; 1139 zend_bool persistent; 1140 1141 MYSQLND_UPSERT_STATUS * upsert_status; 1142 MYSQLND_UPSERT_STATUS upsert_status_impl; 1143 1144 MYSQLND_ERROR_INFO * error_info; 1145 MYSQLND_ERROR_INFO error_info_impl; 1146 1147 zend_bool update_max_length; 1148 unsigned long prefetch_rows; 1149 1150 zend_bool cursor_exists; 1151 mysqlnd_stmt_use_or_store_func default_rset_handler; 1152 1153 MYSQLND_CMD_BUFFER execute_cmd_buffer; 1154 unsigned int execute_count;/* count how many times the stmt was executed */ 1155 }; 1156 1157 1158 struct st_mysqlnd_stmt 1159 { 1160 MYSQLND_STMT_DATA * data; 1161 struct st_mysqlnd_stmt_methods *m; 1162 zend_bool persistent; 1163 }; 1164 1165 1166 typedef struct st_mysqlnd_string 1167 { 1168 char *s; 1169 size_t l; 1170 } MYSQLND_STRING; 1171 1172 1173 struct st_mysqlnd_plugin_header 1174 { 1175 unsigned int plugin_api_version; 1176 const char * plugin_name; 1177 unsigned long plugin_version; 1178 const char * plugin_string_version; 1179 const char * plugin_license; 1180 const char * plugin_author; 1181 struct 1182 { 1183 MYSQLND_STATS * values; 1184 const MYSQLND_STRING * names; 1185 } plugin_stats; 1186 1187 struct 1188 { 1189 enum_func_status (*plugin_shutdown)(void * plugin TSRMLS_DC); 1190 } m; 1191 }; 1192 1193 1194 struct st_mysqlnd_plugin_core 1195 { 1196 struct st_mysqlnd_plugin_header plugin_header; 1197 }; 1198 1199 1200 struct st_mysqlnd_typeii_plugin_example 1201 { 1202 struct st_mysqlnd_plugin_header plugin_header; 1203 void * methods; 1204 unsigned int counter; 1205 }; 1206 1207 struct st_mysqlnd_authentication_plugin; 1208 1209 typedef zend_uchar * (*func_auth_plugin__get_auth_data)(struct st_mysqlnd_authentication_plugin * self, 1210 size_t * auth_data_len, 1211 MYSQLND_CONN_DATA * conn, const char * const user, const char * const passwd, 1212 const size_t passwd_len, zend_uchar * auth_plugin_data, size_t auth_plugin_data_len, 1213 const MYSQLND_OPTIONS * const options, 1214 const MYSQLND_NET_OPTIONS * const net_options, unsigned long mysql_flags 1215 TSRMLS_DC); 1216 1217 struct st_mysqlnd_authentication_plugin 1218 { 1219 struct st_mysqlnd_plugin_header plugin_header; 1220 struct { 1221 func_auth_plugin__get_auth_data get_auth_data; 1222 } methods; 1223 }; 1224 1225 1226 #endif /* MYSQLND_STRUCTS_H */ 1227