root/ext/mysqlnd/mysqlnd_structs.h

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

INCLUDED FROM


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

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