Annotation of embedaddon/php/ext/mysqlnd/mysqlnd_structs.h, revision 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>