1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
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;
76 const char *org_name;
77 const char *table;
78 const char *org_table;
79 const char *db;
80 const char *catalog;
81 char *def;
82 unsigned long length;
83 unsigned long max_length;
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;
92 unsigned int decimals;
93 unsigned int charsetnr;
94 enum mysqlnd_field_types type;
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
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
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
165 unsigned int num_commands;
166 char **init_commands;
167
168
169 char *cfg_file;
170 char *cfg_section;
171
172 char *auth_protocol;
173
174
175
176
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
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
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
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;
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);
472 typedef void (*func_mysqlnd_conn_data__free_options)(MYSQLND_CONN_DATA * conn TSRMLS_DC);
473 typedef void (*func_mysqlnd_conn_data__dtor)(MYSQLND_CONN_DATA * conn TSRMLS_DC);
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
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);
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);
767 typedef enum_func_status (*func_mysqlnd_stmt__dtor)(MYSQLND_STMT * const stmt, zend_bool implicit TSRMLS_DC);
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
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
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
909 MYSQLND_NET * net;
910 MYSQLND_PROTOCOL * protocol;
911
912
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
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
946 MYSQLND_ERROR_INFO * error_info;
947 MYSQLND_ERROR_INFO error_info_impl;
948
949
950
951
952
953 enum mysqlnd_connection_state state;
954 enum_mysqlnd_query_type last_query_type;
955
956 MYSQLND_RES *current_result;
957
958
959
960
961
962
963
964
965 unsigned int refcount;
966
967
968 unsigned int field_count;
969
970
971 MYSQLND_OPTIONS * options;
972 MYSQLND_OPTIONS options_impl;
973
974
975 MYSQLND_STATS * stats;
976
977 unsigned int client_api_capabilities;
978
979 struct st_mysqlnd_conn_data_methods * m;
980
981
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
1008 unsigned int bit_fields_count;
1009 size_t bit_fields_total_len;
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 \
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;
1060 uint64_t current_row;
1061 };
1062
1063
1064 struct st_mysqlnd_unbuffered_result
1065 {
1066
1067
1068 zval **last_row_data;
1069 MYSQLND_MEMORY_POOL_CHUNK *last_row_buffer;
1070
1071
1072
1073
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
1099 MYSQLND_RES_METADATA *meta;
1100
1101
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;
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;
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