Annotation of embedaddon/php/ext/mysqlnd/mysqlnd_structs.h, revision 1.1.1.4
1.1 misho 1: /*
2: +----------------------------------------------------------------------+
3: | PHP Version 5 |
4: +----------------------------------------------------------------------+
1.1.1.4 ! misho 5: | Copyright (c) 2006-2014 The PHP Group |
1.1 misho 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: +----------------------------------------------------------------------+
1.1.1.2 misho 15: | Authors: Andrey Hristov <andrey@mysql.com> |
1.1 misho 16: | Ulf Wendel <uwendel@mysql.com> |
1.1.1.2 misho 17: | Georg Richter <georg@mysql.com> |
1.1 misho 18: +----------------------------------------------------------------------+
19: */
20:
1.1.1.2 misho 21: /* $Id$ */
1.1 misho 22:
23: #ifndef MYSQLND_STRUCTS_H
24: #define MYSQLND_STRUCTS_H
25:
26: #define MYSQLND_TYPEDEFED_METHODS
27:
1.1.1.2 misho 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)
30:
31: #define MYSQLND_CLASS_METHODS_START(class) MYSQLND_CLASS_METHOD_TABLE_NAME_FORWARD(class) = {
32: #define MYSQLND_CLASS_METHODS_END }
33:
1.1 misho 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;
37:
38:
39: #define MYSQLND_MEMORY_POOL_CHUNK_LIST_SIZE 100
40:
41: struct st_mysqlnd_memory_pool
42: {
43: zend_uchar *arena;
44: unsigned int refcount;
45: unsigned int arena_size;
46: unsigned int free_size;
47:
48: MYSQLND_MEMORY_POOL_CHUNK* (*get_chunk)(MYSQLND_MEMORY_POOL * pool, unsigned int size TSRMLS_DC);
49: };
50:
51: struct st_mysqlnd_memory_pool_chunk
52: {
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;
60: };
61:
62:
63: typedef struct st_mysqlnd_cmd_buffer
64: {
65: zend_uchar *buffer;
66: size_t length;
67: } MYSQLND_CMD_BUFFER;
68:
69:
70: typedef struct st_mysqlnd_field
71: {
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;
95:
96:
97: typedef struct st_mysqlnd_upsert_result
98: {
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;
104:
105:
106: typedef struct st_mysqlnd_error_info
107: {
108: char error[MYSQLND_ERRMSG_SIZE+1];
109: char sqlstate[MYSQLND_SQLSTATE_LENGTH + 1];
110: unsigned int error_no;
1.1.1.2 misho 111: zend_llist * error_list;
1.1 misho 112: } MYSQLND_ERROR_INFO;
113:
114:
1.1.1.2 misho 115: typedef struct st_mysqlnd_error_list_element
116: {
117: char * error;
118: char sqlstate[MYSQLND_SQLSTATE_LENGTH + 1];
119: unsigned int error_no;
120: } MYSQLND_ERROR_LIST_ELEMENT;
121:
122:
1.1 misho 123: typedef struct st_mysqlnd_infile_info
124: {
125: php_stream *fd;
126: int error_no;
127: char error_msg[MYSQLND_ERRMSG_SIZE + 1];
128: const char *filename;
129: } MYSQLND_INFILE_INFO;
130:
131:
132: /* character set information */
133: typedef struct st_mysqlnd_charset
134: {
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;
144:
145:
146: /* local infile handler */
147: typedef struct st_mysqlnd_infile
148: {
149: int (*local_infile_init)(void **ptr, char *filename, void **userdata TSRMLS_DC);
1.1.1.2 misho 150: int (*local_infile_read)(void *ptr, zend_uchar * buf, unsigned int buf_len TSRMLS_DC);
1.1 misho 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;
156:
157: typedef struct st_mysqlnd_options
158: {
159: ulong flags;
160:
161: /* init commands - we need to send them to server directly after connect */
162: unsigned int num_commands;
163: char **init_commands;
164:
165: /* configuration file information */
166: char *cfg_file;
167: char *cfg_section;
168:
1.1.1.2 misho 169: char *auth_protocol;
1.1 misho 170: /*
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.
174: */
175: char * unused2;
176: char * unused3;
177: char * unused4;
178: char * unused5;
179:
180: enum_mysqlnd_protocol_type protocol;
181:
182: char *charset_name;
183: /* maximum allowed packet size for communication */
184: ulong max_allowed_packet;
185:
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;
191:
192: typedef struct st_mysqlnd_net_options
193: {
194: /* timeouts */
195: unsigned int timeout_connect;
196: unsigned int timeout_read;
197: unsigned int timeout_write;
198:
199: unsigned int net_read_buffer_size;
200:
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;
211:
212:
213: typedef struct st_mysqlnd_connection MYSQLND;
1.1.1.2 misho 214: typedef struct st_mysqlnd_connection_data MYSQLND_CONN_DATA;
1.1 misho 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;
222:
223: typedef struct st_mysqlnd_param_bind MYSQLND_PARAM_BIND;
224:
225: typedef struct st_mysqlnd_result_bind MYSQLND_RESULT_BIND;
226:
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;
230:
231: typedef struct st_mysqlnd_debug MYSQLND_DEBUG;
232:
233:
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);
240:
241: typedef struct st_mysqlnd_stats MYSQLND_STATS;
242:
243: typedef void (*mysqlnd_stat_trigger)(MYSQLND_STATS * stats, enum_mysqlnd_collected_stats stat, int64_t change TSRMLS_DC);
244:
245: struct st_mysqlnd_stats
246: {
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
254: };
255:
256:
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;
267:
268:
269:
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);
1.1.1.2 misho 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);
1.1 misho 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);
1.1.1.2 misho 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);
1.1 misho 288:
289: struct st_mysqlnd_net_methods
290: {
1.1.1.2 misho 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;
297:
298: void * unused1;
299: void * unused2;
300: func_mysqlnd_net__post_connect_set_opt post_connect_set_opt;
301:
1.1 misho 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;
309:
1.1.1.2 misho 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;
314:
315: func_mysqlnd_net__read_compressed_packet_from_stream_and_fill_read_buffer read_compressed_packet_from_stream_and_fill_read_buffer;
316:
1.1 misho 317: void * unused3;
318: void * unused4;
319: void * unused5;
1.1.1.2 misho 320: void * unused6;
321: void * unused7;
1.1 misho 322: };
323:
324:
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;
1.1.1.2 misho 337: struct st_mysqlnd_packet_auth_pam;
1.1 misho 338:
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);
1.1.1.2 misho 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);
1.1 misho 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);
352:
353: struct st_mysqlnd_protocol_methods
354: {
355: func_mysqlnd_protocol__get_greet_packet get_greet_packet;
356: func_mysqlnd_protocol__get_auth_packet get_auth_packet;
1.1.1.2 misho 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;
1.1 misho 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;
368:
369: void * unused1;
370: void * unused2;
371: void * unused3;
372: void * unused4;
373: void * unused5;
374: };
375:
376:
1.1.1.2 misho 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);
382:
383:
384: struct st_mysqlnd_object_factory_methods
385: {
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;
391: };
392:
393:
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);
405:
406: typedef MYSQLND_STMT * (*func_mysqlnd_conn_data__stmt_init)(MYSQLND_CONN_DATA * const conn TSRMLS_DC);
407:
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);
410:
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);
416:
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);
422:
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);
432:
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);
436:
437: typedef unsigned int (*func_mysqlnd_conn_data__get_field_count)(const MYSQLND_CONN_DATA * const conn TSRMLS_DC);
438:
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 */
445:
446: typedef enum_func_status (*func_mysqlnd_conn_data__query_read_result_set_header)(MYSQLND_CONN_DATA * conn, MYSQLND_STMT * stmt TSRMLS_DC);
447:
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);
452:
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);
455:
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);
459:
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);
461:
462: typedef MYSQLND_RES * (*func_mysqlnd_conn_data__result_init)(unsigned int field_count, zend_bool persistent TSRMLS_DC);
463:
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);
467:
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);
470:
471:
472: struct st_mysqlnd_conn_data_methods
473: {
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;
485:
486: func_mysqlnd_conn_data__stmt_init stmt_init;
487:
488: func_mysqlnd_conn_data__shutdown_server shutdown_server;
489: func_mysqlnd_conn_data__refresh_server refresh_server;
490:
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;
496:
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;
502:
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;
512:
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;
516:
517: func_mysqlnd_conn_data__get_field_count get_field_count;
518:
519: func_mysqlnd_conn_data__get_server_status get_server_status;
520:
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;
526:
527: func_mysqlnd_conn_data__query_read_result_set_header query_read_result_set_header;
528:
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;
533:
534: func_mysqlnd_conn_data__simple_command simple_command;
535: func_mysqlnd_conn_data__simple_command_handle_response simple_command_handle_response;
536:
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;
540:
541: func_mysqlnd_conn_data__ssl_set ssl_set;
542:
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;
547:
548: func_mysqlnd_conn_data__local_tx_start local_tx_start;
549: func_mysqlnd_conn_data__local_tx_end local_tx_end;
550: };
551:
552:
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);
1.1 misho 557:
558: struct st_mysqlnd_conn_methods
559: {
1.1.1.2 misho 560: func_mysqlnd_data__connect connect;
561: func_mysqlnd_conn__clone_object clone_object;
1.1 misho 562: func_mysqlnd_conn__dtor dtor;
1.1.1.2 misho 563: func_mysqlnd_conn__close close;
1.1 misho 564: };
565:
566:
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 */
570:
571: typedef MYSQLND_RES * (*func_mysqlnd_res__use_result)(MYSQLND_RES * const result, zend_bool ps_protocol TSRMLS_DC);
1.1.1.2 misho 572: typedef MYSQLND_RES * (*func_mysqlnd_res__store_result)(MYSQLND_RES * result, MYSQLND_CONN_DATA * const conn, zend_bool ps TSRMLS_DC);
1.1 misho 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);
586:
1.1.1.2 misho 587: typedef enum_func_status (*func_mysqlnd_res__read_result_metadata)(MYSQLND_RES * result, MYSQLND_CONN_DATA * conn TSRMLS_DC);
1.1 misho 588: typedef unsigned long * (*func_mysqlnd_res__fetch_lengths)(MYSQLND_RES * const result TSRMLS_DC);
1.1.1.2 misho 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);
1.1 misho 590: typedef enum_func_status (*func_mysqlnd_res__initialize_result_set_rest)(MYSQLND_RES * const result TSRMLS_DC);
591:
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);
598:
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);
604:
605: typedef MYSQLND_RES_METADATA * (*func_mysqlnd_res__result_meta_init)(unsigned int field_count, zend_bool persistent TSRMLS_DC);
606:
607: struct st_mysqlnd_res_methods
608: {
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 */
612:
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;
638:
639: /* for decoding - binary or text protocol */
640: func_mysqlnd_res__row_decoder row_decoder;
641:
642: func_mysqlnd_res__result_meta_init result_meta_init;
643:
644: void * unused1;
645: void * unused2;
646: void * unused3;
647: void * unused4;
648: void * unused5;
649: };
650:
651:
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);
1.1.1.2 misho 656: typedef enum_func_status (*func_mysqlnd_res_meta__read_metadata)(MYSQLND_RES_METADATA * const meta, MYSQLND_CONN_DATA * conn TSRMLS_DC);
1.1 misho 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);
659:
660: struct st_mysqlnd_res_meta_methods
661: {
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;
669: };
670:
671:
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);
1.1.1.2 misho 712: typedef enum_func_status (*func_mysqlnd_stmt__flush)(MYSQLND_STMT * const stmt TSRMLS_DC);
1.1 misho 713:
714: struct st_mysqlnd_stmt_methods
715: {
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;
729:
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;
738:
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;
742:
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;
746:
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;
750:
751: func_mysqlnd_stmt__get_attribute get_attribute;
752: func_mysqlnd_stmt__set_attribute set_attribute;
753:
754: func_mysqlnd_stmt__alloc_param_bind alloc_parameter_bind;
755: func_mysqlnd_stmt__alloc_result_bind alloc_result_bind;
756:
757: func_mysqlnd_stmt__free_parameter_bind free_parameter_bind;
758: func_mysqlnd_stmt__free_result_bind free_result_bind;
759:
760: func_mysqlnd_stmt__server_status get_server_status;
761:
762: func_mysqlnd_stmt__generate_execute_request generate_execute_request;
763: func_mysqlnd_stmt__parse_execute_response parse_execute_response;
764:
765: func_mysqlnd_stmt__free_stmt_content free_stmt_content;
1.1.1.2 misho 766:
767: func_mysqlnd_stmt__flush flush;
1.1 misho 768: };
769:
770:
771: struct st_mysqlnd_net
772: {
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;
1.1.1.2 misho 780: #else
781: void * unused_pad1;
1.1 misho 782: #endif
783: #ifdef MYSQLND_DO_WIRE_CHECK_BEFORE_COMMAND
784: zend_uchar last_command;
1.1.1.2 misho 785: #else
786: zend_uchar unused_pad2;
1.1 misho 787: #endif
788: /* cmd buffer */
789: MYSQLND_CMD_BUFFER cmd_buffer;
790:
791: MYSQLND_NET_OPTIONS options;
792:
793: zend_bool persistent;
1.1.1.2 misho 794:
795: struct st_mysqlnd_net_methods m;
1.1 misho 796: };
797:
798:
799: struct st_mysqlnd_protocol
800: {
801: zend_bool persistent;
1.1.1.2 misho 802: struct st_mysqlnd_protocol_methods m;
1.1 misho 803: };
804:
805:
1.1.1.2 misho 806: struct st_mysqlnd_connection_data
1.1 misho 807: {
808: /* Operation related */
809: MYSQLND_NET * net;
810: MYSQLND_PROTOCOL * protocol;
811:
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;
1.1.1.2 misho 826: zend_uchar *auth_plugin_data;
827: size_t auth_plugin_data_len;
1.1 misho 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;
838:
839: /* For UPSERT queries */
1.1.1.2 misho 840: MYSQLND_UPSERT_STATUS * upsert_status;
841: MYSQLND_UPSERT_STATUS upsert_status_impl;
1.1 misho 842: char *last_message;
843: unsigned int last_message_len;
844:
845: /* If error packet, we use these */
1.1.1.2 misho 846: MYSQLND_ERROR_INFO * error_info;
847: MYSQLND_ERROR_INFO error_info_impl;
1.1 misho 848:
849: /*
850: To prevent queries during unbuffered fetches. Also to
851: mark the connection as destroyed for garbage collection.
852: */
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;
857:
858: /*
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.
864: */
865: unsigned int refcount;
866:
867: /* Temporal storage for mysql_query */
868: unsigned int field_count;
869:
870: /* persistent connection */
871: zend_bool persistent;
872:
873: /* options */
1.1.1.2 misho 874: MYSQLND_OPTIONS * options;
875: MYSQLND_OPTIONS options_impl;
1.1 misho 876:
877: /* stats */
878: MYSQLND_STATS * stats;
879:
1.1.1.2 misho 880: struct st_mysqlnd_conn_data_methods * m;
881: };
882:
883:
884: struct st_mysqlnd_connection
885: {
886: MYSQLND_CONN_DATA * data;
887: zend_bool persistent;
888: struct st_mysqlnd_conn_methods * m;
1.1 misho 889: };
890:
891:
892: struct mysqlnd_field_hash_key
893: {
894: zend_bool is_numeric;
895: unsigned long key;
896: #if MYSQLND_UNICODE
897: zstr ustr;
898: unsigned int ulen;
899: #endif
900: };
901:
902:
903: struct st_mysqlnd_result_metadata
904: {
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;
913:
914: struct st_mysqlnd_res_meta_methods *m;
915: };
916:
917:
918: struct st_mysqlnd_buffered_result
919: {
920: zval **data;
921: zval **data_cursor;
922: MYSQLND_MEMORY_POOL_CHUNK **row_buffers;
923: uint64_t row_count;
924: uint64_t initialized_rows;
925:
926: unsigned int references;
927:
928: MYSQLND_ERROR_INFO error_info;
929: };
930:
931:
932: struct st_mysqlnd_unbuffered_result
933: {
934: /* For unbuffered (both normal and PS) */
935: zval **last_row_data;
936: MYSQLND_MEMORY_POOL_CHUNK *last_row_buffer;
937:
938: uint64_t row_count;
939: zend_bool eof_reached;
940: };
941:
942:
943: struct st_mysqlnd_res
944: {
1.1.1.2 misho 945: MYSQLND_CONN_DATA *conn;
1.1 misho 946: enum_mysqlnd_res_type type;
947: unsigned int field_count;
948:
949: /* For metadata functions */
950: MYSQLND_RES_METADATA *meta;
951:
952: /* To be used with store_result() - both normal and PS */
953: MYSQLND_RES_BUFFERED *stored_data;
954: MYSQLND_RES_UNBUFFERED *unbuf;
955:
956: /*
957: Column lengths of current row - both buffered and unbuffered.
958: For buffered results it duplicates the data found in **data
959: */
960: unsigned long *lengths;
961:
962: struct st_mysqlnd_packet_row * row_packet;
963:
964: MYSQLND_MEMORY_POOL * result_set_memory_pool;
965: zend_bool persistent;
1.1.1.2 misho 966:
967: struct st_mysqlnd_res_methods m;
1.1 misho 968: };
969:
970:
971: struct st_mysqlnd_param_bind
972: {
973: zval *zv;
974: zend_uchar type;
975: enum_param_bind_flags flags;
976: };
977:
978: struct st_mysqlnd_result_bind
979: {
980: zval *zv;
981: zend_bool bound;
982: };
983:
984:
985: struct st_mysqlnd_stmt_data
986: {
1.1.1.2 misho 987: MYSQLND_CONN_DATA *conn;
1.1 misho 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;
1000:
1.1.1.2 misho 1001: MYSQLND_UPSERT_STATUS * upsert_status;
1002: MYSQLND_UPSERT_STATUS upsert_status_impl;
1.1 misho 1003:
1.1.1.2 misho 1004: MYSQLND_ERROR_INFO * error_info;
1005: MYSQLND_ERROR_INFO error_info_impl;
1.1 misho 1006:
1007: zend_bool update_max_length;
1008: unsigned long prefetch_rows;
1009:
1010: zend_bool cursor_exists;
1011: mysqlnd_stmt_use_or_store_func default_rset_handler;
1012:
1013: MYSQLND_CMD_BUFFER execute_cmd_buffer;
1014: unsigned int execute_count;/* count how many times the stmt was executed */
1015: };
1016:
1017:
1018: struct st_mysqlnd_stmt
1019: {
1020: MYSQLND_STMT_DATA * data;
1021: struct st_mysqlnd_stmt_methods *m;
1022: zend_bool persistent;
1023: };
1024:
1.1.1.2 misho 1025:
1026: typedef struct st_mysqlnd_string
1027: {
1028: char *s;
1029: size_t l;
1030: } MYSQLND_STRING;
1031:
1032:
1033: struct st_mysqlnd_plugin_header
1034: {
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
1042: {
1043: MYSQLND_STATS * values;
1044: const MYSQLND_STRING * names;
1045: } plugin_stats;
1046:
1047: struct
1048: {
1049: enum_func_status (*plugin_shutdown)(void * plugin TSRMLS_DC);
1050: } m;
1051: };
1052:
1053:
1054: struct st_mysqlnd_plugin_core
1055: {
1056: struct st_mysqlnd_plugin_header plugin_header;
1057: };
1058:
1059:
1060: struct st_mysqlnd_typeii_plugin_example
1061: {
1062: struct st_mysqlnd_plugin_header plugin_header;
1063: void * methods;
1064: unsigned int counter;
1065: };
1066:
1067: struct st_mysqlnd_authentication_plugin;
1068:
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);
1075:
1076: struct st_mysqlnd_authentication_plugin
1077: {
1078: struct st_mysqlnd_plugin_header plugin_header;
1079: struct {
1080: func_auth_plugin__get_auth_data get_auth_data;
1081: } methods;
1082: };
1083:
1084:
1.1 misho 1085: #endif /* MYSQLND_STRUCTS_H */
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>