Annotation of embedaddon/php/ext/mysqlnd/mysqlnd_structs.h, revision 1.1.1.1
1.1 misho 1: /*
2: +----------------------------------------------------------------------+
3: | PHP Version 5 |
4: +----------------------------------------------------------------------+
5: | Copyright (c) 2006-2012 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: Georg Richter <georg@mysql.com> |
16: | Andrey Hristov <andrey@mysql.com> |
17: | Ulf Wendel <uwendel@mysql.com> |
18: +----------------------------------------------------------------------+
19: */
20:
21: /* $Id: mysqlnd_structs.h 321634 2012-01-01 13:15:04Z felipe $ */
22:
23: #ifndef MYSQLND_STRUCTS_H
24: #define MYSQLND_STRUCTS_H
25:
26: #define MYSQLND_TYPEDEFED_METHODS
27:
28: typedef struct st_mysqlnd_memory_pool MYSQLND_MEMORY_POOL;
29: typedef struct st_mysqlnd_memory_pool_chunk MYSQLND_MEMORY_POOL_CHUNK;
30: typedef struct st_mysqlnd_memory_pool_chunk_llist MYSQLND_MEMORY_POOL_CHUNK_LLIST;
31:
32:
33: #define MYSQLND_MEMORY_POOL_CHUNK_LIST_SIZE 100
34:
35: struct st_mysqlnd_memory_pool
36: {
37: zend_uchar *arena;
38: unsigned int refcount;
39: unsigned int arena_size;
40: unsigned int free_size;
41:
42: MYSQLND_MEMORY_POOL_CHUNK* (*get_chunk)(MYSQLND_MEMORY_POOL * pool, unsigned int size TSRMLS_DC);
43: };
44:
45: struct st_mysqlnd_memory_pool_chunk
46: {
47: size_t app;
48: MYSQLND_MEMORY_POOL *pool;
49: zend_uchar *ptr;
50: unsigned int size;
51: enum_func_status (*resize_chunk)(MYSQLND_MEMORY_POOL_CHUNK * chunk, unsigned int size TSRMLS_DC);
52: void (*free_chunk)(MYSQLND_MEMORY_POOL_CHUNK * chunk TSRMLS_DC);
53: zend_bool from_pool;
54: };
55:
56:
57: typedef struct st_mysqlnd_cmd_buffer
58: {
59: zend_uchar *buffer;
60: size_t length;
61: } MYSQLND_CMD_BUFFER;
62:
63:
64: typedef struct st_mysqlnd_field
65: {
66: const char *name; /* Name of column */
67: const char *org_name; /* Original column name, if an alias */
68: const char *table; /* Table of column if column was a field */
69: const char *org_table; /* Org table name, if table was an alias */
70: const char *db; /* Database for table */
71: const char *catalog; /* Catalog for table */
72: char *def; /* Default value (set by mysql_list_fields) */
73: unsigned long length; /* Width of column (create length) */
74: unsigned long max_length; /* Max width for selected set */
75: unsigned int name_length;
76: unsigned int org_name_length;
77: unsigned int table_length;
78: unsigned int org_table_length;
79: unsigned int db_length;
80: unsigned int catalog_length;
81: unsigned int def_length;
82: unsigned int flags; /* Diverse flags */
83: unsigned int decimals; /* Number of decimals in field */
84: unsigned int charsetnr; /* Character set */
85: enum mysqlnd_field_types type; /* Type of field. See mysql_com.h for types */
86: char *root;
87: size_t root_len;
88: } MYSQLND_FIELD;
89:
90:
91: typedef struct st_mysqlnd_upsert_result
92: {
93: unsigned int warning_count;
94: unsigned int server_status;
95: uint64_t affected_rows;
96: uint64_t last_insert_id;
97: } MYSQLND_UPSERT_STATUS;
98:
99:
100: typedef struct st_mysqlnd_error_info
101: {
102: char error[MYSQLND_ERRMSG_SIZE+1];
103: char sqlstate[MYSQLND_SQLSTATE_LENGTH + 1];
104: unsigned int error_no;
105: } MYSQLND_ERROR_INFO;
106:
107:
108: typedef struct st_mysqlnd_infile_info
109: {
110: php_stream *fd;
111: int error_no;
112: char error_msg[MYSQLND_ERRMSG_SIZE + 1];
113: const char *filename;
114: } MYSQLND_INFILE_INFO;
115:
116:
117: /* character set information */
118: typedef struct st_mysqlnd_charset
119: {
120: unsigned int nr;
121: const char *name;
122: const char *collation;
123: unsigned int char_minlen;
124: unsigned int char_maxlen;
125: const char *comment;
126: unsigned int (*mb_charlen)(unsigned int c);
127: unsigned int (*mb_valid)(const char *start, const char *end);
128: } MYSQLND_CHARSET;
129:
130:
131: /* local infile handler */
132: typedef struct st_mysqlnd_infile
133: {
134: int (*local_infile_init)(void **ptr, char *filename, void **userdata TSRMLS_DC);
135: int (*local_infile_read)(void *ptr, char *buf, unsigned int buf_len TSRMLS_DC);
136: int (*local_infile_error)(void *ptr, char *error_msg, unsigned int error_msg_len TSRMLS_DC);
137: void (*local_infile_end)(void *ptr TSRMLS_DC);
138: zval *callback;
139: void *userdata;
140: } MYSQLND_INFILE;
141:
142: typedef struct st_mysqlnd_options
143: {
144: ulong flags;
145:
146: /* init commands - we need to send them to server directly after connect */
147: unsigned int num_commands;
148: char **init_commands;
149:
150: /* configuration file information */
151: char *cfg_file;
152: char *cfg_section;
153:
154: /*
155: We need to keep these because otherwise st_mysqlnd_conn will be changed.
156: The ABI will be broken and the methods structure will be somewhere else
157: in the memory which can crash external code. Feel free to reuse these.
158: */
159: char * unused1;
160: char * unused2;
161: char * unused3;
162: char * unused4;
163: char * unused5;
164:
165: enum_mysqlnd_protocol_type protocol;
166:
167: char *charset_name;
168: /* maximum allowed packet size for communication */
169: ulong max_allowed_packet;
170:
171: zend_bool numeric_and_datetime_as_unicode;
172: #ifdef MYSQLND_STRING_TO_INT_CONVERSION
173: zend_bool int_and_float_native;
174: #endif
175: } MYSQLND_OPTIONS;
176:
177: typedef struct st_mysqlnd_net_options
178: {
179: /* timeouts */
180: unsigned int timeout_connect;
181: unsigned int timeout_read;
182: unsigned int timeout_write;
183:
184: unsigned int net_read_buffer_size;
185:
186: /* SSL information */
187: char *ssl_key;
188: char *ssl_cert;
189: char *ssl_ca;
190: char *ssl_capath;
191: char *ssl_cipher;
192: char *ssl_passphrase;
193: zend_bool ssl_verify_peer;
194: uint64_t flags;
195: } MYSQLND_NET_OPTIONS;
196:
197:
198: typedef struct st_mysqlnd_connection MYSQLND;
199: typedef struct st_mysqlnd_net MYSQLND_NET;
200: typedef struct st_mysqlnd_protocol MYSQLND_PROTOCOL;
201: typedef struct st_mysqlnd_res MYSQLND_RES;
202: typedef char** MYSQLND_ROW_C; /* return data as array of strings */
203: typedef struct st_mysqlnd_stmt_data MYSQLND_STMT_DATA;
204: typedef struct st_mysqlnd_stmt MYSQLND_STMT;
205: typedef unsigned int MYSQLND_FIELD_OFFSET;
206:
207: typedef struct st_mysqlnd_param_bind MYSQLND_PARAM_BIND;
208:
209: typedef struct st_mysqlnd_result_bind MYSQLND_RESULT_BIND;
210:
211: typedef struct st_mysqlnd_result_metadata MYSQLND_RES_METADATA;
212: typedef struct st_mysqlnd_buffered_result MYSQLND_RES_BUFFERED;
213: typedef struct st_mysqlnd_unbuffered_result MYSQLND_RES_UNBUFFERED;
214:
215: typedef struct st_mysqlnd_debug MYSQLND_DEBUG;
216:
217:
218: typedef MYSQLND_RES* (*mysqlnd_stmt_use_or_store_func)(MYSQLND_STMT * const TSRMLS_DC);
219: typedef enum_func_status (*mysqlnd_fetch_row_func)(MYSQLND_RES *result,
220: void *param,
221: unsigned int flags,
222: zend_bool *fetched_anything
223: TSRMLS_DC);
224:
225: typedef struct st_mysqlnd_stats MYSQLND_STATS;
226:
227: typedef void (*mysqlnd_stat_trigger)(MYSQLND_STATS * stats, enum_mysqlnd_collected_stats stat, int64_t change TSRMLS_DC);
228:
229: struct st_mysqlnd_stats
230: {
231: uint64_t *values;
232: mysqlnd_stat_trigger *triggers;
233: size_t count;
234: zend_bool in_trigger;
235: #ifdef ZTS
236: MUTEX_T LOCK_access;
237: #endif
238: };
239:
240:
241: typedef struct st_mysqlnd_read_buffer {
242: zend_uchar * data;
243: size_t offset;
244: size_t size;
245: size_t len;
246: zend_bool (*is_empty)(struct st_mysqlnd_read_buffer *);
247: void (*read)(struct st_mysqlnd_read_buffer *, size_t count, zend_uchar * dest);
248: size_t (*bytes_left)(struct st_mysqlnd_read_buffer *);
249: void (*free_buffer)(struct st_mysqlnd_read_buffer ** TSRMLS_DC);
250: } MYSQLND_READ_BUFFER;
251:
252:
253:
254: typedef enum_func_status (*func_mysqlnd_net__connect)(MYSQLND_NET * net, const char * const scheme, size_t scheme_len, zend_bool persistent, char **errstr, int * errcode TSRMLS_DC);
255: typedef size_t (*func_mysqlnd_net__send)(MYSQLND * const conn, char * const buf, size_t count TSRMLS_DC);
256: typedef enum_func_status (*func_mysqlnd_net__receive)(MYSQLND * conn, zend_uchar * buffer, size_t count TSRMLS_DC);
257: typedef enum_func_status (*func_mysqlnd_net__set_client_option)(MYSQLND_NET * const net, enum_mysqlnd_option option, const char * const value TSRMLS_DC);
258: typedef enum_func_status (*func_mysqlnd_net__network_read)(MYSQLND * conn, zend_uchar * buffer, size_t count TSRMLS_DC);
259: typedef size_t (*func_mysqlnd_net__network_write)(MYSQLND * const conn, const zend_uchar * const buf, size_t count TSRMLS_DC);
260: typedef enum_func_status (*func_mysqlnd_net__decode)(zend_uchar * uncompressed_data, size_t uncompressed_data_len, const zend_uchar * const compressed_data, size_t compressed_data_len TSRMLS_DC);
261: typedef enum_func_status (*func_mysqlnd_net__encode)(zend_uchar * compress_buffer, size_t * compress_buffer_len, const zend_uchar * const uncompressed_data, size_t uncompressed_data_len TSRMLS_DC);
262: typedef size_t (*func_mysqlnd_net__consume_uneaten_data)(MYSQLND_NET * const net, enum php_mysqlnd_server_command cmd TSRMLS_DC);
263: typedef void (*func_mysqlnd_net__free_contents)(MYSQLND_NET * net TSRMLS_DC);
264: typedef enum_func_status (*func_mysqlnd_net__enable_ssl)(MYSQLND_NET * const net TSRMLS_DC);
265: typedef enum_func_status (*func_mysqlnd_net__disable_ssl)(MYSQLND_NET * const net TSRMLS_DC);
266:
267:
268: struct st_mysqlnd_net_methods
269: {
270: func_mysqlnd_net__connect connect;
271: func_mysqlnd_net__send send;
272: func_mysqlnd_net__receive receive;
273: func_mysqlnd_net__set_client_option set_client_option;
274: func_mysqlnd_net__network_read network_read;
275: func_mysqlnd_net__network_write network_write;
276: func_mysqlnd_net__decode decode;
277: func_mysqlnd_net__encode encode;
278: func_mysqlnd_net__consume_uneaten_data consume_uneaten_data;
279: func_mysqlnd_net__free_contents free_contents;
280: func_mysqlnd_net__enable_ssl enable_ssl;
281: func_mysqlnd_net__disable_ssl disable_ssl;
282:
283: void * unused1;
284: void * unused2;
285: void * unused3;
286: void * unused4;
287: void * unused5;
288: };
289:
290:
291: struct st_mysqlnd_packet_greet;
292: struct st_mysqlnd_packet_greet;
293: struct st_mysqlnd_packet_auth;
294: struct st_mysqlnd_packet_ok;
295: struct st_mysqlnd_packet_command;
296: struct st_mysqlnd_packet_eof;
297: struct st_mysqlnd_packet_rset_header;
298: struct st_mysqlnd_packet_res_field;
299: struct st_mysqlnd_packet_row;
300: struct st_mysqlnd_packet_stats;
301: struct st_mysqlnd_packet_prepare_response;
302: struct st_mysqlnd_packet_chg_user_resp;
303:
304: typedef struct st_mysqlnd_packet_greet * (*func_mysqlnd_protocol__get_greet_packet)(MYSQLND_PROTOCOL * const protocol, zend_bool persistent TSRMLS_DC);
305: typedef struct st_mysqlnd_packet_auth * (*func_mysqlnd_protocol__get_auth_packet)(MYSQLND_PROTOCOL * const protocol, zend_bool persistent TSRMLS_DC);
306: typedef struct st_mysqlnd_packet_ok * (*func_mysqlnd_protocol__get_ok_packet)(MYSQLND_PROTOCOL * const protocol, zend_bool persistent TSRMLS_DC);
307: typedef struct st_mysqlnd_packet_command * (*func_mysqlnd_protocol__get_command_packet)(MYSQLND_PROTOCOL * const protocol, zend_bool persistent TSRMLS_DC);
308: typedef struct st_mysqlnd_packet_eof * (*func_mysqlnd_protocol__get_eof_packet)(MYSQLND_PROTOCOL * const protocol, zend_bool persistent TSRMLS_DC);
309: typedef struct st_mysqlnd_packet_rset_header * (*func_mysqlnd_protocol__get_rset_header_packet)(MYSQLND_PROTOCOL * const protocol, zend_bool persistent TSRMLS_DC);
310: typedef struct st_mysqlnd_packet_res_field * (*func_mysqlnd_protocol__get_result_field_packet)(MYSQLND_PROTOCOL * const protocol, zend_bool persistent TSRMLS_DC);
311: typedef struct st_mysqlnd_packet_row * (*func_mysqlnd_protocol__get_row_packet)(MYSQLND_PROTOCOL * const protocol, zend_bool persistent TSRMLS_DC);
312: typedef struct st_mysqlnd_packet_stats * (*func_mysqlnd_protocol__get_stats_packet)(MYSQLND_PROTOCOL * const protocol, zend_bool persistent TSRMLS_DC);
313: typedef struct st_mysqlnd_packet_prepare_response *(*func_mysqlnd_protocol__get_prepare_response_packet)(MYSQLND_PROTOCOL * const protocol, zend_bool persistent TSRMLS_DC);
314: 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);
315:
316: struct st_mysqlnd_protocol_methods
317: {
318: func_mysqlnd_protocol__get_greet_packet get_greet_packet;
319: func_mysqlnd_protocol__get_auth_packet get_auth_packet;
320: func_mysqlnd_protocol__get_ok_packet get_ok_packet;
321: func_mysqlnd_protocol__get_command_packet get_command_packet;
322: func_mysqlnd_protocol__get_eof_packet get_eof_packet;
323: func_mysqlnd_protocol__get_rset_header_packet get_rset_header_packet;
324: func_mysqlnd_protocol__get_result_field_packet get_result_field_packet;
325: func_mysqlnd_protocol__get_row_packet get_row_packet;
326: func_mysqlnd_protocol__get_stats_packet get_stats_packet;
327: func_mysqlnd_protocol__get_prepare_response_packet get_prepare_response_packet;
328: func_mysqlnd_protocol__get_change_user_response_packet get_change_user_response_packet;
329:
330: void * unused1;
331: void * unused2;
332: void * unused3;
333: void * unused4;
334: void * unused5;
335: };
336:
337:
338:
339: typedef enum_func_status (*func_mysqlnd_conn__init)(MYSQLND * conn TSRMLS_DC);
340: typedef enum_func_status (*func_mysqlnd_conn__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);
341: typedef ulong (*func_mysqlnd_conn__escape_string)(MYSQLND * const conn, char *newstr, const char *escapestr, size_t escapestr_len TSRMLS_DC);
342: typedef enum_func_status (*func_mysqlnd_conn__set_charset)(MYSQLND * const conn, const char * const charset TSRMLS_DC);
343: typedef enum_func_status (*func_mysqlnd_conn__query)(MYSQLND *conn, const char *query, unsigned int query_len TSRMLS_DC);
344: typedef enum_func_status (*func_mysqlnd_conn__send_query)(MYSQLND *conn, const char *query, unsigned int query_len TSRMLS_DC);
345: typedef enum_func_status (*func_mysqlnd_conn__reap_query)(MYSQLND *conn TSRMLS_DC);
346: typedef MYSQLND_RES * (*func_mysqlnd_conn__use_result)(MYSQLND * const conn TSRMLS_DC);
347: typedef MYSQLND_RES * (*func_mysqlnd_conn__store_result)(MYSQLND * const conn TSRMLS_DC);
348: typedef enum_func_status (*func_mysqlnd_conn__next_result)(MYSQLND * const conn TSRMLS_DC);
349: typedef zend_bool (*func_mysqlnd_conn__more_results)(const MYSQLND * const conn TSRMLS_DC);
350:
351: typedef MYSQLND_STMT * (*func_mysqlnd_conn__stmt_init)(MYSQLND * const conn TSRMLS_DC);
352:
353: typedef enum_func_status (*func_mysqlnd_conn__shutdown_server)(MYSQLND * const conn, uint8_t level TSRMLS_DC);
354: typedef enum_func_status (*func_mysqlnd_conn__refresh_server)(MYSQLND * const conn, uint8_t options TSRMLS_DC);
355:
356: typedef enum_func_status (*func_mysqlnd_conn__ping)(MYSQLND * const conn TSRMLS_DC);
357: typedef enum_func_status (*func_mysqlnd_conn__kill_connection)(MYSQLND *conn, unsigned int pid TSRMLS_DC);
358: typedef enum_func_status (*func_mysqlnd_conn__select_db)(MYSQLND * const conn, const char * const db, unsigned int db_len TSRMLS_DC);
359: typedef enum_func_status (*func_mysqlnd_conn__server_dump_debug_information)(MYSQLND * const conn TSRMLS_DC);
360: typedef enum_func_status (*func_mysqlnd_conn__change_user)(MYSQLND * const conn, const char * user, const char * passwd, const char * db, zend_bool silent TSRMLS_DC);
361:
362: typedef unsigned int (*func_mysqlnd_conn__get_error_no)(const MYSQLND * const conn TSRMLS_DC);
363: typedef const char * (*func_mysqlnd_conn__get_error_str)(const MYSQLND * const conn TSRMLS_DC);
364: typedef const char * (*func_mysqlnd_conn__get_sqlstate)(const MYSQLND * const conn TSRMLS_DC);
365: typedef uint64_t (*func_mysqlnd_conn__get_thread_id)(const MYSQLND * const conn TSRMLS_DC);
366: typedef void (*func_mysqlnd_conn__get_statistics)(const MYSQLND * const conn, zval *return_value TSRMLS_DC ZEND_FILE_LINE_DC);
367:
368: typedef unsigned long (*func_mysqlnd_conn__get_server_version)(const MYSQLND * const conn TSRMLS_DC);
369: typedef const char * (*func_mysqlnd_conn__get_server_information)(const MYSQLND * const conn TSRMLS_DC);
370: typedef enum_func_status (*func_mysqlnd_conn__get_server_statistics)(MYSQLND *conn, char **message, unsigned int * message_len TSRMLS_DC);
371: typedef const char * (*func_mysqlnd_conn__get_host_information)(const MYSQLND * const conn TSRMLS_DC);
372: typedef unsigned int (*func_mysqlnd_conn__get_protocol_information)(const MYSQLND * const conn TSRMLS_DC);
373: typedef const char * (*func_mysqlnd_conn__get_last_message)(const MYSQLND * const conn TSRMLS_DC);
374: typedef const char * (*func_mysqlnd_conn__charset_name)(const MYSQLND * const conn TSRMLS_DC);
375: typedef MYSQLND_RES * (*func_mysqlnd_conn__list_fields)(MYSQLND *conn, const char *table, const char *achtung_wild TSRMLS_DC);
376: typedef MYSQLND_RES * (*func_mysqlnd_conn__list_method)(MYSQLND *conn, const char *query, const char *achtung_wild, char *par1 TSRMLS_DC);
377:
378: typedef uint64_t (*func_mysqlnd_conn__get_last_insert_id)(const MYSQLND * const conn TSRMLS_DC);
379: typedef uint64_t (*func_mysqlnd_conn__get_affected_rows)(const MYSQLND * const conn TSRMLS_DC);
380: typedef unsigned int (*func_mysqlnd_conn__get_warning_count)(const MYSQLND * const conn TSRMLS_DC);
381:
382: typedef unsigned int (*func_mysqlnd_conn__get_field_count)(const MYSQLND * const conn TSRMLS_DC);
383:
384: typedef enum_func_status (*func_mysqlnd_conn__set_server_option)(MYSQLND * const conn, enum_mysqlnd_server_option option TSRMLS_DC);
385: typedef enum_func_status (*func_mysqlnd_conn__set_client_option)(MYSQLND * const conn, enum_mysqlnd_option option, const char * const value TSRMLS_DC);
386: typedef void (*func_mysqlnd_conn__free_contents)(MYSQLND *conn TSRMLS_DC); /* private */
387: typedef void (*func_mysqlnd_conn__free_options)(MYSQLND * conn TSRMLS_DC); /* private */
388: typedef enum_func_status (*func_mysqlnd_conn__close)(MYSQLND *conn, enum_connection_close_type close_type TSRMLS_DC);
389: typedef void (*func_mysqlnd_conn__dtor)(MYSQLND *conn TSRMLS_DC); /* private */
390:
391: typedef enum_func_status (*func_mysqlnd_conn__query_read_result_set_header)(MYSQLND *conn, MYSQLND_STMT *stmt TSRMLS_DC);
392:
393: typedef MYSQLND * (*func_mysqlnd_conn__get_reference)(MYSQLND * const conn TSRMLS_DC);
394: typedef enum_func_status (*func_mysqlnd_conn__free_reference)(MYSQLND * const conn TSRMLS_DC);
395: typedef enum mysqlnd_connection_state (*func_mysqlnd_conn__get_state)(MYSQLND * const conn TSRMLS_DC);
396: typedef void (*func_mysqlnd_conn__set_state)(MYSQLND * const conn, enum mysqlnd_connection_state new_state TSRMLS_DC);
397:
398: typedef enum_func_status (*func_mysqlnd_conn__simple_command)(MYSQLND *conn, enum php_mysqlnd_server_command command, const char * const arg, size_t arg_len, enum mysqlnd_packet_type ok_packet, zend_bool silent, zend_bool ignore_upsert_status TSRMLS_DC);
399: typedef enum_func_status (*func_mysqlnd_conn__simple_command_handle_response)(MYSQLND *conn, enum mysqlnd_packet_type ok_packet, zend_bool silent, enum php_mysqlnd_server_command command, zend_bool ignore_upsert_status TSRMLS_DC);
400:
401: typedef enum_func_status (*func_mysqlnd_conn__restart_psession)(MYSQLND *conn TSRMLS_DC);
402: typedef enum_func_status (*func_mysqlnd_conn__end_psession)(MYSQLND *conn TSRMLS_DC);
403: typedef enum_func_status (*func_mysqlnd_conn__send_close)(MYSQLND * conn TSRMLS_DC);
404:
405: typedef enum_func_status (*func_mysqlnd_conn__ssl_set)(MYSQLND * const conn, const char * key, const char * const cert, const char * const ca, const char * const capath, const char * const cipher TSRMLS_DC);
406:
407: typedef MYSQLND_RES * (*func_mysqlnd_conn__result_init)(unsigned int field_count, zend_bool persistent TSRMLS_DC);
408:
409: typedef enum_func_status (*func_mysqlnd_conn__set_autocommit)(MYSQLND * conn, unsigned int mode TSRMLS_DC);
410: typedef enum_func_status (*func_mysqlnd_conn__tx_commit)(MYSQLND * conn TSRMLS_DC);
411: typedef enum_func_status (*func_mysqlnd_conn__tx_rollback)(MYSQLND * conn TSRMLS_DC);
412:
413:
414: struct st_mysqlnd_conn_methods
415: {
416: func_mysqlnd_conn__init init;
417: func_mysqlnd_conn__connect connect;
418: func_mysqlnd_conn__escape_string escape_string;
419: func_mysqlnd_conn__set_charset set_charset;
420: func_mysqlnd_conn__query query;
421: func_mysqlnd_conn__send_query send_query;
422: func_mysqlnd_conn__reap_query reap_query;
423: func_mysqlnd_conn__use_result use_result;
424: func_mysqlnd_conn__store_result store_result;
425: func_mysqlnd_conn__next_result next_result;
426: func_mysqlnd_conn__more_results more_results;
427:
428: func_mysqlnd_conn__stmt_init stmt_init;
429:
430: func_mysqlnd_conn__shutdown_server shutdown_server;
431: func_mysqlnd_conn__refresh_server refresh_server;
432:
433: func_mysqlnd_conn__ping ping;
434: func_mysqlnd_conn__kill_connection kill_connection;
435: func_mysqlnd_conn__select_db select_db;
436: func_mysqlnd_conn__server_dump_debug_information server_dump_debug_information;
437: func_mysqlnd_conn__change_user change_user;
438:
439: func_mysqlnd_conn__get_error_no get_error_no;
440: func_mysqlnd_conn__get_error_str get_error_str;
441: func_mysqlnd_conn__get_sqlstate get_sqlstate;
442: func_mysqlnd_conn__get_thread_id get_thread_id;
443: func_mysqlnd_conn__get_statistics get_statistics;
444:
445: func_mysqlnd_conn__get_server_version get_server_version;
446: func_mysqlnd_conn__get_server_information get_server_information;
447: func_mysqlnd_conn__get_server_statistics get_server_statistics;
448: func_mysqlnd_conn__get_host_information get_host_information;
449: func_mysqlnd_conn__get_protocol_information get_protocol_information;
450: func_mysqlnd_conn__get_last_message get_last_message;
451: func_mysqlnd_conn__charset_name charset_name;
452: func_mysqlnd_conn__list_fields list_fields;
453: func_mysqlnd_conn__list_method list_method;
454:
455: func_mysqlnd_conn__get_last_insert_id get_last_insert_id;
456: func_mysqlnd_conn__get_affected_rows get_affected_rows;
457: func_mysqlnd_conn__get_warning_count get_warning_count;
458:
459: func_mysqlnd_conn__get_field_count get_field_count;
460:
461: func_mysqlnd_conn__set_server_option set_server_option;
462: func_mysqlnd_conn__set_client_option set_client_option;
463: func_mysqlnd_conn__free_contents free_contents;
464: func_mysqlnd_conn__free_options free_options;
465: func_mysqlnd_conn__close close;
466: func_mysqlnd_conn__dtor dtor;
467:
468: func_mysqlnd_conn__query_read_result_set_header query_read_result_set_header;
469:
470: func_mysqlnd_conn__get_reference get_reference;
471: func_mysqlnd_conn__free_reference free_reference;
472: func_mysqlnd_conn__get_state get_state;
473: func_mysqlnd_conn__set_state set_state;
474:
475: func_mysqlnd_conn__simple_command simple_command;
476: func_mysqlnd_conn__simple_command_handle_response simple_command_handle_response;
477:
478: func_mysqlnd_conn__restart_psession restart_psession;
479: func_mysqlnd_conn__end_psession end_psession;
480: func_mysqlnd_conn__send_close send_close;
481:
482: func_mysqlnd_conn__ssl_set ssl_set;
483:
484: func_mysqlnd_conn__result_init result_init;
485: #ifdef AUTOCOMMIT_TX_COMMIT_ROLLBACK
486: func_mysqlnd_conn__set_autocommit set_autocommit;
487: func_mysqlnd_conn__tx_commit tx_commit;
488: func_mysqlnd_conn__tx_rollback tx_rollback;
489: #endif
490: };
491:
492:
493:
494:
495: typedef mysqlnd_fetch_row_func fetch_row;
496: typedef mysqlnd_fetch_row_func fetch_row_normal_buffered; /* private */
497: typedef mysqlnd_fetch_row_func fetch_row_normal_unbuffered; /* private */
498:
499: typedef MYSQLND_RES * (*func_mysqlnd_res__use_result)(MYSQLND_RES * const result, zend_bool ps_protocol TSRMLS_DC);
500: typedef MYSQLND_RES * (*func_mysqlnd_res__store_result)(MYSQLND_RES * result, MYSQLND * const conn, zend_bool ps TSRMLS_DC);
501: 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);
502: typedef MYSQLND_ROW_C (*func_mysqlnd_res__fetch_row_c)(MYSQLND_RES *result TSRMLS_DC);
503: typedef void (*func_mysqlnd_res__fetch_all)(MYSQLND_RES *result, unsigned int flags, zval *return_value TSRMLS_DC ZEND_FILE_LINE_DC);
504: typedef void (*func_mysqlnd_res__fetch_field_data)(MYSQLND_RES *result, unsigned int offset, zval *return_value TSRMLS_DC);
505: typedef uint64_t (*func_mysqlnd_res__num_rows)(const MYSQLND_RES * const result TSRMLS_DC);
506: typedef unsigned int (*func_mysqlnd_res__num_fields)(const MYSQLND_RES * const result TSRMLS_DC);
507: typedef enum_func_status (*func_mysqlnd_res__skip_result)(MYSQLND_RES * const result TSRMLS_DC);
508: typedef enum_func_status (*func_mysqlnd_res__seek_data)(MYSQLND_RES * result, uint64_t row TSRMLS_DC);
509: typedef MYSQLND_FIELD_OFFSET (*func_mysqlnd_res__seek_field)(MYSQLND_RES * const result, MYSQLND_FIELD_OFFSET field_offset TSRMLS_DC);
510: typedef MYSQLND_FIELD_OFFSET (*func_mysqlnd_res__field_tell)(const MYSQLND_RES * const result TSRMLS_DC);
511: typedef const MYSQLND_FIELD *(*func_mysqlnd_res__fetch_field)(MYSQLND_RES * const result TSRMLS_DC);
512: typedef const MYSQLND_FIELD *(*func_mysqlnd_res__fetch_field_direct)(MYSQLND_RES * const result, MYSQLND_FIELD_OFFSET fieldnr TSRMLS_DC);
513: typedef const MYSQLND_FIELD *(*func_mysqlnd_res__fetch_fields)(MYSQLND_RES * const result TSRMLS_DC);
514:
515: typedef enum_func_status (*func_mysqlnd_res__read_result_metadata)(MYSQLND_RES *result, MYSQLND * conn TSRMLS_DC);
516: typedef unsigned long * (*func_mysqlnd_res__fetch_lengths)(MYSQLND_RES * const result TSRMLS_DC);
517: typedef enum_func_status (*func_mysqlnd_res__store_result_fetch_data)(MYSQLND * const conn, MYSQLND_RES *result, MYSQLND_RES_METADATA *meta, zend_bool binary_protocol, zend_bool to_cache TSRMLS_DC);
518: typedef enum_func_status (*func_mysqlnd_res__initialize_result_set_rest)(MYSQLND_RES * const result TSRMLS_DC);
519:
520: typedef void (*func_mysqlnd_res__free_result_buffers)(MYSQLND_RES * result TSRMLS_DC); /* private */
521: typedef enum_func_status (*func_mysqlnd_res__free_result)(MYSQLND_RES * result, zend_bool implicit TSRMLS_DC);
522: typedef void (*func_mysqlnd_res__free_result_internal)(MYSQLND_RES *result TSRMLS_DC);
523: typedef void (*func_mysqlnd_res__free_result_contents)(MYSQLND_RES *result TSRMLS_DC);
524: typedef void (*func_mysqlnd_res__free_buffered_data)(MYSQLND_RES *result TSRMLS_DC);
525: typedef void (*func_mysqlnd_res__unbuffered_free_last_data)(MYSQLND_RES *result TSRMLS_DC);
526:
527: /* for decoding - binary or text protocol */
528: typedef enum_func_status (*func_mysqlnd_res__row_decoder)(MYSQLND_MEMORY_POOL_CHUNK * row_buffer, zval ** fields,
529: unsigned int field_count, MYSQLND_FIELD *fields_metadata,
530: zend_bool persistent,
531: zend_bool as_unicode, zend_bool as_int_or_float,
532: MYSQLND_STATS * stats TSRMLS_DC);
533:
534: typedef MYSQLND_RES_METADATA * (*func_mysqlnd_res__result_meta_init)(unsigned int field_count, zend_bool persistent TSRMLS_DC);
535:
536: struct st_mysqlnd_res_methods
537: {
538: mysqlnd_fetch_row_func fetch_row;
539: mysqlnd_fetch_row_func fetch_row_normal_buffered; /* private */
540: mysqlnd_fetch_row_func fetch_row_normal_unbuffered; /* private */
541:
542: func_mysqlnd_res__use_result use_result;
543: func_mysqlnd_res__store_result store_result;
544: func_mysqlnd_res__fetch_into fetch_into;
545: func_mysqlnd_res__fetch_row_c fetch_row_c;
546: func_mysqlnd_res__fetch_all fetch_all;
547: func_mysqlnd_res__fetch_field_data fetch_field_data;
548: func_mysqlnd_res__num_rows num_rows;
549: func_mysqlnd_res__num_fields num_fields;
550: func_mysqlnd_res__skip_result skip_result;
551: func_mysqlnd_res__seek_data seek_data;
552: func_mysqlnd_res__seek_field seek_field;
553: func_mysqlnd_res__field_tell field_tell;
554: func_mysqlnd_res__fetch_field fetch_field;
555: func_mysqlnd_res__fetch_field_direct fetch_field_direct;
556: func_mysqlnd_res__fetch_fields fetch_fields;
557: func_mysqlnd_res__read_result_metadata read_result_metadata;
558: func_mysqlnd_res__fetch_lengths fetch_lengths;
559: func_mysqlnd_res__store_result_fetch_data store_result_fetch_data;
560: func_mysqlnd_res__initialize_result_set_rest initialize_result_set_rest;
561: func_mysqlnd_res__free_result_buffers free_result_buffers;
562: func_mysqlnd_res__free_result free_result;
563: func_mysqlnd_res__free_result_internal free_result_internal;
564: func_mysqlnd_res__free_result_contents free_result_contents;
565: func_mysqlnd_res__free_buffered_data free_buffered_data;
566: func_mysqlnd_res__unbuffered_free_last_data unbuffered_free_last_data;
567:
568: /* for decoding - binary or text protocol */
569: func_mysqlnd_res__row_decoder row_decoder;
570:
571: func_mysqlnd_res__result_meta_init result_meta_init;
572:
573: void * unused1;
574: void * unused2;
575: void * unused3;
576: void * unused4;
577: void * unused5;
578: };
579:
580:
581: typedef const MYSQLND_FIELD * (*func_mysqlnd_res_meta__fetch_field)(MYSQLND_RES_METADATA * const meta TSRMLS_DC);
582: typedef const MYSQLND_FIELD * (*func_mysqlnd_res_meta__fetch_field_direct)(const MYSQLND_RES_METADATA * const meta, MYSQLND_FIELD_OFFSET fieldnr TSRMLS_DC);
583: typedef const MYSQLND_FIELD * (*func_mysqlnd_res_meta__fetch_fields)(MYSQLND_RES_METADATA * const meta TSRMLS_DC);
584: typedef MYSQLND_FIELD_OFFSET (*func_mysqlnd_res_meta__field_tell)(const MYSQLND_RES_METADATA * const meta TSRMLS_DC);
585: typedef enum_func_status (*func_mysqlnd_res_meta__read_metadata)(MYSQLND_RES_METADATA * const meta, MYSQLND * conn TSRMLS_DC);
586: typedef MYSQLND_RES_METADATA * (*func_mysqlnd_res_meta__clone_metadata)(const MYSQLND_RES_METADATA * const meta, zend_bool persistent TSRMLS_DC);
587: typedef void (*func_mysqlnd_res_meta__free_metadata)(MYSQLND_RES_METADATA * meta TSRMLS_DC);
588:
589: struct st_mysqlnd_res_meta_methods
590: {
591: func_mysqlnd_res_meta__fetch_field fetch_field;
592: func_mysqlnd_res_meta__fetch_field_direct fetch_field_direct;
593: func_mysqlnd_res_meta__fetch_fields fetch_fields;
594: func_mysqlnd_res_meta__field_tell field_tell;
595: func_mysqlnd_res_meta__read_metadata read_metadata;
596: func_mysqlnd_res_meta__clone_metadata clone_metadata;
597: func_mysqlnd_res_meta__free_metadata free_metadata;
598: };
599:
600:
601: typedef enum_func_status (*func_mysqlnd_stmt__prepare)(MYSQLND_STMT * const stmt, const char * const query, unsigned int query_len TSRMLS_DC);
602: typedef enum_func_status (*func_mysqlnd_stmt__execute)(MYSQLND_STMT * const stmt TSRMLS_DC);
603: typedef MYSQLND_RES * (*func_mysqlnd_stmt__use_result)(MYSQLND_STMT * const stmt TSRMLS_DC);
604: typedef MYSQLND_RES * (*func_mysqlnd_stmt__store_result)(MYSQLND_STMT * const stmt TSRMLS_DC);
605: typedef MYSQLND_RES * (*func_mysqlnd_stmt__get_result)(MYSQLND_STMT * const stmt TSRMLS_DC);
606: typedef zend_bool (*func_mysqlnd_stmt__more_results)(const MYSQLND_STMT * const stmt TSRMLS_DC);
607: typedef enum_func_status (*func_mysqlnd_stmt__next_result)(MYSQLND_STMT * const stmt TSRMLS_DC);
608: typedef enum_func_status (*func_mysqlnd_stmt__free_result)(MYSQLND_STMT * const stmt TSRMLS_DC);
609: typedef enum_func_status (*func_mysqlnd_stmt__seek_data)(const MYSQLND_STMT * const stmt, uint64_t row TSRMLS_DC);
610: typedef enum_func_status (*func_mysqlnd_stmt__reset)(MYSQLND_STMT * const stmt TSRMLS_DC);
611: typedef enum_func_status (*func_mysqlnd_stmt__net_close)(MYSQLND_STMT * const stmt, zend_bool implicit TSRMLS_DC); /* private */
612: typedef enum_func_status (*func_mysqlnd_stmt__dtor)(MYSQLND_STMT * const stmt, zend_bool implicit TSRMLS_DC); /* use this for mysqlnd_stmt_close */
613: typedef enum_func_status (*func_mysqlnd_stmt__fetch)(MYSQLND_STMT * const stmt, zend_bool * const fetched_anything TSRMLS_DC);
614: typedef enum_func_status (*func_mysqlnd_stmt__bind_parameters)(MYSQLND_STMT * const stmt, MYSQLND_PARAM_BIND * const param_bind TSRMLS_DC);
615: 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);
616: typedef enum_func_status (*func_mysqlnd_stmt__refresh_bind_param)(MYSQLND_STMT * const stmt TSRMLS_DC);
617: typedef enum_func_status (*func_mysqlnd_stmt__bind_result)(MYSQLND_STMT * const stmt, MYSQLND_RESULT_BIND * const result_bind TSRMLS_DC);
618: typedef enum_func_status (*func_mysqlnd_stmt__bind_one_result)(MYSQLND_STMT * const stmt, unsigned int param_no TSRMLS_DC);
619: 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);
620: typedef MYSQLND_RES * (*func_mysqlnd_stmt__get_parameter_metadata)(MYSQLND_STMT * const stmt TSRMLS_DC);
621: typedef MYSQLND_RES * (*func_mysqlnd_stmt__get_result_metadata)(MYSQLND_STMT * const stmt TSRMLS_DC);
622: typedef uint64_t (*func_mysqlnd_stmt__get_last_insert_id)(const MYSQLND_STMT * const stmt TSRMLS_DC);
623: typedef uint64_t (*func_mysqlnd_stmt__get_affected_rows)(const MYSQLND_STMT * const stmt TSRMLS_DC);
624: typedef uint64_t (*func_mysqlnd_stmt__get_num_rows)(const MYSQLND_STMT * const stmt TSRMLS_DC);
625: typedef unsigned int (*func_mysqlnd_stmt__get_param_count)(const MYSQLND_STMT * const stmt TSRMLS_DC);
626: typedef unsigned int (*func_mysqlnd_stmt__get_field_count)(const MYSQLND_STMT * const stmt TSRMLS_DC);
627: typedef unsigned int (*func_mysqlnd_stmt__get_warning_count)(const MYSQLND_STMT * const stmt TSRMLS_DC);
628: typedef unsigned int (*func_mysqlnd_stmt__get_error_no)(const MYSQLND_STMT * const stmt TSRMLS_DC);
629: typedef const char * (*func_mysqlnd_stmt__get_error_str)(const MYSQLND_STMT * const stmt TSRMLS_DC);
630: typedef const char * (*func_mysqlnd_stmt__get_sqlstate)(const MYSQLND_STMT * const stmt TSRMLS_DC);
631: 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);
632: 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);
633: typedef MYSQLND_PARAM_BIND *(*func_mysqlnd_stmt__alloc_param_bind)(MYSQLND_STMT * const stmt TSRMLS_DC);
634: typedef MYSQLND_RESULT_BIND*(*func_mysqlnd_stmt__alloc_result_bind)(MYSQLND_STMT * const stmt TSRMLS_DC);
635: typedef void (*func_mysqlnd_stmt__free_parameter_bind)(MYSQLND_STMT * const stmt, MYSQLND_PARAM_BIND * TSRMLS_DC);
636: typedef void (*func_mysqlnd_stmt__free_result_bind)(MYSQLND_STMT * const stmt, MYSQLND_RESULT_BIND * TSRMLS_DC);
637: typedef unsigned int (*func_mysqlnd_stmt__server_status)(const MYSQLND_STMT * const stmt TSRMLS_DC);
638: 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);
639: typedef enum_func_status (*func_mysqlnd_stmt__parse_execute_response)(MYSQLND_STMT * const s TSRMLS_DC);
640: typedef void (*func_mysqlnd_stmt__free_stmt_content)(MYSQLND_STMT * const s TSRMLS_DC);
641:
642: struct st_mysqlnd_stmt_methods
643: {
644: func_mysqlnd_stmt__prepare prepare;
645: func_mysqlnd_stmt__execute execute;
646: func_mysqlnd_stmt__use_result use_result;
647: func_mysqlnd_stmt__store_result store_result;
648: func_mysqlnd_stmt__get_result get_result;
649: func_mysqlnd_stmt__more_results more_results;
650: func_mysqlnd_stmt__next_result next_result;
651: func_mysqlnd_stmt__free_result free_result;
652: func_mysqlnd_stmt__seek_data seek_data;
653: func_mysqlnd_stmt__reset reset;
654: func_mysqlnd_stmt__net_close net_close;
655: func_mysqlnd_stmt__dtor dtor;
656: func_mysqlnd_stmt__fetch fetch;
657:
658: func_mysqlnd_stmt__bind_parameters bind_parameters;
659: func_mysqlnd_stmt__bind_one_parameter bind_one_parameter;
660: func_mysqlnd_stmt__refresh_bind_param refresh_bind_param;
661: func_mysqlnd_stmt__bind_result bind_result;
662: func_mysqlnd_stmt__bind_one_result bind_one_result;
663: func_mysqlnd_stmt__send_long_data send_long_data;
664: func_mysqlnd_stmt__get_parameter_metadata get_parameter_metadata;
665: func_mysqlnd_stmt__get_result_metadata get_result_metadata;
666:
667: func_mysqlnd_stmt__get_last_insert_id get_last_insert_id;
668: func_mysqlnd_stmt__get_affected_rows get_affected_rows;
669: func_mysqlnd_stmt__get_num_rows get_num_rows;
670:
671: func_mysqlnd_stmt__get_param_count get_param_count;
672: func_mysqlnd_stmt__get_field_count get_field_count;
673: func_mysqlnd_stmt__get_warning_count get_warning_count;
674:
675: func_mysqlnd_stmt__get_error_no get_error_no;
676: func_mysqlnd_stmt__get_error_str get_error_str;
677: func_mysqlnd_stmt__get_sqlstate get_sqlstate;
678:
679: func_mysqlnd_stmt__get_attribute get_attribute;
680: func_mysqlnd_stmt__set_attribute set_attribute;
681:
682: func_mysqlnd_stmt__alloc_param_bind alloc_parameter_bind;
683: func_mysqlnd_stmt__alloc_result_bind alloc_result_bind;
684:
685: func_mysqlnd_stmt__free_parameter_bind free_parameter_bind;
686: func_mysqlnd_stmt__free_result_bind free_result_bind;
687:
688: func_mysqlnd_stmt__server_status get_server_status;
689:
690: func_mysqlnd_stmt__generate_execute_request generate_execute_request;
691: func_mysqlnd_stmt__parse_execute_response parse_execute_response;
692:
693: func_mysqlnd_stmt__free_stmt_content free_stmt_content;
694: };
695:
696:
697: struct st_mysqlnd_net
698: {
699: php_stream *stream;
700: struct st_mysqlnd_net_methods m;
701:
702: /* sequence for simple checking of correct packets */
703: zend_uchar packet_no;
704: zend_bool compressed;
705: zend_uchar compressed_envelope_packet_no;
706: #ifdef MYSQLND_COMPRESSION_ENABLED
707: MYSQLND_READ_BUFFER * uncompressed_data;
708: #endif
709: #ifdef MYSQLND_DO_WIRE_CHECK_BEFORE_COMMAND
710: zend_uchar last_command;
711: #endif
712: /* cmd buffer */
713: MYSQLND_CMD_BUFFER cmd_buffer;
714:
715: MYSQLND_NET_OPTIONS options;
716:
717: zend_bool persistent;
718: };
719:
720:
721: struct st_mysqlnd_protocol
722: {
723: struct st_mysqlnd_protocol_methods m;
724: zend_bool persistent;
725: };
726:
727:
728: struct st_mysqlnd_connection
729: {
730: /* Operation related */
731: MYSQLND_NET * net;
732: MYSQLND_PROTOCOL * protocol;
733:
734: /* Information related */
735: char *host;
736: unsigned int host_len;
737: char *unix_socket;
738: unsigned int unix_socket_len;
739: char *user;
740: unsigned int user_len;
741: char *passwd;
742: unsigned int passwd_len;
743: char *scheme;
744: unsigned int scheme_len;
745: uint64_t thread_id;
746: char *server_version;
747: char *host_info;
748: unsigned char *scramble;
749: const MYSQLND_CHARSET *charset;
750: const MYSQLND_CHARSET *greet_charset;
751: char *connect_or_select_db;
752: unsigned int connect_or_select_db_len;
753: MYSQLND_INFILE infile;
754: unsigned int protocol_version;
755: unsigned long max_packet_size;
756: unsigned int port;
757: unsigned long client_flag;
758: unsigned long server_capabilities;
759:
760: /* For UPSERT queries */
761: MYSQLND_UPSERT_STATUS upsert_status;
762: char *last_message;
763: unsigned int last_message_len;
764:
765: /* If error packet, we use these */
766: MYSQLND_ERROR_INFO error_info;
767:
768: /*
769: To prevent queries during unbuffered fetches. Also to
770: mark the connection as destroyed for garbage collection.
771: */
772: enum mysqlnd_connection_state state;
773: enum_mysqlnd_query_type last_query_type;
774: /* Temporary storage between query and (use|store)_result() call */
775: MYSQLND_RES *current_result;
776:
777: /*
778: How many result sets reference this connection.
779: It won't be freed until this number reaches 0.
780: The last one, please close the door! :-)
781: The result set objects can determine by inspecting
782: 'quit_sent' whether the connection is still valid.
783: */
784: unsigned int refcount;
785:
786: /* Temporal storage for mysql_query */
787: unsigned int field_count;
788:
789: /* persistent connection */
790: zend_bool persistent;
791:
792: /* options */
793: MYSQLND_OPTIONS options;
794:
795: /* stats */
796: MYSQLND_STATS * stats;
797:
798: struct st_mysqlnd_conn_methods *m;
799: };
800:
801:
802: struct mysqlnd_field_hash_key
803: {
804: zend_bool is_numeric;
805: unsigned long key;
806: #if MYSQLND_UNICODE
807: zstr ustr;
808: unsigned int ulen;
809: #endif
810: };
811:
812:
813: struct st_mysqlnd_result_metadata
814: {
815: MYSQLND_FIELD *fields;
816: struct mysqlnd_field_hash_key *zend_hash_keys;
817: unsigned int current_field;
818: unsigned int field_count;
819: /* We need this to make fast allocs in rowp_read */
820: unsigned int bit_fields_count;
821: size_t bit_fields_total_len; /* trailing \0 not counted */
822: zend_bool persistent;
823:
824: struct st_mysqlnd_res_meta_methods *m;
825: };
826:
827:
828: struct st_mysqlnd_buffered_result
829: {
830: zval **data;
831: zval **data_cursor;
832: MYSQLND_MEMORY_POOL_CHUNK **row_buffers;
833: uint64_t row_count;
834: uint64_t initialized_rows;
835: zend_bool persistent;
836:
837: unsigned int references;
838:
839: MYSQLND_ERROR_INFO error_info;
840: };
841:
842:
843: struct st_mysqlnd_unbuffered_result
844: {
845: /* For unbuffered (both normal and PS) */
846: zval **last_row_data;
847: MYSQLND_MEMORY_POOL_CHUNK *last_row_buffer;
848:
849: uint64_t row_count;
850: zend_bool eof_reached;
851: };
852:
853:
854: struct st_mysqlnd_res
855: {
856: struct st_mysqlnd_res_methods m;
857:
858: MYSQLND *conn;
859: enum_mysqlnd_res_type type;
860: unsigned int field_count;
861:
862: /* For metadata functions */
863: MYSQLND_RES_METADATA *meta;
864:
865: /* To be used with store_result() - both normal and PS */
866: MYSQLND_RES_BUFFERED *stored_data;
867: MYSQLND_RES_UNBUFFERED *unbuf;
868:
869: /*
870: Column lengths of current row - both buffered and unbuffered.
871: For buffered results it duplicates the data found in **data
872: */
873: unsigned long *lengths;
874:
875: struct st_mysqlnd_packet_row * row_packet;
876:
877: MYSQLND_MEMORY_POOL * result_set_memory_pool;
878: zend_bool persistent;
879: };
880:
881:
882: struct st_mysqlnd_param_bind
883: {
884: zval *zv;
885: zend_uchar type;
886: enum_param_bind_flags flags;
887: };
888:
889: struct st_mysqlnd_result_bind
890: {
891: zval *zv;
892: zend_bool bound;
893: };
894:
895:
896: struct st_mysqlnd_stmt_data
897: {
898: MYSQLND *conn;
899: unsigned long stmt_id;
900: unsigned long flags;/* cursor is set here */
901: enum_mysqlnd_stmt_state state;
902: unsigned int warning_count;
903: MYSQLND_RES *result;
904: unsigned int field_count;
905: unsigned int param_count;
906: unsigned char send_types_to_server;
907: MYSQLND_PARAM_BIND *param_bind;
908: MYSQLND_RESULT_BIND *result_bind;
909: zend_bool result_zvals_separated_once;
910: zend_bool persistent;
911:
912: MYSQLND_UPSERT_STATUS upsert_status;
913:
914: MYSQLND_ERROR_INFO error_info;
915:
916: zend_bool update_max_length;
917: unsigned long prefetch_rows;
918:
919: zend_bool cursor_exists;
920: mysqlnd_stmt_use_or_store_func default_rset_handler;
921:
922: MYSQLND_CMD_BUFFER execute_cmd_buffer;
923: unsigned int execute_count;/* count how many times the stmt was executed */
924: };
925:
926:
927: struct st_mysqlnd_stmt
928: {
929: MYSQLND_STMT_DATA * data;
930: struct st_mysqlnd_stmt_methods *m;
931: zend_bool persistent;
932: };
933:
934: #endif /* MYSQLND_STRUCTS_H */
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>