Busybox: Upgrade to 1.21.1 (stable). lsof active.
[tomato.git] / release / src / router / php / ext / mysqlnd / mysqlnd_structs.h
blob5c07a3c3c9b70d301865e88bc106d689b08d117f
1 /*
2 +----------------------------------------------------------------------+
3 | PHP Version 5 |
4 +----------------------------------------------------------------------+
5 | Copyright (c) 2006-2013 The PHP Group |
6 +----------------------------------------------------------------------+
7 | This source file is subject to version 3.01 of the PHP license, |
8 | that is bundled with this package in the file LICENSE, and is |
9 | available through the world-wide-web at the following url: |
10 | http://www.php.net/license/3_01.txt |
11 | If you did not receive a copy of the PHP license and are unable to |
12 | obtain it through the world-wide-web, please send a note to |
13 | license@php.net so we can mail you a copy immediately. |
14 +----------------------------------------------------------------------+
15 | Authors: Andrey Hristov <andrey@mysql.com> |
16 | Ulf Wendel <uwendel@mysql.com> |
17 | Georg Richter <georg@mysql.com> |
18 +----------------------------------------------------------------------+
21 /* $Id$ */
23 #ifndef MYSQLND_STRUCTS_H
24 #define MYSQLND_STRUCTS_H
26 #define MYSQLND_TYPEDEFED_METHODS
28 #define MYSQLND_CLASS_METHOD_TABLE_NAME(class) mysqlnd_##class##_methods
29 #define MYSQLND_CLASS_METHOD_TABLE_NAME_FORWARD(class) struct st_##class##_methods MYSQLND_CLASS_METHOD_TABLE_NAME(class)
31 #define MYSQLND_CLASS_METHODS_START(class) MYSQLND_CLASS_METHOD_TABLE_NAME_FORWARD(class) = {
32 #define MYSQLND_CLASS_METHODS_END }
34 typedef struct st_mysqlnd_memory_pool MYSQLND_MEMORY_POOL;
35 typedef struct st_mysqlnd_memory_pool_chunk MYSQLND_MEMORY_POOL_CHUNK;
36 typedef struct st_mysqlnd_memory_pool_chunk_llist MYSQLND_MEMORY_POOL_CHUNK_LLIST;
39 #define MYSQLND_MEMORY_POOL_CHUNK_LIST_SIZE 100
41 struct st_mysqlnd_memory_pool
43 zend_uchar *arena;
44 unsigned int refcount;
45 unsigned int arena_size;
46 unsigned int free_size;
48 MYSQLND_MEMORY_POOL_CHUNK* (*get_chunk)(MYSQLND_MEMORY_POOL * pool, unsigned int size TSRMLS_DC);
51 struct st_mysqlnd_memory_pool_chunk
53 size_t app;
54 MYSQLND_MEMORY_POOL *pool;
55 zend_uchar *ptr;
56 unsigned int size;
57 enum_func_status (*resize_chunk)(MYSQLND_MEMORY_POOL_CHUNK * chunk, unsigned int size TSRMLS_DC);
58 void (*free_chunk)(MYSQLND_MEMORY_POOL_CHUNK * chunk TSRMLS_DC);
59 zend_bool from_pool;
63 typedef struct st_mysqlnd_cmd_buffer
65 zend_uchar *buffer;
66 size_t length;
67 } MYSQLND_CMD_BUFFER;
70 typedef struct st_mysqlnd_field
72 const char *name; /* Name of column */
73 const char *org_name; /* Original column name, if an alias */
74 const char *table; /* Table of column if column was a field */
75 const char *org_table; /* Org table name, if table was an alias */
76 const char *db; /* Database for table */
77 const char *catalog; /* Catalog for table */
78 char *def; /* Default value (set by mysql_list_fields) */
79 unsigned long length; /* Width of column (create length) */
80 unsigned long max_length; /* Max width for selected set */
81 unsigned int name_length;
82 unsigned int org_name_length;
83 unsigned int table_length;
84 unsigned int org_table_length;
85 unsigned int db_length;
86 unsigned int catalog_length;
87 unsigned int def_length;
88 unsigned int flags; /* Diverse flags */
89 unsigned int decimals; /* Number of decimals in field */
90 unsigned int charsetnr; /* Character set */
91 enum mysqlnd_field_types type; /* Type of field. See mysql_com.h for types */
92 char *root;
93 size_t root_len;
94 } MYSQLND_FIELD;
97 typedef struct st_mysqlnd_upsert_result
99 unsigned int warning_count;
100 unsigned int server_status;
101 uint64_t affected_rows;
102 uint64_t last_insert_id;
103 } MYSQLND_UPSERT_STATUS;
106 typedef struct st_mysqlnd_error_info
108 char error[MYSQLND_ERRMSG_SIZE+1];
109 char sqlstate[MYSQLND_SQLSTATE_LENGTH + 1];
110 unsigned int error_no;
111 zend_llist * error_list;
112 } MYSQLND_ERROR_INFO;
115 typedef struct st_mysqlnd_error_list_element
117 char * error;
118 char sqlstate[MYSQLND_SQLSTATE_LENGTH + 1];
119 unsigned int error_no;
120 } MYSQLND_ERROR_LIST_ELEMENT;
123 typedef struct st_mysqlnd_infile_info
125 php_stream *fd;
126 int error_no;
127 char error_msg[MYSQLND_ERRMSG_SIZE + 1];
128 const char *filename;
129 } MYSQLND_INFILE_INFO;
132 /* character set information */
133 typedef struct st_mysqlnd_charset
135 unsigned int nr;
136 const char *name;
137 const char *collation;
138 unsigned int char_minlen;
139 unsigned int char_maxlen;
140 const char *comment;
141 unsigned int (*mb_charlen)(unsigned int c);
142 unsigned int (*mb_valid)(const char *start, const char *end);
143 } MYSQLND_CHARSET;
146 /* local infile handler */
147 typedef struct st_mysqlnd_infile
149 int (*local_infile_init)(void **ptr, char *filename, void **userdata TSRMLS_DC);
150 int (*local_infile_read)(void *ptr, zend_uchar * buf, unsigned int buf_len TSRMLS_DC);
151 int (*local_infile_error)(void *ptr, char *error_msg, unsigned int error_msg_len TSRMLS_DC);
152 void (*local_infile_end)(void *ptr TSRMLS_DC);
153 zval *callback;
154 void *userdata;
155 } MYSQLND_INFILE;
157 typedef struct st_mysqlnd_options
159 ulong flags;
161 /* init commands - we need to send them to server directly after connect */
162 unsigned int num_commands;
163 char **init_commands;
165 /* configuration file information */
166 char *cfg_file;
167 char *cfg_section;
169 char *auth_protocol;
171 We need to keep these because otherwise st_mysqlnd_conn will be changed.
172 The ABI will be broken and the methods structure will be somewhere else
173 in the memory which can crash external code. Feel free to reuse these.
175 char * unused2;
176 char * unused3;
177 char * unused4;
178 char * unused5;
180 enum_mysqlnd_protocol_type protocol;
182 char *charset_name;
183 /* maximum allowed packet size for communication */
184 ulong max_allowed_packet;
186 zend_bool numeric_and_datetime_as_unicode;
187 #ifdef MYSQLND_STRING_TO_INT_CONVERSION
188 zend_bool int_and_float_native;
189 #endif
190 } MYSQLND_OPTIONS;
192 typedef struct st_mysqlnd_net_options
194 /* timeouts */
195 unsigned int timeout_connect;
196 unsigned int timeout_read;
197 unsigned int timeout_write;
199 unsigned int net_read_buffer_size;
201 /* SSL information */
202 char *ssl_key;
203 char *ssl_cert;
204 char *ssl_ca;
205 char *ssl_capath;
206 char *ssl_cipher;
207 char *ssl_passphrase;
208 zend_bool ssl_verify_peer;
209 uint64_t flags;
210 } MYSQLND_NET_OPTIONS;
213 typedef struct st_mysqlnd_connection MYSQLND;
214 typedef struct st_mysqlnd_connection_data MYSQLND_CONN_DATA;
215 typedef struct st_mysqlnd_net MYSQLND_NET;
216 typedef struct st_mysqlnd_protocol MYSQLND_PROTOCOL;
217 typedef struct st_mysqlnd_res MYSQLND_RES;
218 typedef char** MYSQLND_ROW_C; /* return data as array of strings */
219 typedef struct st_mysqlnd_stmt_data MYSQLND_STMT_DATA;
220 typedef struct st_mysqlnd_stmt MYSQLND_STMT;
221 typedef unsigned int MYSQLND_FIELD_OFFSET;
223 typedef struct st_mysqlnd_param_bind MYSQLND_PARAM_BIND;
225 typedef struct st_mysqlnd_result_bind MYSQLND_RESULT_BIND;
227 typedef struct st_mysqlnd_result_metadata MYSQLND_RES_METADATA;
228 typedef struct st_mysqlnd_buffered_result MYSQLND_RES_BUFFERED;
229 typedef struct st_mysqlnd_unbuffered_result MYSQLND_RES_UNBUFFERED;
231 typedef struct st_mysqlnd_debug MYSQLND_DEBUG;
234 typedef MYSQLND_RES* (*mysqlnd_stmt_use_or_store_func)(MYSQLND_STMT * const TSRMLS_DC);
235 typedef enum_func_status (*mysqlnd_fetch_row_func)(MYSQLND_RES *result,
236 void *param,
237 unsigned int flags,
238 zend_bool *fetched_anything
239 TSRMLS_DC);
241 typedef struct st_mysqlnd_stats MYSQLND_STATS;
243 typedef void (*mysqlnd_stat_trigger)(MYSQLND_STATS * stats, enum_mysqlnd_collected_stats stat, int64_t change TSRMLS_DC);
245 struct st_mysqlnd_stats
247 uint64_t *values;
248 mysqlnd_stat_trigger *triggers;
249 size_t count;
250 zend_bool in_trigger;
251 #ifdef ZTS
252 MUTEX_T LOCK_access;
253 #endif
257 typedef struct st_mysqlnd_read_buffer {
258 zend_uchar * data;
259 size_t offset;
260 size_t size;
261 size_t len;
262 zend_bool (*is_empty)(struct st_mysqlnd_read_buffer *);
263 void (*read)(struct st_mysqlnd_read_buffer *, size_t count, zend_uchar * dest);
264 size_t (*bytes_left)(struct st_mysqlnd_read_buffer *);
265 void (*free_buffer)(struct st_mysqlnd_read_buffer ** TSRMLS_DC);
266 } MYSQLND_READ_BUFFER;
270 typedef enum_func_status (*func_mysqlnd_net__set_client_option)(MYSQLND_NET * const net, enum_mysqlnd_option option, const char * const value TSRMLS_DC);
271 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);
272 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);
273 typedef size_t (*func_mysqlnd_net__consume_uneaten_data)(MYSQLND_NET * const net, enum php_mysqlnd_server_command cmd TSRMLS_DC);
274 typedef void (*func_mysqlnd_net__free_contents)(MYSQLND_NET * net TSRMLS_DC);
275 typedef enum_func_status (*func_mysqlnd_net__enable_ssl)(MYSQLND_NET * const net TSRMLS_DC);
276 typedef enum_func_status (*func_mysqlnd_net__disable_ssl)(MYSQLND_NET * const net TSRMLS_DC);
277 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);
278 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);
279 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);
280 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);
281 typedef enum_func_status (*func_mysqlnd_net__init)(MYSQLND_NET * const net, MYSQLND_STATS * const stats, MYSQLND_ERROR_INFO * const error_info TSRMLS_DC);
282 typedef void (*func_mysqlnd_net__dtor)(MYSQLND_NET * const net, MYSQLND_STATS * const conn_stats, MYSQLND_ERROR_INFO * const error_info TSRMLS_DC);
283 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);
284 typedef void (*func_mysqlnd_net__close_stream)(MYSQLND_NET * const net, MYSQLND_STATS * const conn_stats, MYSQLND_ERROR_INFO * const error_info TSRMLS_DC);
285 typedef enum_func_status (*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);
286 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);
287 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);
289 struct st_mysqlnd_net_methods
291 func_mysqlnd_net__init init;
292 func_mysqlnd_net__dtor dtor;
293 func_mysqlnd_net__connect_ex connect_ex;
294 func_mysqlnd_net__close_stream close_stream;
295 func_mysqlnd_net__open_stream open_pipe;
296 func_mysqlnd_net__open_stream open_tcp_or_unix;
298 void * unused1;
299 void * unused2;
300 func_mysqlnd_net__post_connect_set_opt post_connect_set_opt;
302 func_mysqlnd_net__set_client_option set_client_option;
303 func_mysqlnd_net__decode decode;
304 func_mysqlnd_net__encode encode;
305 func_mysqlnd_net__consume_uneaten_data consume_uneaten_data;
306 func_mysqlnd_net__free_contents free_contents;
307 func_mysqlnd_net__enable_ssl enable_ssl;
308 func_mysqlnd_net__disable_ssl disable_ssl;
310 func_mysqlnd_net__network_read_ex network_read_ex;
311 func_mysqlnd_net__network_write_ex network_write_ex;
312 func_mysqlnd_net__send_ex send_ex;
313 func_mysqlnd_net__receive_ex receive_ex;
315 func_mysqlnd_net__read_compressed_packet_from_stream_and_fill_read_buffer read_compressed_packet_from_stream_and_fill_read_buffer;
317 void * unused3;
318 void * unused4;
319 void * unused5;
320 void * unused6;
321 void * unused7;
325 struct st_mysqlnd_packet_greet;
326 struct st_mysqlnd_packet_greet;
327 struct st_mysqlnd_packet_auth;
328 struct st_mysqlnd_packet_ok;
329 struct st_mysqlnd_packet_command;
330 struct st_mysqlnd_packet_eof;
331 struct st_mysqlnd_packet_rset_header;
332 struct st_mysqlnd_packet_res_field;
333 struct st_mysqlnd_packet_row;
334 struct st_mysqlnd_packet_stats;
335 struct st_mysqlnd_packet_prepare_response;
336 struct st_mysqlnd_packet_chg_user_resp;
337 struct st_mysqlnd_packet_auth_pam;
339 typedef struct st_mysqlnd_packet_greet * (*func_mysqlnd_protocol__get_greet_packet)(MYSQLND_PROTOCOL * const protocol, zend_bool persistent TSRMLS_DC);
340 typedef struct st_mysqlnd_packet_auth * (*func_mysqlnd_protocol__get_auth_packet)(MYSQLND_PROTOCOL * const protocol, zend_bool persistent TSRMLS_DC);
341 typedef struct st_mysqlnd_packet_auth_response *(*func_mysqlnd_protocol__get_auth_response_packet)(MYSQLND_PROTOCOL * const protocol, zend_bool persistent TSRMLS_DC);
342 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);
343 typedef struct st_mysqlnd_packet_ok * (*func_mysqlnd_protocol__get_ok_packet)(MYSQLND_PROTOCOL * const protocol, zend_bool persistent TSRMLS_DC);
344 typedef struct st_mysqlnd_packet_command * (*func_mysqlnd_protocol__get_command_packet)(MYSQLND_PROTOCOL * const protocol, zend_bool persistent TSRMLS_DC);
345 typedef struct st_mysqlnd_packet_eof * (*func_mysqlnd_protocol__get_eof_packet)(MYSQLND_PROTOCOL * const protocol, zend_bool persistent TSRMLS_DC);
346 typedef struct st_mysqlnd_packet_rset_header * (*func_mysqlnd_protocol__get_rset_header_packet)(MYSQLND_PROTOCOL * const protocol, zend_bool persistent TSRMLS_DC);
347 typedef struct st_mysqlnd_packet_res_field * (*func_mysqlnd_protocol__get_result_field_packet)(MYSQLND_PROTOCOL * const protocol, zend_bool persistent TSRMLS_DC);
348 typedef struct st_mysqlnd_packet_row * (*func_mysqlnd_protocol__get_row_packet)(MYSQLND_PROTOCOL * const protocol, zend_bool persistent TSRMLS_DC);
349 typedef struct st_mysqlnd_packet_stats * (*func_mysqlnd_protocol__get_stats_packet)(MYSQLND_PROTOCOL * const protocol, zend_bool persistent TSRMLS_DC);
350 typedef struct st_mysqlnd_packet_prepare_response *(*func_mysqlnd_protocol__get_prepare_response_packet)(MYSQLND_PROTOCOL * const protocol, zend_bool persistent TSRMLS_DC);
351 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);
353 struct st_mysqlnd_protocol_methods
355 func_mysqlnd_protocol__get_greet_packet get_greet_packet;
356 func_mysqlnd_protocol__get_auth_packet get_auth_packet;
357 func_mysqlnd_protocol__get_auth_response_packet get_auth_response_packet;
358 func_mysqlnd_protocol__get_change_auth_response_packet get_change_auth_response_packet;
359 func_mysqlnd_protocol__get_ok_packet get_ok_packet;
360 func_mysqlnd_protocol__get_command_packet get_command_packet;
361 func_mysqlnd_protocol__get_eof_packet get_eof_packet;
362 func_mysqlnd_protocol__get_rset_header_packet get_rset_header_packet;
363 func_mysqlnd_protocol__get_result_field_packet get_result_field_packet;
364 func_mysqlnd_protocol__get_row_packet get_row_packet;
365 func_mysqlnd_protocol__get_stats_packet get_stats_packet;
366 func_mysqlnd_protocol__get_prepare_response_packet get_prepare_response_packet;
367 func_mysqlnd_protocol__get_change_user_response_packet get_change_user_response_packet;
369 void * unused1;
370 void * unused2;
371 void * unused3;
372 void * unused4;
373 void * unused5;
377 typedef MYSQLND * (*func_mysqlnd_object_factory__get_connection)(zend_bool persistent TSRMLS_DC);
378 typedef MYSQLND * (*func_mysqlnd_object_factory__clone_connection_object)(MYSQLND * conn TSRMLS_DC);
379 typedef MYSQLND_STMT * (*func_mysqlnd_object_factory__get_prepared_statement)(MYSQLND_CONN_DATA * conn TSRMLS_DC);
380 typedef MYSQLND_NET * (*func_mysqlnd_object_factory__get_io_channel)(zend_bool persistent, MYSQLND_STATS * stats, MYSQLND_ERROR_INFO * error_info TSRMLS_DC);
381 typedef MYSQLND_PROTOCOL * (*func_mysqlnd_object_factory__get_protocol_decoder)(zend_bool persistent TSRMLS_DC);
384 struct st_mysqlnd_object_factory_methods
386 func_mysqlnd_object_factory__get_connection get_connection;
387 func_mysqlnd_object_factory__clone_connection_object clone_connection_object;
388 func_mysqlnd_object_factory__get_prepared_statement get_prepared_statement;
389 func_mysqlnd_object_factory__get_io_channel get_io_channel;
390 func_mysqlnd_object_factory__get_protocol_decoder get_protocol_decoder;
394 typedef enum_func_status (*func_mysqlnd_conn_data__init)(MYSQLND_CONN_DATA * conn TSRMLS_DC);
395 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);
396 typedef ulong (*func_mysqlnd_conn_data__escape_string)(MYSQLND_CONN_DATA * const conn, char *newstr, const char *escapestr, size_t escapestr_len TSRMLS_DC);
397 typedef enum_func_status (*func_mysqlnd_conn_data__set_charset)(MYSQLND_CONN_DATA * const conn, const char * const charset TSRMLS_DC);
398 typedef enum_func_status (*func_mysqlnd_conn_data__query)(MYSQLND_CONN_DATA * conn, const char * query, unsigned int query_len TSRMLS_DC);
399 typedef enum_func_status (*func_mysqlnd_conn_data__send_query)(MYSQLND_CONN_DATA * conn, const char *query, unsigned int query_len TSRMLS_DC);
400 typedef enum_func_status (*func_mysqlnd_conn_data__reap_query)(MYSQLND_CONN_DATA * conn TSRMLS_DC);
401 typedef MYSQLND_RES * (*func_mysqlnd_conn_data__use_result)(MYSQLND_CONN_DATA * const conn TSRMLS_DC);
402 typedef MYSQLND_RES * (*func_mysqlnd_conn_data__store_result)(MYSQLND_CONN_DATA * const conn TSRMLS_DC);
403 typedef enum_func_status (*func_mysqlnd_conn_data__next_result)(MYSQLND_CONN_DATA * const conn TSRMLS_DC);
404 typedef zend_bool (*func_mysqlnd_conn_data__more_results)(const MYSQLND_CONN_DATA * const conn TSRMLS_DC);
406 typedef MYSQLND_STMT * (*func_mysqlnd_conn_data__stmt_init)(MYSQLND_CONN_DATA * const conn TSRMLS_DC);
408 typedef enum_func_status (*func_mysqlnd_conn_data__shutdown_server)(MYSQLND_CONN_DATA * const conn, uint8_t level TSRMLS_DC);
409 typedef enum_func_status (*func_mysqlnd_conn_data__refresh_server)(MYSQLND_CONN_DATA * const conn, uint8_t options TSRMLS_DC);
411 typedef enum_func_status (*func_mysqlnd_conn_data__ping)(MYSQLND_CONN_DATA * const conn TSRMLS_DC);
412 typedef enum_func_status (*func_mysqlnd_conn_data__kill_connection)(MYSQLND_CONN_DATA * conn, unsigned int pid TSRMLS_DC);
413 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);
414 typedef enum_func_status (*func_mysqlnd_conn_data__server_dump_debug_information)(MYSQLND_CONN_DATA * const conn TSRMLS_DC);
415 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);
417 typedef unsigned int (*func_mysqlnd_conn_data__get_error_no)(const MYSQLND_CONN_DATA * const conn TSRMLS_DC);
418 typedef const char * (*func_mysqlnd_conn_data__get_error_str)(const MYSQLND_CONN_DATA * const conn TSRMLS_DC);
419 typedef const char * (*func_mysqlnd_conn_data__get_sqlstate)(const MYSQLND_CONN_DATA * const conn TSRMLS_DC);
420 typedef uint64_t (*func_mysqlnd_conn_data__get_thread_id)(const MYSQLND_CONN_DATA * const conn TSRMLS_DC);
421 typedef void (*func_mysqlnd_conn_data__get_statistics)(const MYSQLND_CONN_DATA * const conn, zval *return_value TSRMLS_DC ZEND_FILE_LINE_DC);
423 typedef unsigned long (*func_mysqlnd_conn_data__get_server_version)(const MYSQLND_CONN_DATA * const conn TSRMLS_DC);
424 typedef const char * (*func_mysqlnd_conn_data__get_server_information)(const MYSQLND_CONN_DATA * const conn TSRMLS_DC);
425 typedef enum_func_status (*func_mysqlnd_conn_data__get_server_statistics)(MYSQLND_CONN_DATA * conn, char **message, unsigned int * message_len TSRMLS_DC);
426 typedef const char * (*func_mysqlnd_conn_data__get_host_information)(const MYSQLND_CONN_DATA * const conn TSRMLS_DC);
427 typedef unsigned int (*func_mysqlnd_conn_data__get_protocol_information)(const MYSQLND_CONN_DATA * const conn TSRMLS_DC);
428 typedef const char * (*func_mysqlnd_conn_data__get_last_message)(const MYSQLND_CONN_DATA * const conn TSRMLS_DC);
429 typedef const char * (*func_mysqlnd_conn_data__charset_name)(const MYSQLND_CONN_DATA * const conn TSRMLS_DC);
430 typedef MYSQLND_RES * (*func_mysqlnd_conn_data__list_fields)(MYSQLND_CONN_DATA * conn, const char * table, const char * achtung_wild TSRMLS_DC);
431 typedef MYSQLND_RES * (*func_mysqlnd_conn_data__list_method)(MYSQLND_CONN_DATA * conn, const char * query, const char * achtung_wild, char *par1 TSRMLS_DC);
433 typedef uint64_t (*func_mysqlnd_conn_data__get_last_insert_id)(const MYSQLND_CONN_DATA * const conn TSRMLS_DC);
434 typedef uint64_t (*func_mysqlnd_conn_data__get_affected_rows)(const MYSQLND_CONN_DATA * const conn TSRMLS_DC);
435 typedef unsigned int (*func_mysqlnd_conn_data__get_warning_count)(const MYSQLND_CONN_DATA * const conn TSRMLS_DC);
437 typedef unsigned int (*func_mysqlnd_conn_data__get_field_count)(const MYSQLND_CONN_DATA * const conn TSRMLS_DC);
439 typedef unsigned int (*func_mysqlnd_conn_data__get_server_status)(const MYSQLND_CONN_DATA * const conn TSRMLS_DC);
440 typedef enum_func_status (*func_mysqlnd_conn_data__set_server_option)(MYSQLND_CONN_DATA * const conn, enum_mysqlnd_server_option option TSRMLS_DC);
441 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);
442 typedef void (*func_mysqlnd_conn_data__free_contents)(MYSQLND_CONN_DATA * conn TSRMLS_DC);/* private */
443 typedef void (*func_mysqlnd_conn_data__free_options)(MYSQLND_CONN_DATA * conn TSRMLS_DC); /* private */
444 typedef void (*func_mysqlnd_conn_data__dtor)(MYSQLND_CONN_DATA * conn TSRMLS_DC); /* private */
446 typedef enum_func_status (*func_mysqlnd_conn_data__query_read_result_set_header)(MYSQLND_CONN_DATA * conn, MYSQLND_STMT * stmt TSRMLS_DC);
448 typedef MYSQLND_CONN_DATA * (*func_mysqlnd_conn_data__get_reference)(MYSQLND_CONN_DATA * const conn TSRMLS_DC);
449 typedef enum_func_status (*func_mysqlnd_conn_data__free_reference)(MYSQLND_CONN_DATA * const conn TSRMLS_DC);
450 typedef enum mysqlnd_connection_state (*func_mysqlnd_conn_data__get_state)(MYSQLND_CONN_DATA * const conn TSRMLS_DC);
451 typedef void (*func_mysqlnd_conn_data__set_state)(MYSQLND_CONN_DATA * const conn, enum mysqlnd_connection_state new_state TSRMLS_DC);
453 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);
454 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);
456 typedef enum_func_status (*func_mysqlnd_conn_data__restart_psession)(MYSQLND_CONN_DATA * conn TSRMLS_DC);
457 typedef enum_func_status (*func_mysqlnd_conn_data__end_psession)(MYSQLND_CONN_DATA * conn TSRMLS_DC);
458 typedef enum_func_status (*func_mysqlnd_conn_data__send_close)(MYSQLND_CONN_DATA * conn TSRMLS_DC);
460 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);
462 typedef MYSQLND_RES * (*func_mysqlnd_conn_data__result_init)(unsigned int field_count, zend_bool persistent TSRMLS_DC);
464 typedef enum_func_status (*func_mysqlnd_conn_data__set_autocommit)(MYSQLND_CONN_DATA * conn, unsigned int mode TSRMLS_DC);
465 typedef enum_func_status (*func_mysqlnd_conn_data__tx_commit)(MYSQLND_CONN_DATA * conn TSRMLS_DC);
466 typedef enum_func_status (*func_mysqlnd_conn_data__tx_rollback)(MYSQLND_CONN_DATA * conn TSRMLS_DC);
468 typedef enum_func_status (*func_mysqlnd_conn_data__local_tx_start)(MYSQLND_CONN_DATA * conn, size_t this_func TSRMLS_DC);
469 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);
472 struct st_mysqlnd_conn_data_methods
474 func_mysqlnd_conn_data__init init;
475 func_mysqlnd_conn_data__connect connect;
476 func_mysqlnd_conn_data__escape_string escape_string;
477 func_mysqlnd_conn_data__set_charset set_charset;
478 func_mysqlnd_conn_data__query query;
479 func_mysqlnd_conn_data__send_query send_query;
480 func_mysqlnd_conn_data__reap_query reap_query;
481 func_mysqlnd_conn_data__use_result use_result;
482 func_mysqlnd_conn_data__store_result store_result;
483 func_mysqlnd_conn_data__next_result next_result;
484 func_mysqlnd_conn_data__more_results more_results;
486 func_mysqlnd_conn_data__stmt_init stmt_init;
488 func_mysqlnd_conn_data__shutdown_server shutdown_server;
489 func_mysqlnd_conn_data__refresh_server refresh_server;
491 func_mysqlnd_conn_data__ping ping;
492 func_mysqlnd_conn_data__kill_connection kill_connection;
493 func_mysqlnd_conn_data__select_db select_db;
494 func_mysqlnd_conn_data__server_dump_debug_information server_dump_debug_information;
495 func_mysqlnd_conn_data__change_user change_user;
497 func_mysqlnd_conn_data__get_error_no get_error_no;
498 func_mysqlnd_conn_data__get_error_str get_error_str;
499 func_mysqlnd_conn_data__get_sqlstate get_sqlstate;
500 func_mysqlnd_conn_data__get_thread_id get_thread_id;
501 func_mysqlnd_conn_data__get_statistics get_statistics;
503 func_mysqlnd_conn_data__get_server_version get_server_version;
504 func_mysqlnd_conn_data__get_server_information get_server_information;
505 func_mysqlnd_conn_data__get_server_statistics get_server_statistics;
506 func_mysqlnd_conn_data__get_host_information get_host_information;
507 func_mysqlnd_conn_data__get_protocol_information get_protocol_information;
508 func_mysqlnd_conn_data__get_last_message get_last_message;
509 func_mysqlnd_conn_data__charset_name charset_name;
510 func_mysqlnd_conn_data__list_fields list_fields;
511 func_mysqlnd_conn_data__list_method list_method;
513 func_mysqlnd_conn_data__get_last_insert_id get_last_insert_id;
514 func_mysqlnd_conn_data__get_affected_rows get_affected_rows;
515 func_mysqlnd_conn_data__get_warning_count get_warning_count;
517 func_mysqlnd_conn_data__get_field_count get_field_count;
519 func_mysqlnd_conn_data__get_server_status get_server_status;
521 func_mysqlnd_conn_data__set_server_option set_server_option;
522 func_mysqlnd_conn_data__set_client_option set_client_option;
523 func_mysqlnd_conn_data__free_contents free_contents;
524 func_mysqlnd_conn_data__free_options free_options;
525 func_mysqlnd_conn_data__dtor dtor;
527 func_mysqlnd_conn_data__query_read_result_set_header query_read_result_set_header;
529 func_mysqlnd_conn_data__get_reference get_reference;
530 func_mysqlnd_conn_data__free_reference free_reference;
531 func_mysqlnd_conn_data__get_state get_state;
532 func_mysqlnd_conn_data__set_state set_state;
534 func_mysqlnd_conn_data__simple_command simple_command;
535 func_mysqlnd_conn_data__simple_command_handle_response simple_command_handle_response;
537 func_mysqlnd_conn_data__restart_psession restart_psession;
538 func_mysqlnd_conn_data__end_psession end_psession;
539 func_mysqlnd_conn_data__send_close send_close;
541 func_mysqlnd_conn_data__ssl_set ssl_set;
543 func_mysqlnd_conn_data__result_init result_init;
544 func_mysqlnd_conn_data__set_autocommit set_autocommit;
545 func_mysqlnd_conn_data__tx_commit tx_commit;
546 func_mysqlnd_conn_data__tx_rollback tx_rollback;
548 func_mysqlnd_conn_data__local_tx_start local_tx_start;
549 func_mysqlnd_conn_data__local_tx_end local_tx_end;
553 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);
554 typedef MYSQLND * (*func_mysqlnd_conn__clone_object)(MYSQLND * const conn TSRMLS_DC);
555 typedef void (*func_mysqlnd_conn__dtor)(MYSQLND * conn TSRMLS_DC);
556 typedef enum_func_status (*func_mysqlnd_conn__close)(MYSQLND * conn, enum_connection_close_type close_type TSRMLS_DC);
558 struct st_mysqlnd_conn_methods
560 func_mysqlnd_data__connect connect;
561 func_mysqlnd_conn__clone_object clone_object;
562 func_mysqlnd_conn__dtor dtor;
563 func_mysqlnd_conn__close close;
567 typedef mysqlnd_fetch_row_func fetch_row;
568 typedef mysqlnd_fetch_row_func fetch_row_normal_buffered; /* private */
569 typedef mysqlnd_fetch_row_func fetch_row_normal_unbuffered; /* private */
571 typedef MYSQLND_RES * (*func_mysqlnd_res__use_result)(MYSQLND_RES * const result, zend_bool ps_protocol TSRMLS_DC);
572 typedef MYSQLND_RES * (*func_mysqlnd_res__store_result)(MYSQLND_RES * result, MYSQLND_CONN_DATA * const conn, zend_bool ps TSRMLS_DC);
573 typedef void (*func_mysqlnd_res__fetch_into)(MYSQLND_RES *result, unsigned int flags, zval *return_value, enum_mysqlnd_extension ext TSRMLS_DC ZEND_FILE_LINE_DC);
574 typedef MYSQLND_ROW_C (*func_mysqlnd_res__fetch_row_c)(MYSQLND_RES *result TSRMLS_DC);
575 typedef void (*func_mysqlnd_res__fetch_all)(MYSQLND_RES *result, unsigned int flags, zval *return_value TSRMLS_DC ZEND_FILE_LINE_DC);
576 typedef void (*func_mysqlnd_res__fetch_field_data)(MYSQLND_RES *result, unsigned int offset, zval *return_value TSRMLS_DC);
577 typedef uint64_t (*func_mysqlnd_res__num_rows)(const MYSQLND_RES * const result TSRMLS_DC);
578 typedef unsigned int (*func_mysqlnd_res__num_fields)(const MYSQLND_RES * const result TSRMLS_DC);
579 typedef enum_func_status (*func_mysqlnd_res__skip_result)(MYSQLND_RES * const result TSRMLS_DC);
580 typedef enum_func_status (*func_mysqlnd_res__seek_data)(MYSQLND_RES * result, uint64_t row TSRMLS_DC);
581 typedef MYSQLND_FIELD_OFFSET (*func_mysqlnd_res__seek_field)(MYSQLND_RES * const result, MYSQLND_FIELD_OFFSET field_offset TSRMLS_DC);
582 typedef MYSQLND_FIELD_OFFSET (*func_mysqlnd_res__field_tell)(const MYSQLND_RES * const result TSRMLS_DC);
583 typedef const MYSQLND_FIELD *(*func_mysqlnd_res__fetch_field)(MYSQLND_RES * const result TSRMLS_DC);
584 typedef const MYSQLND_FIELD *(*func_mysqlnd_res__fetch_field_direct)(MYSQLND_RES * const result, MYSQLND_FIELD_OFFSET fieldnr TSRMLS_DC);
585 typedef const MYSQLND_FIELD *(*func_mysqlnd_res__fetch_fields)(MYSQLND_RES * const result TSRMLS_DC);
587 typedef enum_func_status (*func_mysqlnd_res__read_result_metadata)(MYSQLND_RES * result, MYSQLND_CONN_DATA * conn TSRMLS_DC);
588 typedef unsigned long * (*func_mysqlnd_res__fetch_lengths)(MYSQLND_RES * const result TSRMLS_DC);
589 typedef enum_func_status (*func_mysqlnd_res__store_result_fetch_data)(MYSQLND_CONN_DATA * const conn, MYSQLND_RES * result, MYSQLND_RES_METADATA *meta, zend_bool binary_protocol TSRMLS_DC);
590 typedef enum_func_status (*func_mysqlnd_res__initialize_result_set_rest)(MYSQLND_RES * const result TSRMLS_DC);
592 typedef void (*func_mysqlnd_res__free_result_buffers)(MYSQLND_RES * result TSRMLS_DC); /* private */
593 typedef enum_func_status (*func_mysqlnd_res__free_result)(MYSQLND_RES * result, zend_bool implicit TSRMLS_DC);
594 typedef void (*func_mysqlnd_res__free_result_internal)(MYSQLND_RES *result TSRMLS_DC);
595 typedef void (*func_mysqlnd_res__free_result_contents)(MYSQLND_RES *result TSRMLS_DC);
596 typedef void (*func_mysqlnd_res__free_buffered_data)(MYSQLND_RES *result TSRMLS_DC);
597 typedef void (*func_mysqlnd_res__unbuffered_free_last_data)(MYSQLND_RES *result TSRMLS_DC);
599 /* for decoding - binary or text protocol */
600 typedef enum_func_status (*func_mysqlnd_res__row_decoder)(MYSQLND_MEMORY_POOL_CHUNK * row_buffer, zval ** fields,
601 unsigned int field_count, MYSQLND_FIELD *fields_metadata,
602 zend_bool as_unicode, zend_bool as_int_or_float,
603 MYSQLND_STATS * stats TSRMLS_DC);
605 typedef MYSQLND_RES_METADATA * (*func_mysqlnd_res__result_meta_init)(unsigned int field_count, zend_bool persistent TSRMLS_DC);
607 struct st_mysqlnd_res_methods
609 mysqlnd_fetch_row_func fetch_row;
610 mysqlnd_fetch_row_func fetch_row_normal_buffered; /* private */
611 mysqlnd_fetch_row_func fetch_row_normal_unbuffered; /* private */
613 func_mysqlnd_res__use_result use_result;
614 func_mysqlnd_res__store_result store_result;
615 func_mysqlnd_res__fetch_into fetch_into;
616 func_mysqlnd_res__fetch_row_c fetch_row_c;
617 func_mysqlnd_res__fetch_all fetch_all;
618 func_mysqlnd_res__fetch_field_data fetch_field_data;
619 func_mysqlnd_res__num_rows num_rows;
620 func_mysqlnd_res__num_fields num_fields;
621 func_mysqlnd_res__skip_result skip_result;
622 func_mysqlnd_res__seek_data seek_data;
623 func_mysqlnd_res__seek_field seek_field;
624 func_mysqlnd_res__field_tell field_tell;
625 func_mysqlnd_res__fetch_field fetch_field;
626 func_mysqlnd_res__fetch_field_direct fetch_field_direct;
627 func_mysqlnd_res__fetch_fields fetch_fields;
628 func_mysqlnd_res__read_result_metadata read_result_metadata;
629 func_mysqlnd_res__fetch_lengths fetch_lengths;
630 func_mysqlnd_res__store_result_fetch_data store_result_fetch_data;
631 func_mysqlnd_res__initialize_result_set_rest initialize_result_set_rest;
632 func_mysqlnd_res__free_result_buffers free_result_buffers;
633 func_mysqlnd_res__free_result free_result;
634 func_mysqlnd_res__free_result_internal free_result_internal;
635 func_mysqlnd_res__free_result_contents free_result_contents;
636 func_mysqlnd_res__free_buffered_data free_buffered_data;
637 func_mysqlnd_res__unbuffered_free_last_data unbuffered_free_last_data;
639 /* for decoding - binary or text protocol */
640 func_mysqlnd_res__row_decoder row_decoder;
642 func_mysqlnd_res__result_meta_init result_meta_init;
644 void * unused1;
645 void * unused2;
646 void * unused3;
647 void * unused4;
648 void * unused5;
652 typedef const MYSQLND_FIELD * (*func_mysqlnd_res_meta__fetch_field)(MYSQLND_RES_METADATA * const meta TSRMLS_DC);
653 typedef const MYSQLND_FIELD * (*func_mysqlnd_res_meta__fetch_field_direct)(const MYSQLND_RES_METADATA * const meta, MYSQLND_FIELD_OFFSET fieldnr TSRMLS_DC);
654 typedef const MYSQLND_FIELD * (*func_mysqlnd_res_meta__fetch_fields)(MYSQLND_RES_METADATA * const meta TSRMLS_DC);
655 typedef MYSQLND_FIELD_OFFSET (*func_mysqlnd_res_meta__field_tell)(const MYSQLND_RES_METADATA * const meta TSRMLS_DC);
656 typedef enum_func_status (*func_mysqlnd_res_meta__read_metadata)(MYSQLND_RES_METADATA * const meta, MYSQLND_CONN_DATA * conn TSRMLS_DC);
657 typedef MYSQLND_RES_METADATA * (*func_mysqlnd_res_meta__clone_metadata)(const MYSQLND_RES_METADATA * const meta, zend_bool persistent TSRMLS_DC);
658 typedef void (*func_mysqlnd_res_meta__free_metadata)(MYSQLND_RES_METADATA * meta TSRMLS_DC);
660 struct st_mysqlnd_res_meta_methods
662 func_mysqlnd_res_meta__fetch_field fetch_field;
663 func_mysqlnd_res_meta__fetch_field_direct fetch_field_direct;
664 func_mysqlnd_res_meta__fetch_fields fetch_fields;
665 func_mysqlnd_res_meta__field_tell field_tell;
666 func_mysqlnd_res_meta__read_metadata read_metadata;
667 func_mysqlnd_res_meta__clone_metadata clone_metadata;
668 func_mysqlnd_res_meta__free_metadata free_metadata;
672 typedef enum_func_status (*func_mysqlnd_stmt__prepare)(MYSQLND_STMT * const stmt, const char * const query, unsigned int query_len TSRMLS_DC);
673 typedef enum_func_status (*func_mysqlnd_stmt__execute)(MYSQLND_STMT * const stmt TSRMLS_DC);
674 typedef MYSQLND_RES * (*func_mysqlnd_stmt__use_result)(MYSQLND_STMT * const stmt TSRMLS_DC);
675 typedef MYSQLND_RES * (*func_mysqlnd_stmt__store_result)(MYSQLND_STMT * const stmt TSRMLS_DC);
676 typedef MYSQLND_RES * (*func_mysqlnd_stmt__get_result)(MYSQLND_STMT * const stmt TSRMLS_DC);
677 typedef zend_bool (*func_mysqlnd_stmt__more_results)(const MYSQLND_STMT * const stmt TSRMLS_DC);
678 typedef enum_func_status (*func_mysqlnd_stmt__next_result)(MYSQLND_STMT * const stmt TSRMLS_DC);
679 typedef enum_func_status (*func_mysqlnd_stmt__free_result)(MYSQLND_STMT * const stmt TSRMLS_DC);
680 typedef enum_func_status (*func_mysqlnd_stmt__seek_data)(const MYSQLND_STMT * const stmt, uint64_t row TSRMLS_DC);
681 typedef enum_func_status (*func_mysqlnd_stmt__reset)(MYSQLND_STMT * const stmt TSRMLS_DC);
682 typedef enum_func_status (*func_mysqlnd_stmt__net_close)(MYSQLND_STMT * const stmt, zend_bool implicit TSRMLS_DC); /* private */
683 typedef enum_func_status (*func_mysqlnd_stmt__dtor)(MYSQLND_STMT * const stmt, zend_bool implicit TSRMLS_DC); /* use this for mysqlnd_stmt_close */
684 typedef enum_func_status (*func_mysqlnd_stmt__fetch)(MYSQLND_STMT * const stmt, zend_bool * const fetched_anything TSRMLS_DC);
685 typedef enum_func_status (*func_mysqlnd_stmt__bind_parameters)(MYSQLND_STMT * const stmt, MYSQLND_PARAM_BIND * const param_bind TSRMLS_DC);
686 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);
687 typedef enum_func_status (*func_mysqlnd_stmt__refresh_bind_param)(MYSQLND_STMT * const stmt TSRMLS_DC);
688 typedef enum_func_status (*func_mysqlnd_stmt__bind_result)(MYSQLND_STMT * const stmt, MYSQLND_RESULT_BIND * const result_bind TSRMLS_DC);
689 typedef enum_func_status (*func_mysqlnd_stmt__bind_one_result)(MYSQLND_STMT * const stmt, unsigned int param_no TSRMLS_DC);
690 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);
691 typedef MYSQLND_RES * (*func_mysqlnd_stmt__get_parameter_metadata)(MYSQLND_STMT * const stmt TSRMLS_DC);
692 typedef MYSQLND_RES * (*func_mysqlnd_stmt__get_result_metadata)(MYSQLND_STMT * const stmt TSRMLS_DC);
693 typedef uint64_t (*func_mysqlnd_stmt__get_last_insert_id)(const MYSQLND_STMT * const stmt TSRMLS_DC);
694 typedef uint64_t (*func_mysqlnd_stmt__get_affected_rows)(const MYSQLND_STMT * const stmt TSRMLS_DC);
695 typedef uint64_t (*func_mysqlnd_stmt__get_num_rows)(const MYSQLND_STMT * const stmt TSRMLS_DC);
696 typedef unsigned int (*func_mysqlnd_stmt__get_param_count)(const MYSQLND_STMT * const stmt TSRMLS_DC);
697 typedef unsigned int (*func_mysqlnd_stmt__get_field_count)(const MYSQLND_STMT * const stmt TSRMLS_DC);
698 typedef unsigned int (*func_mysqlnd_stmt__get_warning_count)(const MYSQLND_STMT * const stmt TSRMLS_DC);
699 typedef unsigned int (*func_mysqlnd_stmt__get_error_no)(const MYSQLND_STMT * const stmt TSRMLS_DC);
700 typedef const char * (*func_mysqlnd_stmt__get_error_str)(const MYSQLND_STMT * const stmt TSRMLS_DC);
701 typedef const char * (*func_mysqlnd_stmt__get_sqlstate)(const MYSQLND_STMT * const stmt TSRMLS_DC);
702 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);
703 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);
704 typedef MYSQLND_PARAM_BIND *(*func_mysqlnd_stmt__alloc_param_bind)(MYSQLND_STMT * const stmt TSRMLS_DC);
705 typedef MYSQLND_RESULT_BIND*(*func_mysqlnd_stmt__alloc_result_bind)(MYSQLND_STMT * const stmt TSRMLS_DC);
706 typedef void (*func_mysqlnd_stmt__free_parameter_bind)(MYSQLND_STMT * const stmt, MYSQLND_PARAM_BIND * TSRMLS_DC);
707 typedef void (*func_mysqlnd_stmt__free_result_bind)(MYSQLND_STMT * const stmt, MYSQLND_RESULT_BIND * TSRMLS_DC);
708 typedef unsigned int (*func_mysqlnd_stmt__server_status)(const MYSQLND_STMT * const stmt TSRMLS_DC);
709 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);
710 typedef enum_func_status (*func_mysqlnd_stmt__parse_execute_response)(MYSQLND_STMT * const s TSRMLS_DC);
711 typedef void (*func_mysqlnd_stmt__free_stmt_content)(MYSQLND_STMT * const s TSRMLS_DC);
712 typedef enum_func_status (*func_mysqlnd_stmt__flush)(MYSQLND_STMT * const stmt TSRMLS_DC);
714 struct st_mysqlnd_stmt_methods
716 func_mysqlnd_stmt__prepare prepare;
717 func_mysqlnd_stmt__execute execute;
718 func_mysqlnd_stmt__use_result use_result;
719 func_mysqlnd_stmt__store_result store_result;
720 func_mysqlnd_stmt__get_result get_result;
721 func_mysqlnd_stmt__more_results more_results;
722 func_mysqlnd_stmt__next_result next_result;
723 func_mysqlnd_stmt__free_result free_result;
724 func_mysqlnd_stmt__seek_data seek_data;
725 func_mysqlnd_stmt__reset reset;
726 func_mysqlnd_stmt__net_close net_close;
727 func_mysqlnd_stmt__dtor dtor;
728 func_mysqlnd_stmt__fetch fetch;
730 func_mysqlnd_stmt__bind_parameters bind_parameters;
731 func_mysqlnd_stmt__bind_one_parameter bind_one_parameter;
732 func_mysqlnd_stmt__refresh_bind_param refresh_bind_param;
733 func_mysqlnd_stmt__bind_result bind_result;
734 func_mysqlnd_stmt__bind_one_result bind_one_result;
735 func_mysqlnd_stmt__send_long_data send_long_data;
736 func_mysqlnd_stmt__get_parameter_metadata get_parameter_metadata;
737 func_mysqlnd_stmt__get_result_metadata get_result_metadata;
739 func_mysqlnd_stmt__get_last_insert_id get_last_insert_id;
740 func_mysqlnd_stmt__get_affected_rows get_affected_rows;
741 func_mysqlnd_stmt__get_num_rows get_num_rows;
743 func_mysqlnd_stmt__get_param_count get_param_count;
744 func_mysqlnd_stmt__get_field_count get_field_count;
745 func_mysqlnd_stmt__get_warning_count get_warning_count;
747 func_mysqlnd_stmt__get_error_no get_error_no;
748 func_mysqlnd_stmt__get_error_str get_error_str;
749 func_mysqlnd_stmt__get_sqlstate get_sqlstate;
751 func_mysqlnd_stmt__get_attribute get_attribute;
752 func_mysqlnd_stmt__set_attribute set_attribute;
754 func_mysqlnd_stmt__alloc_param_bind alloc_parameter_bind;
755 func_mysqlnd_stmt__alloc_result_bind alloc_result_bind;
757 func_mysqlnd_stmt__free_parameter_bind free_parameter_bind;
758 func_mysqlnd_stmt__free_result_bind free_result_bind;
760 func_mysqlnd_stmt__server_status get_server_status;
762 func_mysqlnd_stmt__generate_execute_request generate_execute_request;
763 func_mysqlnd_stmt__parse_execute_response parse_execute_response;
765 func_mysqlnd_stmt__free_stmt_content free_stmt_content;
767 func_mysqlnd_stmt__flush flush;
771 struct st_mysqlnd_net
773 php_stream *stream;
774 /* sequence for simple checking of correct packets */
775 zend_uchar packet_no;
776 zend_bool compressed;
777 zend_uchar compressed_envelope_packet_no;
778 #ifdef MYSQLND_COMPRESSION_ENABLED
779 MYSQLND_READ_BUFFER * uncompressed_data;
780 #else
781 void * unused_pad1;
782 #endif
783 #ifdef MYSQLND_DO_WIRE_CHECK_BEFORE_COMMAND
784 zend_uchar last_command;
785 #else
786 zend_uchar unused_pad2;
787 #endif
788 /* cmd buffer */
789 MYSQLND_CMD_BUFFER cmd_buffer;
791 MYSQLND_NET_OPTIONS options;
793 zend_bool persistent;
795 struct st_mysqlnd_net_methods m;
799 struct st_mysqlnd_protocol
801 zend_bool persistent;
802 struct st_mysqlnd_protocol_methods m;
806 struct st_mysqlnd_connection_data
808 /* Operation related */
809 MYSQLND_NET * net;
810 MYSQLND_PROTOCOL * protocol;
812 /* Information related */
813 char *host;
814 unsigned int host_len;
815 char *unix_socket;
816 unsigned int unix_socket_len;
817 char *user;
818 unsigned int user_len;
819 char *passwd;
820 unsigned int passwd_len;
821 char *scheme;
822 unsigned int scheme_len;
823 uint64_t thread_id;
824 char *server_version;
825 char *host_info;
826 zend_uchar *auth_plugin_data;
827 size_t auth_plugin_data_len;
828 const MYSQLND_CHARSET *charset;
829 const MYSQLND_CHARSET *greet_charset;
830 char *connect_or_select_db;
831 unsigned int connect_or_select_db_len;
832 MYSQLND_INFILE infile;
833 unsigned int protocol_version;
834 unsigned long max_packet_size;
835 unsigned int port;
836 unsigned long client_flag;
837 unsigned long server_capabilities;
839 /* For UPSERT queries */
840 MYSQLND_UPSERT_STATUS * upsert_status;
841 MYSQLND_UPSERT_STATUS upsert_status_impl;
842 char *last_message;
843 unsigned int last_message_len;
845 /* If error packet, we use these */
846 MYSQLND_ERROR_INFO * error_info;
847 MYSQLND_ERROR_INFO error_info_impl;
850 To prevent queries during unbuffered fetches. Also to
851 mark the connection as destroyed for garbage collection.
853 enum mysqlnd_connection_state state;
854 enum_mysqlnd_query_type last_query_type;
855 /* Temporary storage between query and (use|store)_result() call */
856 MYSQLND_RES *current_result;
859 How many result sets reference this connection.
860 It won't be freed until this number reaches 0.
861 The last one, please close the door! :-)
862 The result set objects can determine by inspecting
863 'quit_sent' whether the connection is still valid.
865 unsigned int refcount;
867 /* Temporal storage for mysql_query */
868 unsigned int field_count;
870 /* persistent connection */
871 zend_bool persistent;
873 /* options */
874 MYSQLND_OPTIONS * options;
875 MYSQLND_OPTIONS options_impl;
877 /* stats */
878 MYSQLND_STATS * stats;
880 struct st_mysqlnd_conn_data_methods * m;
884 struct st_mysqlnd_connection
886 MYSQLND_CONN_DATA * data;
887 zend_bool persistent;
888 struct st_mysqlnd_conn_methods * m;
892 struct mysqlnd_field_hash_key
894 zend_bool is_numeric;
895 unsigned long key;
896 #if MYSQLND_UNICODE
897 zstr ustr;
898 unsigned int ulen;
899 #endif
903 struct st_mysqlnd_result_metadata
905 MYSQLND_FIELD *fields;
906 struct mysqlnd_field_hash_key *zend_hash_keys;
907 unsigned int current_field;
908 unsigned int field_count;
909 /* We need this to make fast allocs in rowp_read */
910 unsigned int bit_fields_count;
911 size_t bit_fields_total_len; /* trailing \0 not counted */
912 zend_bool persistent;
914 struct st_mysqlnd_res_meta_methods *m;
918 struct st_mysqlnd_buffered_result
920 zval **data;
921 zval **data_cursor;
922 MYSQLND_MEMORY_POOL_CHUNK **row_buffers;
923 uint64_t row_count;
924 uint64_t initialized_rows;
926 unsigned int references;
928 MYSQLND_ERROR_INFO error_info;
932 struct st_mysqlnd_unbuffered_result
934 /* For unbuffered (both normal and PS) */
935 zval **last_row_data;
936 MYSQLND_MEMORY_POOL_CHUNK *last_row_buffer;
938 uint64_t row_count;
939 zend_bool eof_reached;
943 struct st_mysqlnd_res
945 MYSQLND_CONN_DATA *conn;
946 enum_mysqlnd_res_type type;
947 unsigned int field_count;
949 /* For metadata functions */
950 MYSQLND_RES_METADATA *meta;
952 /* To be used with store_result() - both normal and PS */
953 MYSQLND_RES_BUFFERED *stored_data;
954 MYSQLND_RES_UNBUFFERED *unbuf;
957 Column lengths of current row - both buffered and unbuffered.
958 For buffered results it duplicates the data found in **data
960 unsigned long *lengths;
962 struct st_mysqlnd_packet_row * row_packet;
964 MYSQLND_MEMORY_POOL * result_set_memory_pool;
965 zend_bool persistent;
967 struct st_mysqlnd_res_methods m;
971 struct st_mysqlnd_param_bind
973 zval *zv;
974 zend_uchar type;
975 enum_param_bind_flags flags;
978 struct st_mysqlnd_result_bind
980 zval *zv;
981 zend_bool bound;
985 struct st_mysqlnd_stmt_data
987 MYSQLND_CONN_DATA *conn;
988 unsigned long stmt_id;
989 unsigned long flags;/* cursor is set here */
990 enum_mysqlnd_stmt_state state;
991 unsigned int warning_count;
992 MYSQLND_RES *result;
993 unsigned int field_count;
994 unsigned int param_count;
995 unsigned char send_types_to_server;
996 MYSQLND_PARAM_BIND *param_bind;
997 MYSQLND_RESULT_BIND *result_bind;
998 zend_bool result_zvals_separated_once;
999 zend_bool persistent;
1001 MYSQLND_UPSERT_STATUS * upsert_status;
1002 MYSQLND_UPSERT_STATUS upsert_status_impl;
1004 MYSQLND_ERROR_INFO * error_info;
1005 MYSQLND_ERROR_INFO error_info_impl;
1007 zend_bool update_max_length;
1008 unsigned long prefetch_rows;
1010 zend_bool cursor_exists;
1011 mysqlnd_stmt_use_or_store_func default_rset_handler;
1013 MYSQLND_CMD_BUFFER execute_cmd_buffer;
1014 unsigned int execute_count;/* count how many times the stmt was executed */
1018 struct st_mysqlnd_stmt
1020 MYSQLND_STMT_DATA * data;
1021 struct st_mysqlnd_stmt_methods *m;
1022 zend_bool persistent;
1026 typedef struct st_mysqlnd_string
1028 char *s;
1029 size_t l;
1030 } MYSQLND_STRING;
1033 struct st_mysqlnd_plugin_header
1035 unsigned int plugin_api_version;
1036 const char * plugin_name;
1037 unsigned long plugin_version;
1038 const char * plugin_string_version;
1039 const char * plugin_license;
1040 const char * plugin_author;
1041 struct
1043 MYSQLND_STATS * values;
1044 const MYSQLND_STRING * names;
1045 } plugin_stats;
1047 struct
1049 enum_func_status (*plugin_shutdown)(void * plugin TSRMLS_DC);
1050 } m;
1054 struct st_mysqlnd_plugin_core
1056 struct st_mysqlnd_plugin_header plugin_header;
1060 struct st_mysqlnd_typeii_plugin_example
1062 struct st_mysqlnd_plugin_header plugin_header;
1063 void * methods;
1064 unsigned int counter;
1067 struct st_mysqlnd_authentication_plugin;
1069 typedef zend_uchar * (*func_auth_plugin__get_auth_data)(struct st_mysqlnd_authentication_plugin * self,
1070 size_t * auth_data_len,
1071 MYSQLND_CONN_DATA * conn, const char * const user, const char * const passwd,
1072 const size_t passwd_len, zend_uchar * auth_plugin_data, size_t auth_plugin_data_len,
1073 const MYSQLND_OPTIONS * const options, unsigned long mysql_flags
1074 TSRMLS_DC);
1076 struct st_mysqlnd_authentication_plugin
1078 struct st_mysqlnd_plugin_header plugin_header;
1079 struct {
1080 func_auth_plugin__get_auth_data get_auth_data;
1081 } methods;
1085 #endif /* MYSQLND_STRUCTS_H */