root/ext/mysqlnd/mysqlnd_structs.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


   1 /*
   2   +----------------------------------------------------------------------+
   3   | PHP Version 7                                                        |
   4   +----------------------------------------------------------------------+
   5   | Copyright (c) 2006-2016 The PHP Group                                |
   6   +----------------------------------------------------------------------+
   7   | This source file is subject to version 3.01 of the PHP license,      |
   8   | that is bundled with this package in the file LICENSE, and is        |
   9   | available through the world-wide-web at the following url:           |
  10   | http://www.php.net/license/3_01.txt                                  |
  11   | If you did not receive a copy of the PHP license and are unable to   |
  12   | obtain it through the world-wide-web, please send a note to          |
  13   | license@php.net so we can mail you a copy immediately.               |
  14   +----------------------------------------------------------------------+
  15   | Authors: Andrey Hristov <andrey@mysql.com>                           |
  16   |          Ulf Wendel <uwendel@mysql.com>                              |
  17   |          Georg Richter <georg@mysql.com>                             |
  18   +----------------------------------------------------------------------+
  19 */
  20 
  21 /* $Id$ */
  22 
  23 #ifndef MYSQLND_STRUCTS_H
  24 #define MYSQLND_STRUCTS_H
  25 
  26 #include "zend_smart_str_public.h"
  27 
  28 #define MYSQLND_TYPEDEFED_METHODS
  29 
  30 #define MYSQLND_CLASS_METHOD_TABLE_NAME(class) mysqlnd_##class##_methods
  31 #define MYSQLND_CLASS_METHOD_TABLE_NAME_FORWARD(class) struct st_##class##_methods MYSQLND_CLASS_METHOD_TABLE_NAME(class)
  32 
  33 #define MYSQLND_CLASS_METHODS_START(class)      MYSQLND_CLASS_METHOD_TABLE_NAME_FORWARD(class) = {
  34 #define MYSQLND_CLASS_METHODS_END                       }
  35 
  36 
  37 typedef struct st_mysqlnd_memory_pool MYSQLND_MEMORY_POOL;
  38 typedef struct st_mysqlnd_memory_pool_chunk MYSQLND_MEMORY_POOL_CHUNK;
  39 typedef struct st_mysqlnd_memory_pool_chunk_llist MYSQLND_MEMORY_POOL_CHUNK_LLIST;
  40 
  41 
  42 #define MYSQLND_MEMORY_POOL_CHUNK_LIST_SIZE 100
  43 
  44 struct st_mysqlnd_memory_pool
  45 {
  46         zend_uchar *arena;
  47         unsigned int refcount;
  48         unsigned int arena_size;
  49         unsigned int free_size;
  50 
  51         MYSQLND_MEMORY_POOL_CHUNK*      (*get_chunk)(MYSQLND_MEMORY_POOL * pool, unsigned int size);
  52 };
  53 
  54 struct st_mysqlnd_memory_pool_chunk
  55 {
  56         size_t                          app;
  57         MYSQLND_MEMORY_POOL     *pool;
  58         zend_uchar                      *ptr;
  59         enum_func_status        (*resize_chunk)(MYSQLND_MEMORY_POOL_CHUNK * chunk, unsigned int size);
  60         void                            (*free_chunk)(MYSQLND_MEMORY_POOL_CHUNK * chunk);
  61         unsigned int            size;
  62         zend_bool                       from_pool;
  63 };
  64 
  65 
  66 typedef struct st_mysqlnd_cmd_buffer
  67 {
  68         zend_uchar              *buffer;
  69         size_t                  length;
  70 } MYSQLND_CMD_BUFFER;
  71 
  72 
  73 typedef struct st_mysqlnd_field
  74 {
  75         zend_string *sname;                     /* Name of column */
  76         const char  *name;          /* Name of column in C string */
  77         const char  *org_name;          /* Original column name, if an alias */
  78         const char  *table;                     /* Table of column if column was a field */
  79         const char  *org_table;         /* Org table name, if table was an alias */
  80         const char  *db;                        /* Database for table */
  81         const char  *catalog;           /* Catalog for table */
  82         char  *def;                 /* Default value (set by mysql_list_fields) */
  83         zend_ulong length;              /* Width of column (create length) */
  84         zend_ulong max_length;  /* Max width for selected set */
  85         unsigned int name_length;
  86         unsigned int org_name_length;
  87         unsigned int table_length;
  88         unsigned int org_table_length;
  89         unsigned int db_length;
  90         unsigned int catalog_length;
  91         unsigned int def_length;
  92         unsigned int flags;                     /* Diverse flags */
  93         unsigned int decimals;          /* Number of decimals in field */
  94         unsigned int charsetnr;         /* Character set */
  95         enum mysqlnd_field_types type;  /* Type of field. See mysql_com.h for types */
  96         char *root;
  97         size_t root_len;
  98 } MYSQLND_FIELD;
  99 
 100 
 101 typedef struct st_mysqlnd_upsert_result
 102 {
 103         unsigned int    warning_count;
 104         unsigned int    server_status;
 105         uint64_t                affected_rows;
 106         uint64_t                last_insert_id;
 107 } MYSQLND_UPSERT_STATUS;
 108 
 109 
 110 typedef struct st_mysqlnd_error_info
 111 {
 112         char error[MYSQLND_ERRMSG_SIZE+1];
 113         char sqlstate[MYSQLND_SQLSTATE_LENGTH + 1];
 114         unsigned int error_no;
 115         zend_llist * error_list;
 116 } MYSQLND_ERROR_INFO;
 117 
 118 
 119 typedef struct st_mysqlnd_error_list_element
 120 {
 121         char * error;
 122         char sqlstate[MYSQLND_SQLSTATE_LENGTH + 1];
 123         unsigned int error_no;
 124 } MYSQLND_ERROR_LIST_ELEMENT;
 125 
 126 
 127 typedef struct st_mysqlnd_infile_info
 128 {
 129         php_stream      *fd;
 130         int                     error_no;
 131         char            error_msg[MYSQLND_ERRMSG_SIZE + 1];
 132         const char      *filename;
 133 } MYSQLND_INFILE_INFO;
 134 
 135 
 136 /* character set information */
 137 typedef struct st_mysqlnd_charset
 138 {
 139         unsigned int    nr;
 140         const char              *name;
 141         const char              *collation;
 142         unsigned int    char_minlen;
 143         unsigned int    char_maxlen;
 144         const char              *comment;
 145         unsigned int    (*mb_charlen)(unsigned int c);
 146         unsigned int    (*mb_valid)(const char *start, const char *end);
 147 } MYSQLND_CHARSET;
 148 
 149 
 150 /* local infile handler */
 151 typedef struct st_mysqlnd_infile
 152 {
 153         int             (*local_infile_init)(void **ptr, const char * const filename);
 154         int             (*local_infile_read)(void *ptr, zend_uchar * buf, unsigned int buf_len);
 155         int             (*local_infile_error)(void *ptr, char * error_msg, unsigned int error_msg_len);
 156         void    (*local_infile_end)(void *ptr);
 157 } MYSQLND_INFILE;
 158 
 159 typedef struct st_mysqlnd_options
 160 {
 161         ulong           flags;
 162 
 163         /* init commands - we need to send them to server directly after connect */
 164         unsigned int    num_commands;
 165         char                    **init_commands;
 166 
 167         /* configuration file information */
 168         char            *cfg_file;
 169         char            *cfg_section;
 170 
 171         char            *auth_protocol;
 172         /*
 173           We need to keep these because otherwise st_mysqlnd_conn will be changed.
 174           The ABI will be broken and the methods structure will be somewhere else
 175           in the memory which can crash external code. Feel free to reuse these.
 176         */
 177         HashTable       * connect_attr;
 178         char            * unused3;
 179         char            * unused4;
 180         char            * unused5;
 181 
 182         enum_mysqlnd_protocol_type protocol;
 183 
 184         char            *charset_name;
 185         /* maximum allowed packet size for communication */
 186         ulong           max_allowed_packet;
 187 
 188 #ifdef MYSQLND_STRING_TO_INT_CONVERSION
 189         zend_bool       int_and_float_native;
 190 #endif
 191 } MYSQLND_OPTIONS;
 192 
 193 typedef struct st_mysqlnd_net_options
 194 {
 195         /* timeouts */
 196         unsigned int timeout_connect;
 197         unsigned int timeout_read;
 198         unsigned int timeout_write;
 199 
 200         size_t          net_read_buffer_size;
 201 
 202         /* SSL information */
 203         char            *ssl_key;
 204         char            *ssl_cert;
 205         char            *ssl_ca;
 206         char            *ssl_capath;
 207         char            *ssl_cipher;
 208         char            *ssl_passphrase;
 209         enum mysqlnd_ssl_peer {
 210                 MYSQLND_SSL_PEER_DEFAULT = 0,
 211                 MYSQLND_SSL_PEER_VERIFY = 1,
 212                 MYSQLND_SSL_PEER_DONT_VERIFY = 2,
 213 
 214 #define MYSQLND_SSL_PEER_DEFAULT_ACTION  MYSQLND_SSL_PEER_VERIFY
 215         } ssl_verify_peer;
 216         uint64_t        flags;
 217 
 218         char *          sha256_server_public_key;
 219 
 220         char *          unused1;
 221         char *          unused2;
 222         char *          unused3;
 223         char *          unused4;
 224 } MYSQLND_NET_OPTIONS;
 225 
 226 
 227 
 228 typedef struct st_mysqlnd_connection MYSQLND;
 229 typedef struct st_mysqlnd_connection_data MYSQLND_CONN_DATA;
 230 typedef struct st_mysqlnd_net   MYSQLND_NET;
 231 typedef struct st_mysqlnd_net_data      MYSQLND_NET_DATA;
 232 typedef struct st_mysqlnd_protocol      MYSQLND_PROTOCOL;
 233 typedef struct st_mysqlnd_res   MYSQLND_RES;
 234 typedef char**                                  MYSQLND_ROW_C;          /* return data as array of strings */
 235 typedef struct st_mysqlnd_stmt_data     MYSQLND_STMT_DATA;
 236 typedef struct st_mysqlnd_stmt  MYSQLND_STMT;
 237 typedef unsigned int                    MYSQLND_FIELD_OFFSET;
 238 
 239 typedef struct st_mysqlnd_param_bind MYSQLND_PARAM_BIND;
 240 
 241 typedef struct st_mysqlnd_result_bind MYSQLND_RESULT_BIND;
 242 
 243 typedef struct st_mysqlnd_result_metadata MYSQLND_RES_METADATA;
 244 typedef struct st_mysqlnd_buffered_result_parent MYSQLND_RES_BUFFERED;
 245 typedef struct st_mysqlnd_buffered_result_zval MYSQLND_RES_BUFFERED_ZVAL;
 246 typedef struct st_mysqlnd_buffered_result_c MYSQLND_RES_BUFFERED_C;
 247 typedef struct st_mysqlnd_unbuffered_result MYSQLND_RES_UNBUFFERED;
 248 
 249 typedef struct st_mysqlnd_debug MYSQLND_DEBUG;
 250 
 251 
 252 typedef MYSQLND_RES* (*mysqlnd_stmt_use_or_store_func)(MYSQLND_STMT * const);
 253 typedef enum_func_status  (*mysqlnd_fetch_row_func)(MYSQLND_RES *result,
 254                                                                                                         void * param,
 255                                                                                                         const unsigned int flags,
 256                                                                                                         zend_bool * fetched_anything
 257                                                                                                         );
 258 
 259 
 260 typedef struct st_mysqlnd_stats MYSQLND_STATS;
 261 
 262 typedef void (*mysqlnd_stat_trigger)(MYSQLND_STATS * stats, enum_mysqlnd_collected_stats stat, int64_t change);
 263 
 264 struct st_mysqlnd_stats
 265 {
 266         uint64_t                                *values;
 267         mysqlnd_stat_trigger    *triggers;
 268         size_t                                  count;
 269         zend_bool                               in_trigger;
 270 #ifdef ZTS
 271         MUTEX_T LOCK_access;
 272 #endif
 273 };
 274 
 275 
 276 typedef struct st_mysqlnd_read_buffer {
 277         zend_uchar      * data;
 278         size_t          offset;
 279         size_t          size;
 280         size_t          len;
 281         zend_bool       (*is_empty)(struct st_mysqlnd_read_buffer *);
 282         void            (*read)(struct st_mysqlnd_read_buffer *, size_t count, zend_uchar * dest);
 283         size_t          (*bytes_left)(struct st_mysqlnd_read_buffer *);
 284         void            (*free_buffer)(struct st_mysqlnd_read_buffer **);
 285 } MYSQLND_READ_BUFFER;
 286 
 287 
 288 
 289 typedef enum_func_status        (*func_mysqlnd_net__set_client_option)(MYSQLND_NET * const net, enum_mysqlnd_option option, const char * const value);
 290 typedef enum_func_status        (*func_mysqlnd_net__decode)(zend_uchar * uncompressed_data, const size_t uncompressed_data_len, const zend_uchar * const compressed_data, const size_t compressed_data_len);
 291 typedef enum_func_status        (*func_mysqlnd_net__encode)(zend_uchar * compress_buffer, size_t * compress_buffer_len, const zend_uchar * const uncompressed_data, const size_t uncompressed_data_len);
 292 typedef size_t                          (*func_mysqlnd_net__consume_uneaten_data)(MYSQLND_NET * const net, enum php_mysqlnd_server_command cmd);
 293 typedef void                            (*func_mysqlnd_net__free_contents)(MYSQLND_NET * net);
 294 typedef enum_func_status        (*func_mysqlnd_net__enable_ssl)(MYSQLND_NET * const net);
 295 typedef enum_func_status        (*func_mysqlnd_net__disable_ssl)(MYSQLND_NET * const net);
 296 typedef enum_func_status        (*func_mysqlnd_net__network_read_ex)(MYSQLND_NET * const net, zend_uchar * const buffer, const size_t count, MYSQLND_STATS * const stats, MYSQLND_ERROR_INFO * const error_info);
 297 typedef size_t                          (*func_mysqlnd_net__network_write_ex)(MYSQLND_NET * const net, const zend_uchar * const buf, const size_t count, MYSQLND_STATS * const stats, MYSQLND_ERROR_INFO * const error_info);
 298 typedef size_t                          (*func_mysqlnd_net__send_ex)(MYSQLND_NET * const net, zend_uchar * const buffer, const size_t count, MYSQLND_STATS * const conn_stats, MYSQLND_ERROR_INFO * const error_info);
 299 typedef enum_func_status        (*func_mysqlnd_net__receive_ex)(MYSQLND_NET * const net, zend_uchar * const buffer, const size_t count, MYSQLND_STATS * const conn_stats, MYSQLND_ERROR_INFO * const error_info);
 300 typedef enum_func_status        (*func_mysqlnd_net__init)(MYSQLND_NET * const net, MYSQLND_STATS * const stats, MYSQLND_ERROR_INFO * const error_info);
 301 typedef void                            (*func_mysqlnd_net__dtor)(MYSQLND_NET * const net, MYSQLND_STATS * const conn_stats, MYSQLND_ERROR_INFO * const error_info);
 302 typedef enum_func_status        (*func_mysqlnd_net__connect_ex)(MYSQLND_NET * const net, const char * const scheme, const size_t scheme_len, const zend_bool persistent, MYSQLND_STATS * const conn_stats, MYSQLND_ERROR_INFO * const error_info);
 303 typedef void                            (*func_mysqlnd_net__close_stream)(MYSQLND_NET * const net, MYSQLND_STATS * const conn_stats, MYSQLND_ERROR_INFO * const error_info);
 304 typedef php_stream *            (*func_mysqlnd_net__open_stream)(MYSQLND_NET * const net, const char * const scheme, const size_t scheme_len, const zend_bool persistent, MYSQLND_STATS * const conn_stats, MYSQLND_ERROR_INFO * const error_info);
 305 typedef php_stream *            (*func_mysqlnd_net__get_stream)(const MYSQLND_NET * const net);
 306 typedef php_stream *            (*func_mysqlnd_net__set_stream)(MYSQLND_NET * const net, php_stream * net_stream);
 307 typedef func_mysqlnd_net__open_stream (*func_mysqlnd_net__get_open_stream)(MYSQLND_NET * const net, const char * const scheme, const size_t scheme_len, MYSQLND_ERROR_INFO * const error_info);
 308 typedef void                            (*func_mysqlnd_net__post_connect_set_opt)(MYSQLND_NET * const net, const char * const scheme, const size_t scheme_len, MYSQLND_STATS * const conn_stats, MYSQLND_ERROR_INFO * const error_info);
 309 typedef enum_func_status        (*func_mysqlnd_net__read_compressed_packet_from_stream_and_fill_read_buffer)(MYSQLND_NET * net, size_t net_payload_size, MYSQLND_STATS * conn_stats, MYSQLND_ERROR_INFO * error_info);
 310 
 311 struct st_mysqlnd_net_methods
 312 {
 313         func_mysqlnd_net__init init;
 314         func_mysqlnd_net__dtor dtor;
 315         func_mysqlnd_net__connect_ex connect_ex;
 316         func_mysqlnd_net__close_stream close_stream;
 317         func_mysqlnd_net__open_stream open_pipe;
 318         func_mysqlnd_net__open_stream open_tcp_or_unix;
 319 
 320         func_mysqlnd_net__get_stream get_stream;
 321         func_mysqlnd_net__set_stream set_stream;
 322         func_mysqlnd_net__get_open_stream get_open_stream;
 323 
 324         func_mysqlnd_net__post_connect_set_opt post_connect_set_opt;
 325 
 326         func_mysqlnd_net__set_client_option set_client_option;
 327         func_mysqlnd_net__decode decode;
 328         func_mysqlnd_net__encode encode;
 329         func_mysqlnd_net__consume_uneaten_data consume_uneaten_data;
 330         func_mysqlnd_net__free_contents free_contents;
 331         func_mysqlnd_net__enable_ssl enable_ssl;
 332         func_mysqlnd_net__disable_ssl disable_ssl;
 333 
 334         func_mysqlnd_net__network_read_ex network_read_ex;
 335         func_mysqlnd_net__network_write_ex network_write_ex;
 336         func_mysqlnd_net__send_ex send_ex;
 337         func_mysqlnd_net__receive_ex receive_ex;
 338 
 339         func_mysqlnd_net__read_compressed_packet_from_stream_and_fill_read_buffer read_compressed_packet_from_stream_and_fill_read_buffer;
 340 
 341         void * unused1;
 342         void * unused2;
 343         void * unused3;
 344         void * unused4;
 345         void * unused5;
 346 };
 347 
 348 
 349 struct st_mysqlnd_packet_greet;
 350 struct st_mysqlnd_packet_greet;
 351 struct st_mysqlnd_packet_auth;
 352 struct st_mysqlnd_packet_ok;
 353 struct st_mysqlnd_packet_command;
 354 struct st_mysqlnd_packet_eof;
 355 struct st_mysqlnd_packet_rset_header;
 356 struct st_mysqlnd_packet_res_field;
 357 struct st_mysqlnd_packet_row;
 358 struct st_mysqlnd_packet_stats;
 359 struct st_mysqlnd_packet_prepare_response;
 360 struct st_mysqlnd_packet_chg_user_resp;
 361 struct st_mysqlnd_packet_auth_pam;
 362 struct st_mysqlnd_packet_sha256_pk_request;
 363 struct st_mysqlnd_packet_sha256_pk_request_response;
 364 
 365 typedef struct st_mysqlnd_packet_greet *                (*func_mysqlnd_protocol__get_greet_packet)(MYSQLND_PROTOCOL * const protocol, zend_bool persistent);
 366 typedef struct st_mysqlnd_packet_auth *                 (*func_mysqlnd_protocol__get_auth_packet)(MYSQLND_PROTOCOL * const protocol, zend_bool persistent);
 367 typedef struct st_mysqlnd_packet_auth_response *(*func_mysqlnd_protocol__get_auth_response_packet)(MYSQLND_PROTOCOL * const protocol, zend_bool persistent);
 368 typedef struct st_mysqlnd_packet_change_auth_response * (*func_mysqlnd_protocol__get_change_auth_response_packet)(MYSQLND_PROTOCOL * const protocol, zend_bool persistent);
 369 typedef struct st_mysqlnd_packet_ok *                   (*func_mysqlnd_protocol__get_ok_packet)(MYSQLND_PROTOCOL * const protocol, zend_bool persistent);
 370 typedef struct st_mysqlnd_packet_command *              (*func_mysqlnd_protocol__get_command_packet)(MYSQLND_PROTOCOL * const protocol, zend_bool persistent);
 371 typedef struct st_mysqlnd_packet_eof *                  (*func_mysqlnd_protocol__get_eof_packet)(MYSQLND_PROTOCOL * const protocol, zend_bool persistent);
 372 typedef struct st_mysqlnd_packet_rset_header *  (*func_mysqlnd_protocol__get_rset_header_packet)(MYSQLND_PROTOCOL * const protocol, zend_bool persistent);
 373 typedef struct st_mysqlnd_packet_res_field *    (*func_mysqlnd_protocol__get_result_field_packet)(MYSQLND_PROTOCOL * const protocol, zend_bool persistent);
 374 typedef struct st_mysqlnd_packet_row *                  (*func_mysqlnd_protocol__get_row_packet)(MYSQLND_PROTOCOL * const protocol, zend_bool persistent);
 375 typedef struct st_mysqlnd_packet_stats *                (*func_mysqlnd_protocol__get_stats_packet)(MYSQLND_PROTOCOL * const protocol, zend_bool persistent);
 376 typedef struct st_mysqlnd_packet_prepare_response *(*func_mysqlnd_protocol__get_prepare_response_packet)(MYSQLND_PROTOCOL * const protocol, zend_bool persistent);
 377 typedef struct st_mysqlnd_packet_chg_user_resp*(*func_mysqlnd_protocol__get_change_user_response_packet)(MYSQLND_PROTOCOL * const protocol, zend_bool persistent);
 378 typedef struct st_mysqlnd_packet_sha256_pk_request *(*func_mysqlnd_protocol__get_sha256_pk_request_packet)(MYSQLND_PROTOCOL * const protocol, zend_bool persistent);
 379 typedef struct st_mysqlnd_packet_sha256_pk_request_response *(*func_mysqlnd_protocol__get_sha256_pk_request_response_packet)(MYSQLND_PROTOCOL * const protocol, zend_bool persistent);
 380 
 381 struct st_mysqlnd_protocol_methods
 382 {
 383         func_mysqlnd_protocol__get_greet_packet get_greet_packet;
 384         func_mysqlnd_protocol__get_auth_packet get_auth_packet;
 385         func_mysqlnd_protocol__get_auth_response_packet get_auth_response_packet;
 386         func_mysqlnd_protocol__get_change_auth_response_packet get_change_auth_response_packet;
 387         func_mysqlnd_protocol__get_ok_packet get_ok_packet;
 388         func_mysqlnd_protocol__get_command_packet get_command_packet;
 389         func_mysqlnd_protocol__get_eof_packet get_eof_packet;
 390         func_mysqlnd_protocol__get_rset_header_packet get_rset_header_packet;
 391         func_mysqlnd_protocol__get_result_field_packet get_result_field_packet;
 392         func_mysqlnd_protocol__get_row_packet get_row_packet;
 393         func_mysqlnd_protocol__get_stats_packet get_stats_packet;
 394         func_mysqlnd_protocol__get_prepare_response_packet get_prepare_response_packet;
 395         func_mysqlnd_protocol__get_change_user_response_packet get_change_user_response_packet;
 396         func_mysqlnd_protocol__get_sha256_pk_request_packet get_sha256_pk_request_packet;
 397         func_mysqlnd_protocol__get_sha256_pk_request_response_packet get_sha256_pk_request_response_packet;
 398 
 399         void * unused1;
 400         void * unused2;
 401         void * unused3;
 402 };
 403 
 404 
 405 typedef MYSQLND * (*func_mysqlnd_object_factory__get_connection)(zend_bool persistent);
 406 typedef MYSQLND * (*func_mysqlnd_object_factory__clone_connection_object)(MYSQLND * conn);
 407 typedef MYSQLND_STMT * (*func_mysqlnd_object_factory__get_prepared_statement)(MYSQLND_CONN_DATA * conn);
 408 typedef MYSQLND_NET * (*func_mysqlnd_object_factory__get_io_channel)(zend_bool persistent, MYSQLND_STATS * stats, MYSQLND_ERROR_INFO * error_info);
 409 typedef MYSQLND_PROTOCOL * (*func_mysqlnd_object_factory__get_protocol_decoder)(zend_bool persistent);
 410 
 411 
 412 struct st_mysqlnd_object_factory_methods
 413 {
 414         func_mysqlnd_object_factory__get_connection get_connection;
 415         func_mysqlnd_object_factory__clone_connection_object clone_connection_object;
 416         func_mysqlnd_object_factory__get_prepared_statement get_prepared_statement;
 417         func_mysqlnd_object_factory__get_io_channel get_io_channel;
 418         func_mysqlnd_object_factory__get_protocol_decoder get_protocol_decoder;
 419 };
 420 
 421 
 422 typedef enum_func_status        (*func_mysqlnd_conn_data__init)(MYSQLND_CONN_DATA * conn);
 423 typedef enum_func_status        (*func_mysqlnd_conn_data__connect)(MYSQLND_CONN_DATA * conn, const char * host, const char * user, const char * passwd, unsigned int passwd_len, const char * db, unsigned int db_len, unsigned int port, const char * socket_or_pipe, unsigned int mysql_flags);
 424 typedef zend_ulong                              (*func_mysqlnd_conn_data__escape_string)(MYSQLND_CONN_DATA * const conn, char *newstr, const char *escapestr, size_t escapestr_len);
 425 typedef enum_func_status        (*func_mysqlnd_conn_data__set_charset)(MYSQLND_CONN_DATA * const conn, const char * const charset);
 426 typedef enum_func_status        (*func_mysqlnd_conn_data__query)(MYSQLND_CONN_DATA * conn, const char * query, unsigned int query_len);
 427 typedef enum_func_status        (*func_mysqlnd_conn_data__send_query)(MYSQLND_CONN_DATA * conn, const char *query, unsigned int query_len, enum_mysqlnd_send_query_type type, zval *read_cb, zval *err_cb);
 428 typedef enum_func_status        (*func_mysqlnd_conn_data__reap_query)(MYSQLND_CONN_DATA * conn, enum_mysqlnd_reap_result_type type);
 429 typedef MYSQLND_RES *           (*func_mysqlnd_conn_data__use_result)(MYSQLND_CONN_DATA * const conn, const unsigned int flags);
 430 typedef MYSQLND_RES *           (*func_mysqlnd_conn_data__store_result)(MYSQLND_CONN_DATA * const conn, const unsigned int flags);
 431 typedef enum_func_status        (*func_mysqlnd_conn_data__next_result)(MYSQLND_CONN_DATA * const conn);
 432 typedef zend_bool                       (*func_mysqlnd_conn_data__more_results)(const MYSQLND_CONN_DATA * const conn);
 433 
 434 typedef MYSQLND_STMT *          (*func_mysqlnd_conn_data__stmt_init)(MYSQLND_CONN_DATA * const conn);
 435 
 436 typedef enum_func_status        (*func_mysqlnd_conn_data__shutdown_server)(MYSQLND_CONN_DATA * const conn, uint8_t level);
 437 typedef enum_func_status        (*func_mysqlnd_conn_data__refresh_server)(MYSQLND_CONN_DATA * const conn, uint8_t options);
 438 
 439 typedef enum_func_status        (*func_mysqlnd_conn_data__ping)(MYSQLND_CONN_DATA * const conn);
 440 typedef enum_func_status        (*func_mysqlnd_conn_data__kill_connection)(MYSQLND_CONN_DATA * conn, unsigned int pid);
 441 typedef enum_func_status        (*func_mysqlnd_conn_data__select_db)(MYSQLND_CONN_DATA * const conn, const char * const db, unsigned int db_len);
 442 typedef enum_func_status        (*func_mysqlnd_conn_data__server_dump_debug_information)(MYSQLND_CONN_DATA * const conn);
 443 typedef enum_func_status        (*func_mysqlnd_conn_data__change_user)(MYSQLND_CONN_DATA * const conn, const char * user, const char * passwd, const char * db, zend_bool silent, size_t passwd_len);
 444 
 445 typedef unsigned int            (*func_mysqlnd_conn_data__get_error_no)(const MYSQLND_CONN_DATA * const conn);
 446 typedef const char *            (*func_mysqlnd_conn_data__get_error_str)(const MYSQLND_CONN_DATA * const conn);
 447 typedef const char *            (*func_mysqlnd_conn_data__get_sqlstate)(const MYSQLND_CONN_DATA * const conn);
 448 typedef uint64_t                        (*func_mysqlnd_conn_data__get_thread_id)(const MYSQLND_CONN_DATA * const conn);
 449 typedef void                            (*func_mysqlnd_conn_data__get_statistics)(const MYSQLND_CONN_DATA * const conn, zval *return_value ZEND_FILE_LINE_DC);
 450 
 451 typedef zend_ulong              (*func_mysqlnd_conn_data__get_server_version)(const MYSQLND_CONN_DATA * const conn);
 452 typedef const char *            (*func_mysqlnd_conn_data__get_server_information)(const MYSQLND_CONN_DATA * const conn);
 453 typedef enum_func_status        (*func_mysqlnd_conn_data__get_server_statistics)(MYSQLND_CONN_DATA * conn, zend_string **message);
 454 typedef const char *            (*func_mysqlnd_conn_data__get_host_information)(const MYSQLND_CONN_DATA * const conn);
 455 typedef unsigned int            (*func_mysqlnd_conn_data__get_protocol_information)(const MYSQLND_CONN_DATA * const conn);
 456 typedef const char *            (*func_mysqlnd_conn_data__get_last_message)(const MYSQLND_CONN_DATA * const conn);
 457 typedef const char *            (*func_mysqlnd_conn_data__charset_name)(const MYSQLND_CONN_DATA * const conn);
 458 typedef MYSQLND_RES *           (*func_mysqlnd_conn_data__list_fields)(MYSQLND_CONN_DATA * conn, const char * table, const char * achtung_wild);
 459 typedef MYSQLND_RES *           (*func_mysqlnd_conn_data__list_method)(MYSQLND_CONN_DATA * conn, const char * query, const char * achtung_wild, char *par1);
 460 
 461 typedef uint64_t                        (*func_mysqlnd_conn_data__get_last_insert_id)(const MYSQLND_CONN_DATA * const conn);
 462 typedef uint64_t                        (*func_mysqlnd_conn_data__get_affected_rows)(const MYSQLND_CONN_DATA * const conn);
 463 typedef unsigned int            (*func_mysqlnd_conn_data__get_warning_count)(const MYSQLND_CONN_DATA * const conn);
 464 
 465 typedef unsigned int            (*func_mysqlnd_conn_data__get_field_count)(const MYSQLND_CONN_DATA * const conn);
 466 
 467 typedef unsigned int            (*func_mysqlnd_conn_data__get_server_status)(const MYSQLND_CONN_DATA * const conn);
 468 typedef enum_func_status        (*func_mysqlnd_conn_data__set_server_option)(MYSQLND_CONN_DATA * const conn, enum_mysqlnd_server_option option);
 469 typedef enum_func_status        (*func_mysqlnd_conn_data__set_client_option)(MYSQLND_CONN_DATA * const conn, enum_mysqlnd_option option, const char * const value);
 470 typedef void                            (*func_mysqlnd_conn_data__free_contents)(MYSQLND_CONN_DATA * conn);/* private */
 471 typedef void                            (*func_mysqlnd_conn_data__free_options)(MYSQLND_CONN_DATA * conn);      /* private */
 472 typedef void                            (*func_mysqlnd_conn_data__dtor)(MYSQLND_CONN_DATA * conn);      /* private */
 473 
 474 typedef enum_func_status        (*func_mysqlnd_conn_data__query_read_result_set_header)(MYSQLND_CONN_DATA * conn, MYSQLND_STMT * stmt);
 475 
 476 typedef MYSQLND_CONN_DATA *     (*func_mysqlnd_conn_data__get_reference)(MYSQLND_CONN_DATA * const conn);
 477 typedef enum_func_status        (*func_mysqlnd_conn_data__free_reference)(MYSQLND_CONN_DATA * const conn);
 478 typedef enum mysqlnd_connection_state (*func_mysqlnd_conn_data__get_state)(const MYSQLND_CONN_DATA * const conn);
 479 typedef void                            (*func_mysqlnd_conn_data__set_state)(MYSQLND_CONN_DATA * const conn, enum mysqlnd_connection_state new_state);
 480 
 481 typedef enum_func_status        (*func_mysqlnd_conn_data__simple_command)(MYSQLND_CONN_DATA * conn, enum php_mysqlnd_server_command command, const zend_uchar * const arg, size_t arg_len, enum mysqlnd_packet_type ok_packet, zend_bool silent, zend_bool ignore_upsert_status);
 482 typedef enum_func_status        (*func_mysqlnd_conn_data__simple_command_handle_response)(MYSQLND_CONN_DATA * conn, enum mysqlnd_packet_type ok_packet, zend_bool silent, enum php_mysqlnd_server_command command, zend_bool ignore_upsert_status);
 483 
 484 typedef enum_func_status        (*func_mysqlnd_conn_data__restart_psession)(MYSQLND_CONN_DATA * conn);
 485 typedef enum_func_status        (*func_mysqlnd_conn_data__end_psession)(MYSQLND_CONN_DATA * conn);
 486 typedef enum_func_status        (*func_mysqlnd_conn_data__send_close)(MYSQLND_CONN_DATA * conn);
 487 
 488 typedef enum_func_status    (*func_mysqlnd_conn_data__ssl_set)(MYSQLND_CONN_DATA * const conn, const char * key, const char * const cert, const char * const ca, const char * const capath, const char * const cipher);
 489 
 490 typedef MYSQLND_RES *           (*func_mysqlnd_conn_data__result_init)(unsigned int field_count, zend_bool persistent);
 491 
 492 typedef enum_func_status        (*func_mysqlnd_conn_data__set_autocommit)(MYSQLND_CONN_DATA * conn, unsigned int mode);
 493 typedef enum_func_status        (*func_mysqlnd_conn_data__tx_commit)(MYSQLND_CONN_DATA * conn);
 494 typedef enum_func_status        (*func_mysqlnd_conn_data__tx_rollback)(MYSQLND_CONN_DATA * conn);
 495 typedef enum_func_status        (*func_mysqlnd_conn_data__tx_begin)(MYSQLND_CONN_DATA * conn, const unsigned int mode, const char * const name);
 496 typedef enum_func_status        (*func_mysqlnd_conn_data__tx_commit_or_rollback)(MYSQLND_CONN_DATA * conn, const zend_bool commit, const unsigned int flags, const char * const name);
 497 typedef void                            (*func_mysqlnd_conn_data__tx_cor_options_to_string)(const MYSQLND_CONN_DATA * const conn, smart_str * tmp_str, const unsigned int mode);
 498 typedef enum_func_status        (*func_mysqlnd_conn_data__tx_savepoint)(MYSQLND_CONN_DATA * conn, const char * const name);
 499 typedef enum_func_status        (*func_mysqlnd_conn_data__tx_savepoint_release)(MYSQLND_CONN_DATA * conn, const char * const name);
 500 
 501 typedef enum_func_status        (*func_mysqlnd_conn_data__local_tx_start)(MYSQLND_CONN_DATA * conn, size_t this_func);
 502 typedef enum_func_status        (*func_mysqlnd_conn_data__local_tx_end)(MYSQLND_CONN_DATA * conn, size_t this_func, enum_func_status status);
 503 typedef enum_func_status        (*func_mysqlnd_conn_data__execute_init_commands)(MYSQLND_CONN_DATA * conn);
 504 typedef unsigned int            (*func_mysqlnd_conn_data__get_updated_connect_flags)(MYSQLND_CONN_DATA * conn, unsigned int mysql_flags);
 505 typedef enum_func_status        (*func_mysqlnd_conn_data__connect_handshake)(MYSQLND_CONN_DATA * conn, const char * const host, const char * const user, const char * const passwd, const unsigned int passwd_len, const char * const db, const unsigned int db_len, const unsigned int mysql_flags);
 506 typedef enum_func_status        (*func_mysqlnd_conn_data__simple_command_send_request)(MYSQLND_CONN_DATA * conn, enum php_mysqlnd_server_command command, const zend_uchar * const arg, size_t arg_len, zend_bool silent, zend_bool ignore_upsert_status);
 507 typedef struct st_mysqlnd_authentication_plugin * (*func_mysqlnd_conn_data__fetch_auth_plugin_by_name)(const char * const requested_protocol);
 508 
 509 typedef enum_func_status        (*func_mysqlnd_conn_data__set_client_option_2d)(MYSQLND_CONN_DATA * const conn, enum mysqlnd_option option, const char * const key, const char * const value);
 510 
 511 
 512 typedef unsigned int            (*func_mysqlnd_conn_data__negotiate_client_api_capabilities)(MYSQLND_CONN_DATA * const conn, const unsigned int flags);
 513 typedef unsigned int            (*func_mysqlnd_conn_data__get_client_api_capabilities)(const MYSQLND_CONN_DATA * const conn);
 514 
 515 
 516 struct st_mysqlnd_conn_data_methods
 517 {
 518         func_mysqlnd_conn_data__init init;
 519         func_mysqlnd_conn_data__connect connect;
 520         func_mysqlnd_conn_data__escape_string escape_string;
 521         func_mysqlnd_conn_data__set_charset set_charset;
 522         func_mysqlnd_conn_data__query query;
 523         func_mysqlnd_conn_data__send_query send_query;
 524         func_mysqlnd_conn_data__reap_query reap_query;
 525         func_mysqlnd_conn_data__use_result use_result;
 526         func_mysqlnd_conn_data__store_result store_result;
 527         func_mysqlnd_conn_data__next_result next_result;
 528         func_mysqlnd_conn_data__more_results more_results;
 529 
 530         func_mysqlnd_conn_data__stmt_init stmt_init;
 531 
 532         func_mysqlnd_conn_data__shutdown_server shutdown_server;
 533         func_mysqlnd_conn_data__refresh_server refresh_server;
 534 
 535         func_mysqlnd_conn_data__ping ping;
 536         func_mysqlnd_conn_data__kill_connection kill_connection;
 537         func_mysqlnd_conn_data__select_db select_db;
 538         func_mysqlnd_conn_data__server_dump_debug_information server_dump_debug_information;
 539         func_mysqlnd_conn_data__change_user change_user;
 540 
 541         func_mysqlnd_conn_data__get_error_no get_error_no;
 542         func_mysqlnd_conn_data__get_error_str get_error_str;
 543         func_mysqlnd_conn_data__get_sqlstate get_sqlstate;
 544         func_mysqlnd_conn_data__get_thread_id get_thread_id;
 545         func_mysqlnd_conn_data__get_statistics get_statistics;
 546 
 547         func_mysqlnd_conn_data__get_server_version get_server_version;
 548         func_mysqlnd_conn_data__get_server_information get_server_information;
 549         func_mysqlnd_conn_data__get_server_statistics get_server_statistics;
 550         func_mysqlnd_conn_data__get_host_information get_host_information;
 551         func_mysqlnd_conn_data__get_protocol_information get_protocol_information;
 552         func_mysqlnd_conn_data__get_last_message get_last_message;
 553         func_mysqlnd_conn_data__charset_name charset_name;
 554         func_mysqlnd_conn_data__list_fields list_fields;
 555         func_mysqlnd_conn_data__list_method list_method;
 556 
 557         func_mysqlnd_conn_data__get_last_insert_id get_last_insert_id;
 558         func_mysqlnd_conn_data__get_affected_rows get_affected_rows;
 559         func_mysqlnd_conn_data__get_warning_count get_warning_count;
 560 
 561         func_mysqlnd_conn_data__get_field_count get_field_count;
 562 
 563         func_mysqlnd_conn_data__get_server_status get_server_status;
 564 
 565         func_mysqlnd_conn_data__set_server_option set_server_option;
 566         func_mysqlnd_conn_data__set_client_option set_client_option;
 567         func_mysqlnd_conn_data__free_contents free_contents;
 568         func_mysqlnd_conn_data__free_options free_options;
 569         func_mysqlnd_conn_data__dtor dtor;
 570 
 571         func_mysqlnd_conn_data__query_read_result_set_header query_read_result_set_header;
 572 
 573         func_mysqlnd_conn_data__get_reference get_reference;
 574         func_mysqlnd_conn_data__free_reference free_reference;
 575         func_mysqlnd_conn_data__get_state get_state;
 576         func_mysqlnd_conn_data__set_state set_state;
 577 
 578         func_mysqlnd_conn_data__simple_command simple_command;
 579         func_mysqlnd_conn_data__simple_command_handle_response simple_command_handle_response;
 580 
 581         func_mysqlnd_conn_data__restart_psession restart_psession;
 582         func_mysqlnd_conn_data__end_psession end_psession;
 583         func_mysqlnd_conn_data__send_close send_close;
 584 
 585         func_mysqlnd_conn_data__ssl_set ssl_set;
 586 
 587         func_mysqlnd_conn_data__result_init result_init;
 588         func_mysqlnd_conn_data__set_autocommit set_autocommit;
 589         func_mysqlnd_conn_data__tx_commit tx_commit;
 590         func_mysqlnd_conn_data__tx_rollback tx_rollback;
 591         func_mysqlnd_conn_data__tx_begin tx_begin;
 592         func_mysqlnd_conn_data__tx_commit_or_rollback tx_commit_or_rollback;
 593         func_mysqlnd_conn_data__tx_cor_options_to_string tx_cor_options_to_string;
 594         func_mysqlnd_conn_data__tx_savepoint tx_savepoint;
 595         func_mysqlnd_conn_data__tx_savepoint_release tx_savepoint_release;
 596 
 597         func_mysqlnd_conn_data__local_tx_start local_tx_start;
 598         func_mysqlnd_conn_data__local_tx_end local_tx_end;
 599 
 600         func_mysqlnd_conn_data__execute_init_commands execute_init_commands;
 601         func_mysqlnd_conn_data__get_updated_connect_flags get_updated_connect_flags;
 602         func_mysqlnd_conn_data__connect_handshake connect_handshake;
 603         func_mysqlnd_conn_data__simple_command_send_request simple_command_send_request;
 604         func_mysqlnd_conn_data__fetch_auth_plugin_by_name fetch_auth_plugin_by_name;
 605 
 606         func_mysqlnd_conn_data__set_client_option_2d set_client_option_2d;
 607 
 608         func_mysqlnd_conn_data__negotiate_client_api_capabilities negotiate_client_api_capabilities;
 609         func_mysqlnd_conn_data__get_client_api_capabilities get_client_api_capabilities;
 610 };
 611 
 612 
 613 typedef enum_func_status        (*func_mysqlnd_data__connect)(MYSQLND * conn, const char * host, const char * user, const char * passwd, unsigned int passwd_len, const char * db, unsigned int db_len, unsigned int port, const char * socket_or_pipe, unsigned int mysql_flags);
 614 typedef MYSQLND *                       (*func_mysqlnd_conn__clone_object)(MYSQLND * const conn);
 615 typedef void                            (*func_mysqlnd_conn__dtor)(MYSQLND * conn);
 616 typedef enum_func_status        (*func_mysqlnd_conn__close)(MYSQLND * conn, enum_connection_close_type close_type);
 617 
 618 struct st_mysqlnd_conn_methods
 619 {
 620         func_mysqlnd_data__connect connect;
 621         func_mysqlnd_conn__clone_object clone_object;
 622         func_mysqlnd_conn__dtor dtor;
 623         func_mysqlnd_conn__close close;
 624 };
 625 
 626         /* for decoding - binary or text protocol */
 627 typedef enum_func_status        (*func_mysqlnd_res__row_decoder)(MYSQLND_MEMORY_POOL_CHUNK * row_buffer, zval * fields,
 628                                                                         unsigned int field_count, const MYSQLND_FIELD * fields_metadata,
 629                                                                         zend_bool as_int_or_float, MYSQLND_STATS * stats);
 630 
 631 
 632 typedef MYSQLND_RES *           (*func_mysqlnd_res__use_result)(MYSQLND_RES * const result, zend_bool ps_protocol);
 633 typedef MYSQLND_RES *           (*func_mysqlnd_res__store_result)(MYSQLND_RES * result, MYSQLND_CONN_DATA * const conn, const unsigned int flags);
 634 typedef void                            (*func_mysqlnd_res__fetch_into)(MYSQLND_RES *result, const unsigned int flags, zval *return_value, enum_mysqlnd_extension ext ZEND_FILE_LINE_DC);
 635 typedef MYSQLND_ROW_C           (*func_mysqlnd_res__fetch_row_c)(MYSQLND_RES *result);
 636 typedef void                            (*func_mysqlnd_res__fetch_all)(MYSQLND_RES *result, const unsigned int flags, zval *return_value ZEND_FILE_LINE_DC);
 637 typedef void                            (*func_mysqlnd_res__fetch_field_data)(MYSQLND_RES *result, unsigned int offset, zval *return_value);
 638 typedef uint64_t                        (*func_mysqlnd_res__num_rows)(const MYSQLND_RES * const result);
 639 typedef unsigned int            (*func_mysqlnd_res__num_fields)(const MYSQLND_RES * const result);
 640 typedef enum_func_status        (*func_mysqlnd_res__skip_result)(MYSQLND_RES * const result);
 641 typedef enum_func_status        (*func_mysqlnd_res__seek_data)(MYSQLND_RES * const result, const uint64_t row);
 642 typedef MYSQLND_FIELD_OFFSET (*func_mysqlnd_res__seek_field)(MYSQLND_RES * const result, const MYSQLND_FIELD_OFFSET field_offset);
 643 typedef MYSQLND_FIELD_OFFSET (*func_mysqlnd_res__field_tell)(const MYSQLND_RES * const result);
 644 typedef const MYSQLND_FIELD *(*func_mysqlnd_res__fetch_field)(MYSQLND_RES * const result);
 645 typedef const MYSQLND_FIELD *(*func_mysqlnd_res__fetch_field_direct)(MYSQLND_RES * const result, const MYSQLND_FIELD_OFFSET fieldnr);
 646 typedef const MYSQLND_FIELD *(*func_mysqlnd_res__fetch_fields)(MYSQLND_RES * const result);
 647 
 648 typedef enum_func_status        (*func_mysqlnd_res__read_result_metadata)(MYSQLND_RES * result, MYSQLND_CONN_DATA * conn);
 649 typedef zend_ulong *            (*func_mysqlnd_res__fetch_lengths)(MYSQLND_RES * const result);
 650 typedef enum_func_status        (*func_mysqlnd_res__store_result_fetch_data)(MYSQLND_CONN_DATA * const conn, MYSQLND_RES * result, MYSQLND_RES_METADATA * meta, MYSQLND_MEMORY_POOL_CHUNK *** row_buffers, zend_bool binary_protocol);
 651 
 652 typedef void                            (*func_mysqlnd_res__free_result_buffers)(MYSQLND_RES * result); /* private */
 653 typedef enum_func_status        (*func_mysqlnd_res__free_result)(MYSQLND_RES * result, zend_bool implicit);
 654 typedef void                            (*func_mysqlnd_res__free_result_internal)(MYSQLND_RES *result);
 655 typedef void                            (*func_mysqlnd_res__free_result_contents)(MYSQLND_RES *result);
 656 typedef void                            (*func_mysqlnd_res__free_buffered_data)(MYSQLND_RES *result);
 657 typedef void                            (*func_mysqlnd_res__unbuffered_free_last_data)(MYSQLND_RES *result);
 658 
 659 
 660 typedef MYSQLND_RES_METADATA * (*func_mysqlnd_res__result_meta_init)(unsigned int field_count, zend_bool persistent);
 661 
 662 struct st_mysqlnd_res_methods
 663 {
 664         mysqlnd_fetch_row_func  fetch_row;
 665 
 666         func_mysqlnd_res__use_result use_result;
 667         func_mysqlnd_res__store_result store_result;
 668         func_mysqlnd_res__fetch_into fetch_into;
 669         func_mysqlnd_res__fetch_row_c fetch_row_c;
 670         func_mysqlnd_res__fetch_all fetch_all;
 671         func_mysqlnd_res__fetch_field_data fetch_field_data;
 672         func_mysqlnd_res__num_rows num_rows;
 673         func_mysqlnd_res__num_fields num_fields;
 674         func_mysqlnd_res__skip_result skip_result;
 675         func_mysqlnd_res__seek_data seek_data;
 676         func_mysqlnd_res__seek_field seek_field;
 677         func_mysqlnd_res__field_tell field_tell;
 678         func_mysqlnd_res__fetch_field fetch_field;
 679         func_mysqlnd_res__fetch_field_direct fetch_field_direct;
 680         func_mysqlnd_res__fetch_fields fetch_fields;
 681         func_mysqlnd_res__read_result_metadata read_result_metadata;
 682         func_mysqlnd_res__fetch_lengths fetch_lengths;
 683         func_mysqlnd_res__store_result_fetch_data store_result_fetch_data;
 684         func_mysqlnd_res__free_result_buffers free_result_buffers;
 685         func_mysqlnd_res__free_result free_result;
 686         func_mysqlnd_res__free_result_internal free_result_internal;
 687         func_mysqlnd_res__free_result_contents free_result_contents;
 688 
 689         func_mysqlnd_res__result_meta_init result_meta_init;
 690 
 691         void * unused1;
 692         void * unused2;
 693         void * unused3;
 694         void * unused4;
 695         void * unused5;
 696 };
 697 
 698 
 699 typedef uint64_t                        (*func_mysqlnd_result_unbuffered__num_rows)(const MYSQLND_RES_UNBUFFERED * const result);
 700 typedef zend_ulong *            (*func_mysqlnd_result_unbuffered__fetch_lengths)(MYSQLND_RES_UNBUFFERED * const result);
 701 typedef void                            (*func_mysqlnd_result_unbuffered__free_last_data)(MYSQLND_RES_UNBUFFERED * result, MYSQLND_STATS * const global_stats);
 702 typedef void                            (*func_mysqlnd_result_unbuffered__free_result)(MYSQLND_RES_UNBUFFERED * const result, MYSQLND_STATS * const global_stats);
 703 
 704 struct st_mysqlnd_result_unbuffered_methods
 705 {
 706         mysqlnd_fetch_row_func                                                  fetch_row;
 707         func_mysqlnd_res__row_decoder                                   row_decoder;
 708         func_mysqlnd_result_unbuffered__num_rows                num_rows;
 709         func_mysqlnd_result_unbuffered__fetch_lengths   fetch_lengths;
 710         func_mysqlnd_result_unbuffered__free_last_data  free_last_data;
 711         func_mysqlnd_result_unbuffered__free_result             free_result;
 712 };
 713 
 714 typedef uint64_t                        (*func_mysqlnd_result_buffered__num_rows)(const MYSQLND_RES_BUFFERED * const result);
 715 typedef enum_func_status        (*func_mysqlnd_result_buffered__initialize_result_set_rest)(MYSQLND_RES_BUFFERED * const result, MYSQLND_RES_METADATA * const meta,
 716                                                                                                                                                                                 MYSQLND_STATS * stats, zend_bool int_and_float_native);
 717 typedef zend_ulong *            (*func_mysqlnd_result_buffered__fetch_lengths)(MYSQLND_RES_BUFFERED * const result);
 718 typedef enum_func_status        (*func_mysqlnd_result_buffered__data_seek)(MYSQLND_RES_BUFFERED * const result, const uint64_t row);
 719 typedef void                            (*func_mysqlnd_result_buffered__free_result)(MYSQLND_RES_BUFFERED * const result);
 720 
 721 struct st_mysqlnd_result_buffered_methods
 722 {
 723         mysqlnd_fetch_row_func                                          fetch_row;
 724         func_mysqlnd_res__row_decoder                           row_decoder;
 725         func_mysqlnd_result_buffered__num_rows          num_rows;
 726         func_mysqlnd_result_buffered__fetch_lengths     fetch_lengths;
 727         func_mysqlnd_result_buffered__data_seek         data_seek;
 728         func_mysqlnd_result_buffered__initialize_result_set_rest initialize_result_set_rest;
 729         func_mysqlnd_result_buffered__free_result       free_result;
 730 };
 731 
 732 
 733 typedef const MYSQLND_FIELD *   (*func_mysqlnd_res_meta__fetch_field)(MYSQLND_RES_METADATA * const meta);
 734 typedef const MYSQLND_FIELD *   (*func_mysqlnd_res_meta__fetch_field_direct)(const MYSQLND_RES_METADATA * const meta, const MYSQLND_FIELD_OFFSET fieldnr);
 735 typedef const MYSQLND_FIELD *   (*func_mysqlnd_res_meta__fetch_fields)(MYSQLND_RES_METADATA * const meta);
 736 typedef MYSQLND_FIELD_OFFSET    (*func_mysqlnd_res_meta__field_tell)(const MYSQLND_RES_METADATA * const meta);
 737 typedef MYSQLND_FIELD_OFFSET    (*func_mysqlnd_res_meta__field_seek)(MYSQLND_RES_METADATA * const meta, const MYSQLND_FIELD_OFFSET field_offset);
 738 typedef enum_func_status                (*func_mysqlnd_res_meta__read_metadata)(MYSQLND_RES_METADATA * const meta, MYSQLND_CONN_DATA * conn);
 739 typedef MYSQLND_RES_METADATA *  (*func_mysqlnd_res_meta__clone_metadata)(const MYSQLND_RES_METADATA * const meta, zend_bool persistent);
 740 typedef void                                    (*func_mysqlnd_res_meta__free_metadata)(MYSQLND_RES_METADATA * meta);
 741 
 742 struct st_mysqlnd_res_meta_methods
 743 {
 744         func_mysqlnd_res_meta__fetch_field fetch_field;
 745         func_mysqlnd_res_meta__fetch_field_direct fetch_field_direct;
 746         func_mysqlnd_res_meta__fetch_fields fetch_fields;
 747         func_mysqlnd_res_meta__field_tell field_tell;
 748         func_mysqlnd_res_meta__field_seek field_seek;
 749         func_mysqlnd_res_meta__read_metadata read_metadata;
 750         func_mysqlnd_res_meta__clone_metadata clone_metadata;
 751         func_mysqlnd_res_meta__free_metadata free_metadata;
 752 };
 753 
 754 
 755 typedef enum_func_status        (*func_mysqlnd_stmt__prepare)(MYSQLND_STMT * const stmt, const char * const query, unsigned int query_len);
 756 typedef enum_func_status        (*func_mysqlnd_stmt__send_execute)(MYSQLND_STMT * const s, enum_mysqlnd_send_execute_type type, zval * read_cb, zval * err_cb);
 757 typedef enum_func_status        (*func_mysqlnd_stmt__execute)(MYSQLND_STMT * const stmt);
 758 typedef MYSQLND_RES *           (*func_mysqlnd_stmt__use_result)(MYSQLND_STMT * const stmt);
 759 typedef MYSQLND_RES *           (*func_mysqlnd_stmt__store_result)(MYSQLND_STMT * const stmt);
 760 typedef MYSQLND_RES *           (*func_mysqlnd_stmt__get_result)(MYSQLND_STMT * const stmt);
 761 typedef zend_bool                       (*func_mysqlnd_stmt__more_results)(const MYSQLND_STMT * const stmt);
 762 typedef enum_func_status        (*func_mysqlnd_stmt__next_result)(MYSQLND_STMT * const stmt);
 763 typedef enum_func_status        (*func_mysqlnd_stmt__free_result)(MYSQLND_STMT * const stmt);
 764 typedef enum_func_status        (*func_mysqlnd_stmt__seek_data)(const MYSQLND_STMT * const stmt, uint64_t row);
 765 typedef enum_func_status        (*func_mysqlnd_stmt__reset)(MYSQLND_STMT * const stmt);
 766 typedef enum_func_status        (*func_mysqlnd_stmt__net_close)(MYSQLND_STMT * const stmt, zend_bool implicit); /* private */
 767 typedef enum_func_status        (*func_mysqlnd_stmt__dtor)(MYSQLND_STMT * const stmt, zend_bool implicit); /* use this for mysqlnd_stmt_close */
 768 typedef enum_func_status        (*func_mysqlnd_stmt__fetch)(MYSQLND_STMT * const stmt, zend_bool * const fetched_anything);
 769 typedef enum_func_status        (*func_mysqlnd_stmt__bind_parameters)(MYSQLND_STMT * const stmt, MYSQLND_PARAM_BIND * const param_bind);
 770 typedef enum_func_status        (*func_mysqlnd_stmt__bind_one_parameter)(MYSQLND_STMT * const stmt, unsigned int param_no, zval * const zv, zend_uchar  type);
 771 typedef enum_func_status        (*func_mysqlnd_stmt__refresh_bind_param)(MYSQLND_STMT * const stmt);
 772 typedef enum_func_status        (*func_mysqlnd_stmt__bind_result)(MYSQLND_STMT * const stmt, MYSQLND_RESULT_BIND * const result_bind);
 773 typedef enum_func_status        (*func_mysqlnd_stmt__bind_one_result)(MYSQLND_STMT * const stmt, unsigned int param_no);
 774 typedef enum_func_status        (*func_mysqlnd_stmt__send_long_data)(MYSQLND_STMT * const stmt, unsigned int param_num, const char * const data, zend_ulong length);
 775 typedef MYSQLND_RES *           (*func_mysqlnd_stmt__get_parameter_metadata)(MYSQLND_STMT * const stmt);
 776 typedef MYSQLND_RES *           (*func_mysqlnd_stmt__get_result_metadata)(MYSQLND_STMT * const stmt);
 777 typedef uint64_t                        (*func_mysqlnd_stmt__get_last_insert_id)(const MYSQLND_STMT * const stmt);
 778 typedef uint64_t                        (*func_mysqlnd_stmt__get_affected_rows)(const MYSQLND_STMT * const stmt);
 779 typedef uint64_t                        (*func_mysqlnd_stmt__get_num_rows)(const MYSQLND_STMT * const stmt);
 780 typedef unsigned int            (*func_mysqlnd_stmt__get_param_count)(const MYSQLND_STMT * const stmt);
 781 typedef unsigned int            (*func_mysqlnd_stmt__get_field_count)(const MYSQLND_STMT * const stmt);
 782 typedef unsigned int            (*func_mysqlnd_stmt__get_warning_count)(const MYSQLND_STMT * const stmt);
 783 typedef unsigned int            (*func_mysqlnd_stmt__get_error_no)(const MYSQLND_STMT * const stmt);
 784 typedef const char *            (*func_mysqlnd_stmt__get_error_str)(const MYSQLND_STMT * const stmt);
 785 typedef const char *            (*func_mysqlnd_stmt__get_sqlstate)(const MYSQLND_STMT * const stmt);
 786 typedef enum_func_status        (*func_mysqlnd_stmt__get_attribute)(const MYSQLND_STMT * const stmt, enum mysqlnd_stmt_attr attr_type, void * const value);
 787 typedef enum_func_status        (*func_mysqlnd_stmt__set_attribute)(MYSQLND_STMT * const stmt, enum mysqlnd_stmt_attr attr_type, const void * const value);
 788 typedef MYSQLND_PARAM_BIND *(*func_mysqlnd_stmt__alloc_param_bind)(MYSQLND_STMT * const stmt);
 789 typedef MYSQLND_RESULT_BIND*(*func_mysqlnd_stmt__alloc_result_bind)(MYSQLND_STMT * const stmt);
 790 typedef void                            (*func_mysqlnd_stmt__free_parameter_bind)(MYSQLND_STMT * const stmt, MYSQLND_PARAM_BIND *);
 791 typedef void                            (*func_mysqlnd_stmt__free_result_bind)(MYSQLND_STMT * const stmt, MYSQLND_RESULT_BIND *);
 792 typedef unsigned int            (*func_mysqlnd_stmt__server_status)(const MYSQLND_STMT * const stmt);
 793 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);
 794 typedef enum_func_status        (*func_mysqlnd_stmt__parse_execute_response)(MYSQLND_STMT * const s, enum_mysqlnd_parse_exec_response_type type);
 795 typedef void                            (*func_mysqlnd_stmt__free_stmt_content)(MYSQLND_STMT * const s);
 796 typedef enum_func_status        (*func_mysqlnd_stmt__flush)(MYSQLND_STMT * const stmt);
 797 typedef void                            (*func_mysqlnd_stmt__free_stmt_result)(MYSQLND_STMT * const s);
 798 
 799 struct st_mysqlnd_stmt_methods
 800 {
 801         func_mysqlnd_stmt__prepare prepare;
 802         func_mysqlnd_stmt__send_execute send_execute;
 803         func_mysqlnd_stmt__execute execute;
 804         func_mysqlnd_stmt__use_result use_result;
 805         func_mysqlnd_stmt__store_result store_result;
 806         func_mysqlnd_stmt__get_result get_result;
 807         func_mysqlnd_stmt__more_results more_results;
 808         func_mysqlnd_stmt__next_result next_result;
 809         func_mysqlnd_stmt__free_result free_result;
 810         func_mysqlnd_stmt__seek_data seek_data;
 811         func_mysqlnd_stmt__reset reset;
 812         func_mysqlnd_stmt__net_close net_close;
 813         func_mysqlnd_stmt__dtor dtor;
 814         func_mysqlnd_stmt__fetch fetch;
 815 
 816         func_mysqlnd_stmt__bind_parameters bind_parameters;
 817         func_mysqlnd_stmt__bind_one_parameter bind_one_parameter;
 818         func_mysqlnd_stmt__refresh_bind_param refresh_bind_param;
 819         func_mysqlnd_stmt__bind_result bind_result;
 820         func_mysqlnd_stmt__bind_one_result bind_one_result;
 821         func_mysqlnd_stmt__send_long_data send_long_data;
 822         func_mysqlnd_stmt__get_parameter_metadata get_parameter_metadata;
 823         func_mysqlnd_stmt__get_result_metadata get_result_metadata;
 824 
 825         func_mysqlnd_stmt__get_last_insert_id get_last_insert_id;
 826         func_mysqlnd_stmt__get_affected_rows get_affected_rows;
 827         func_mysqlnd_stmt__get_num_rows get_num_rows;
 828 
 829         func_mysqlnd_stmt__get_param_count get_param_count;
 830         func_mysqlnd_stmt__get_field_count get_field_count;
 831         func_mysqlnd_stmt__get_warning_count get_warning_count;
 832 
 833         func_mysqlnd_stmt__get_error_no get_error_no;
 834         func_mysqlnd_stmt__get_error_str get_error_str;
 835         func_mysqlnd_stmt__get_sqlstate get_sqlstate;
 836 
 837         func_mysqlnd_stmt__get_attribute get_attribute;
 838         func_mysqlnd_stmt__set_attribute set_attribute;
 839 
 840         func_mysqlnd_stmt__alloc_param_bind alloc_parameter_bind;
 841         func_mysqlnd_stmt__alloc_result_bind alloc_result_bind;
 842 
 843         func_mysqlnd_stmt__free_parameter_bind free_parameter_bind;
 844         func_mysqlnd_stmt__free_result_bind free_result_bind;
 845 
 846         func_mysqlnd_stmt__server_status get_server_status;
 847 
 848         func_mysqlnd_stmt__generate_execute_request generate_execute_request;
 849         func_mysqlnd_stmt__parse_execute_response parse_execute_response;
 850 
 851         func_mysqlnd_stmt__free_stmt_content free_stmt_content;
 852 
 853         func_mysqlnd_stmt__flush flush;
 854 
 855         func_mysqlnd_stmt__free_stmt_result free_stmt_result;
 856 };
 857 
 858 
 859 struct st_mysqlnd_net_data
 860 {
 861         php_stream                      *stream;
 862         zend_bool                       compressed;
 863         zend_bool                       ssl;
 864 #ifdef MYSQLND_DO_WIRE_CHECK_BEFORE_COMMAND
 865         zend_uchar                      last_command;
 866 #else
 867         zend_uchar                      unused_pad1;
 868 #endif
 869         MYSQLND_NET_OPTIONS     options;
 870 
 871         unsigned int            refcount;
 872 
 873         zend_bool                       persistent;
 874 
 875         struct st_mysqlnd_net_methods m;
 876 };
 877 
 878 
 879 struct st_mysqlnd_net
 880 {
 881         /* cmd buffer */
 882         MYSQLND_CMD_BUFFER      cmd_buffer;
 883 
 884         struct st_mysqlnd_net_data * data;
 885 
 886 #ifdef MYSQLND_COMPRESSION_ENABLED
 887         MYSQLND_READ_BUFFER     * uncompressed_data;
 888 #else
 889         void *                          unused_pad1;
 890 #endif
 891 
 892         zend_bool persistent;
 893 
 894         /* sequence for simple checking of correct packets */
 895         zend_uchar                      packet_no;
 896         zend_uchar                      compressed_envelope_packet_no;
 897 };
 898 
 899 
 900 struct st_mysqlnd_protocol
 901 {
 902         zend_bool persistent;
 903         struct st_mysqlnd_protocol_methods m;
 904 };
 905 
 906 
 907 struct st_mysqlnd_connection_data
 908 {
 909 /* Operation related */
 910         MYSQLND_NET             * net;
 911         MYSQLND_PROTOCOL * protocol;
 912 
 913 /* Information related */
 914         char                    *host;
 915         unsigned int    host_len;
 916         char                    *unix_socket;
 917         unsigned int    unix_socket_len;
 918         char                    *user;
 919         unsigned int    user_len;
 920         char                    *passwd;
 921         unsigned int    passwd_len;
 922         char                    *scheme;
 923         unsigned int    scheme_len;
 924         uint64_t                thread_id;
 925         char                    *server_version;
 926         char                    *host_info;
 927         zend_uchar              *auth_plugin_data;
 928         size_t                  auth_plugin_data_len;
 929         const MYSQLND_CHARSET *charset;
 930         const MYSQLND_CHARSET *greet_charset;
 931         char                    *connect_or_select_db;
 932         unsigned int    connect_or_select_db_len;
 933         MYSQLND_INFILE  infile;
 934         unsigned int    protocol_version;
 935         zend_ulong      max_packet_size;
 936         unsigned int    port;
 937         zend_ulong      client_flag;
 938         zend_ulong      server_capabilities;
 939 
 940         /* For UPSERT queries */
 941         MYSQLND_UPSERT_STATUS * upsert_status;
 942         MYSQLND_UPSERT_STATUS upsert_status_impl;
 943         char                    *last_message;
 944         unsigned int    last_message_len;
 945 
 946         /* If error packet, we use these */
 947         MYSQLND_ERROR_INFO      * error_info;
 948         MYSQLND_ERROR_INFO      error_info_impl;
 949 
 950         /*
 951           To prevent queries during unbuffered fetches. Also to
 952           mark the connection as destroyed for garbage collection.
 953         */
 954         enum mysqlnd_connection_state   state;
 955         enum_mysqlnd_query_type                 last_query_type;
 956         /* Temporary storage between query and (use|store)_result() call */
 957         MYSQLND_RES                                             *current_result;
 958 
 959         /*
 960           How many result sets reference this connection.
 961           It won't be freed until this number reaches 0.
 962           The last one, please close the door! :-)
 963           The result set objects can determine by inspecting
 964           'quit_sent' whether the connection is still valid.
 965         */
 966         unsigned int    refcount;
 967 
 968         /* Temporal storage for mysql_query */
 969         unsigned int    field_count;
 970 
 971         /* options */
 972         MYSQLND_OPTIONS * options;
 973         MYSQLND_OPTIONS options_impl;
 974 
 975         /* stats */
 976         MYSQLND_STATS   * stats;
 977 
 978         unsigned int    client_api_capabilities;
 979 
 980         zval                    async_read_cb;
 981         zval                    async_err_cb;
 982         zend_bool               in_async_read_cb;
 983         zend_bool               in_async_err_cb;
 984 
 985         struct st_mysqlnd_conn_data_methods * m;
 986 
 987         /* persistent connection */
 988         zend_bool               persistent;
 989 };
 990 
 991 
 992 struct st_mysqlnd_connection
 993 {
 994         MYSQLND_CONN_DATA * data;
 995         zend_bool persistent;
 996         struct st_mysqlnd_conn_methods * m;
 997 };
 998 
 999 
1000 struct mysqlnd_field_hash_key
1001 {
1002         zend_bool               is_numeric;
1003         zend_ulong      key;
1004 };
1005 
1006 
1007 struct st_mysqlnd_result_metadata
1008 {
1009         MYSQLND_FIELD                                   *fields;
1010         struct mysqlnd_field_hash_key   *zend_hash_keys;
1011 
1012         struct st_mysqlnd_res_meta_methods * m;
1013 
1014         size_t                                                  bit_fields_total_len; /* trailing \0 not counted */
1015         /* We need this to make fast allocs in rowp_read */
1016         unsigned int                                    bit_fields_count;
1017 
1018         unsigned int                                    current_field;
1019         unsigned int                                    field_count;
1020 
1021         zend_bool                                               persistent;
1022 };
1023 
1024 
1025 #define def_mysqlnd_buffered_result_parent                      \
1026         MYSQLND_MEMORY_POOL_CHUNK **row_buffers;                \
1027         uint64_t                        row_count;                                      \
1028         uint64_t                        initialized_rows;                       \
1029                                                                                                         \
1030         /*  Column lengths of current row - both buffered and unbuffered. For buffered results it duplicates the data found in **data */ \
1031         zend_ulong              *lengths;                                       \
1032                                                                                                         \
1033         MYSQLND_MEMORY_POOL     *result_set_memory_pool;        \
1034                                                                                                         \
1035         unsigned int            references;                                     \
1036                                                                                                         \
1037         MYSQLND_ERROR_INFO      error_info;                                     \
1038                                                                                                         \
1039         unsigned int            field_count;                            \
1040         zend_bool                       ps;                                                     \
1041         zend_bool                       persistent;                                     \
1042         struct st_mysqlnd_result_buffered_methods m;    \
1043         enum mysqlnd_buffered_type type;                                \
1044         void                            * unused1;                                      \
1045         void                            * unused2;                                      \
1046         void                            * unused3
1047 
1048 
1049 struct st_mysqlnd_buffered_result_parent
1050 {
1051         def_mysqlnd_buffered_result_parent;
1052 };
1053 
1054 
1055 struct st_mysqlnd_buffered_result_zval
1056 {
1057         def_mysqlnd_buffered_result_parent;
1058 
1059         zval    *data;
1060         zval    *data_cursor;
1061 };
1062 
1063 
1064 struct st_mysqlnd_buffered_result_c
1065 {
1066         def_mysqlnd_buffered_result_parent;
1067 
1068         zend_uchar      *initialized; /* every row is a single bit */
1069         uint64_t        current_row;
1070 };
1071 
1072 
1073 struct st_mysqlnd_unbuffered_result
1074 {
1075         struct st_mysqlnd_result_unbuffered_methods m;
1076         uint64_t                        row_count;
1077 
1078         /* For unbuffered (both normal and PS) */
1079         zval                            *last_row_data;
1080         MYSQLND_MEMORY_POOL_CHUNK *last_row_buffer;
1081 
1082         /*
1083           Column lengths of current row - both buffered and unbuffered.
1084           For buffered results it duplicates the data found in **data
1085         */
1086         zend_ulong              *lengths;
1087 
1088         MYSQLND_MEMORY_POOL     *result_set_memory_pool;
1089 
1090         struct st_mysqlnd_packet_row * row_packet;
1091 
1092         unsigned int            field_count;
1093 
1094         zend_bool                       eof_reached;
1095 
1096         zend_bool                       ps;
1097         zend_bool                       persistent;
1098 
1099 };
1100 
1101 
1102 struct st_mysqlnd_res
1103 {
1104         MYSQLND_CONN_DATA               *conn;
1105         enum_mysqlnd_res_type   type;
1106         unsigned int                    field_count;
1107 
1108         /* For metadata functions */
1109         MYSQLND_RES_METADATA    *meta;
1110 
1111         /* To be used with store_result() - both normal and PS */
1112         MYSQLND_RES_BUFFERED    *stored_data;
1113         MYSQLND_RES_UNBUFFERED  *unbuf;
1114 
1115         zend_bool                               persistent;
1116 
1117         struct st_mysqlnd_res_methods m;
1118 };
1119 
1120 
1121 struct st_mysqlnd_param_bind
1122 {
1123         zval            zv;
1124         zend_uchar      type;
1125         enum_param_bind_flags   flags;
1126 };
1127 
1128 struct st_mysqlnd_result_bind
1129 {
1130         zval            zv;
1131         zend_bool       bound;
1132 };
1133 
1134 
1135 struct st_mysqlnd_stmt_data
1136 {
1137         MYSQLND_CONN_DATA                       *conn;
1138         zend_ulong                                      stmt_id;
1139         zend_ulong                                      flags;/* cursor is set here */
1140         enum_mysqlnd_stmt_state         state;
1141         unsigned int                            warning_count;
1142         MYSQLND_RES                                     *result;
1143         unsigned int                            field_count;
1144         unsigned int                            param_count;
1145         unsigned char                           send_types_to_server;
1146         MYSQLND_PARAM_BIND                      *param_bind;
1147         MYSQLND_RESULT_BIND                     *result_bind;
1148         zend_bool                                       result_zvals_separated_once;
1149         zend_bool                                       persistent;
1150 
1151         MYSQLND_UPSERT_STATUS *         upsert_status;
1152         MYSQLND_UPSERT_STATUS           upsert_status_impl;
1153 
1154         MYSQLND_ERROR_INFO *            error_info;
1155         MYSQLND_ERROR_INFO                      error_info_impl;
1156 
1157         zend_bool                                       update_max_length;
1158         zend_ulong                                      prefetch_rows;
1159 
1160         zend_bool                                       cursor_exists;
1161         mysqlnd_stmt_use_or_store_func default_rset_handler;
1162 
1163         zval                                            execute_read_cb;
1164         zval                                            execute_err_cb;
1165         zend_bool                                       in_execute_read_cb;
1166         zend_bool                                       in_execute_err_cb;
1167 
1168         MYSQLND_CMD_BUFFER                      execute_cmd_buffer;
1169         unsigned int                            execute_count;/* count how many times the stmt was executed */
1170 };
1171 
1172 
1173 struct st_mysqlnd_stmt
1174 {
1175         MYSQLND_STMT_DATA * data;
1176         struct st_mysqlnd_stmt_methods  *m;
1177         zend_bool persistent;
1178 };
1179 
1180 
1181 typedef struct st_mysqlnd_string
1182 {
1183         char    *s;
1184         size_t  l;
1185 } MYSQLND_STRING;
1186 
1187 
1188 struct st_mysqlnd_plugin_header
1189 {
1190         unsigned int    plugin_api_version;
1191         const char *    plugin_name;
1192         zend_ulong      plugin_version;
1193         const char *    plugin_string_version;
1194         const char *    plugin_license;
1195         const char *    plugin_author;
1196         struct
1197         {
1198                 MYSQLND_STATS *                 values;
1199                 const MYSQLND_STRING *  names;
1200         } plugin_stats;
1201 
1202         struct
1203         {
1204                 enum_func_status (*plugin_shutdown)(void * plugin);
1205         } m;
1206 };
1207 
1208 
1209 struct st_mysqlnd_plugin_core
1210 {
1211         struct st_mysqlnd_plugin_header plugin_header;
1212 };
1213 
1214 
1215 struct st_mysqlnd_typeii_plugin_example
1216 {
1217         struct st_mysqlnd_plugin_header plugin_header;
1218         void * methods;
1219         unsigned int counter;
1220 };
1221 
1222 struct st_mysqlnd_authentication_plugin;
1223 
1224 typedef zend_uchar * (*func_auth_plugin__get_auth_data)(struct st_mysqlnd_authentication_plugin * self,
1225                                                                                                                 size_t * auth_data_len,
1226                                                                                                                 MYSQLND_CONN_DATA * conn, const char * const user, const char * const passwd,
1227                                                                                                                 const size_t passwd_len, zend_uchar * auth_plugin_data, size_t auth_plugin_data_len,
1228                                                                                                                 const MYSQLND_OPTIONS * const options,
1229                                                                                                                 const MYSQLND_NET_OPTIONS * const net_options, zend_ulong mysql_flags
1230                                                                                                                 );
1231 
1232 struct st_mysqlnd_authentication_plugin
1233 {
1234         struct st_mysqlnd_plugin_header plugin_header;
1235         struct {
1236                 func_auth_plugin__get_auth_data get_auth_data;
1237         } methods;
1238 };
1239 
1240 
1241 #endif /* MYSQLND_STRUCTS_H */

/* [<][>][^][v][top][bottom][index][help] */