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>