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