diff options
Diffstat (limited to 'ext/mysqlnd/mysqlnd_structs.h')
-rw-r--r-- | ext/mysqlnd/mysqlnd_structs.h | 685 |
1 files changed, 408 insertions, 277 deletions
diff --git a/ext/mysqlnd/mysqlnd_structs.h b/ext/mysqlnd/mysqlnd_structs.h index c319784481..3f26425604 100644 --- a/ext/mysqlnd/mysqlnd_structs.h +++ b/ext/mysqlnd/mysqlnd_structs.h @@ -14,7 +14,6 @@ +----------------------------------------------------------------------+ | Authors: Andrey Hristov <andrey@php.net> | | Ulf Wendel <uw@php.net> | - | Georg Richter <georg@php.net> | +----------------------------------------------------------------------+ */ @@ -26,11 +25,28 @@ #define MYSQLND_TYPEDEFED_METHODS #define MYSQLND_CLASS_METHOD_TABLE_NAME(class) mysqlnd_##class##_methods -#define MYSQLND_CLASS_METHOD_TABLE_NAME_FORWARD(class) struct st_##class##_methods MYSQLND_CLASS_METHOD_TABLE_NAME(class) +#define MYSQLND_CLASS_METHODS_TYPE(class) struct st_##class##_methods +#define MYSQLND_CLASS_METHOD_TABLE_NAME_FORWARD(class) MYSQLND_CLASS_METHODS_TYPE(class) MYSQLND_CLASS_METHOD_TABLE_NAME(class) #define MYSQLND_CLASS_METHODS_START(class) MYSQLND_CLASS_METHOD_TABLE_NAME_FORWARD(class) = { #define MYSQLND_CLASS_METHODS_END } +#define MYSQLND_CLASS_METHODS_INSTANCE_NAME(class) mysqlnd_##class##_methods_ptr +#define MYSQLND_CLASS_METHODS_INSTANCE_DECLARE(class) extern const MYSQLND_CLASS_METHODS_TYPE(class) * MYSQLND_CLASS_METHODS_INSTANCE_NAME(class) +#define MYSQLND_CLASS_METHODS_INSTANCE_DEFINE(class) const MYSQLND_CLASS_METHODS_TYPE(class) * MYSQLND_CLASS_METHODS_INSTANCE_NAME(class) = & MYSQLND_CLASS_METHOD_TABLE_NAME(class) + +typedef struct st_mysqlnd_string +{ + char *s; + size_t l; +} MYSQLND_STRING; + +typedef struct st_mysqlnd_const_string +{ + const char *s; + size_t l; +} MYSQLND_CSTRING; + typedef struct st_mysqlnd_memory_pool MYSQLND_MEMORY_POOL; typedef struct st_mysqlnd_memory_pool_chunk MYSQLND_MEMORY_POOL_CHUNK; @@ -42,20 +58,18 @@ typedef struct st_mysqlnd_memory_pool_chunk_llist MYSQLND_MEMORY_POOL_CHUNK_LLIS struct st_mysqlnd_memory_pool { zend_uchar *arena; - unsigned int refcount; unsigned int arena_size; unsigned int free_size; MYSQLND_MEMORY_POOL_CHUNK* (*get_chunk)(MYSQLND_MEMORY_POOL * pool, unsigned int size); + enum_func_status (*resize_chunk)(MYSQLND_MEMORY_POOL * pool, MYSQLND_MEMORY_POOL_CHUNK * chunk, unsigned int size); + void (*free_chunk)(MYSQLND_MEMORY_POOL * pool, MYSQLND_MEMORY_POOL_CHUNK * chunk); }; struct st_mysqlnd_memory_pool_chunk { size_t app; - MYSQLND_MEMORY_POOL *pool; zend_uchar *ptr; - enum_func_status (*resize_chunk)(MYSQLND_MEMORY_POOL_CHUNK * chunk, unsigned int size); - void (*free_chunk)(MYSQLND_MEMORY_POOL_CHUNK * chunk); unsigned int size; zend_bool from_pool; }; @@ -77,7 +91,7 @@ typedef struct st_mysqlnd_field const char *org_table; /* Org table name, if table was an alias */ const char *db; /* Database for table */ const char *catalog; /* Catalog for table */ - char *def; /* Default value (set by mysql_list_fields) */ + char *def; /* Default value */ zend_ulong length; /* Width of column (create length) */ zend_ulong max_length; /* Max width for selected set */ unsigned int name_length; @@ -96,22 +110,53 @@ typedef struct st_mysqlnd_field } MYSQLND_FIELD; -typedef struct st_mysqlnd_upsert_result +typedef struct st_mysqlnd_upsert_status MYSQLND_UPSERT_STATUS; +typedef void (*func_mysqlnd_upsert_status__reset)(MYSQLND_UPSERT_STATUS * const upsert_status); +typedef void (*func_mysqlnd_upsert_status__set_affected_rows_to_error)(MYSQLND_UPSERT_STATUS * const upsert_status); + +MYSQLND_CLASS_METHODS_TYPE(mysqlnd_upsert_status) +{ + func_mysqlnd_upsert_status__reset reset; + func_mysqlnd_upsert_status__set_affected_rows_to_error set_affected_rows_to_error; +}; + +struct st_mysqlnd_upsert_status { unsigned int warning_count; unsigned int server_status; uint64_t affected_rows; uint64_t last_insert_id; -} MYSQLND_UPSERT_STATUS; + MYSQLND_CLASS_METHODS_TYPE(mysqlnd_upsert_status) *m; +}; + +#define SET_EMPTY_ERROR(info) (info)->m->reset((info)) +#define SET_CLIENT_ERROR(info, err_no, sqlstate, error) (err_no)? (info)->m->set_client_error((info), (err_no), (sqlstate), (error)) : (info)->m->reset((info)) +#define SET_OOM_ERROR(info) SET_CLIENT_ERROR((info), CR_OUT_OF_MEMORY, UNKNOWN_SQLSTATE, mysqlnd_out_of_memory) +#define COPY_CLIENT_ERROR(dest, source) SET_CLIENT_ERROR((dest), (source).error_no, (source).sqlstate, (source).error) + + +typedef struct st_mysqlnd_error_info MYSQLND_ERROR_INFO; +typedef void (*func_mysqlnd_error_info__reset)(MYSQLND_ERROR_INFO * const info); +typedef void (*func_mysqlnd_error_info__set_client_error)(MYSQLND_ERROR_INFO * const info, const unsigned int err_no, const char * const sqlstate, const char * const error); + + +MYSQLND_CLASS_METHODS_TYPE(mysqlnd_error_info) +{ + func_mysqlnd_error_info__reset reset; + func_mysqlnd_error_info__set_client_error set_client_error; +}; -typedef struct st_mysqlnd_error_info +struct st_mysqlnd_error_info { char error[MYSQLND_ERRMSG_SIZE+1]; char sqlstate[MYSQLND_SQLSTATE_LENGTH + 1]; unsigned int error_no; zend_llist * error_list; -} MYSQLND_ERROR_INFO; + + zend_bool persistent; + MYSQLND_CLASS_METHODS_TYPE(mysqlnd_error_info) *m; +}; typedef struct st_mysqlnd_error_list_element @@ -154,7 +199,7 @@ typedef struct st_mysqlnd_infile void (*local_infile_end)(void *ptr); } MYSQLND_INFILE; -typedef struct st_mysqlnd_options +typedef struct st_mysqlnd_session_options { ulong flags; @@ -173,11 +218,11 @@ typedef struct st_mysqlnd_options in the memory which can crash external code. Feel free to reuse these. */ HashTable * connect_attr; + char * unused1; + char * unused2; char * unused3; - char * unused4; - char * unused5; - enum_mysqlnd_protocol_type protocol; + enum_mysqlnd_session_protocol_type protocol; char *charset_name; /* maximum allowed packet size for communication */ @@ -186,9 +231,10 @@ typedef struct st_mysqlnd_options #ifdef MYSQLND_STRING_TO_INT_CONVERSION zend_bool int_and_float_native; #endif -} MYSQLND_OPTIONS; +} MYSQLND_SESSION_OPTIONS; -typedef struct st_mysqlnd_net_options + +typedef struct st_mysqlnd_vio_options { /* timeouts */ unsigned int timeout_connect; @@ -211,23 +257,17 @@ typedef struct st_mysqlnd_net_options #define MYSQLND_SSL_PEER_DEFAULT_ACTION MYSQLND_SSL_PEER_VERIFY } ssl_verify_peer; - uint64_t flags; - - char * sha256_server_public_key; - - char * unused1; - char * unused2; - char * unused3; - char * unused4; -} MYSQLND_NET_OPTIONS; +} MYSQLND_VIO_OPTIONS; typedef struct st_mysqlnd_connection MYSQLND; typedef struct st_mysqlnd_connection_data MYSQLND_CONN_DATA; -typedef struct st_mysqlnd_net MYSQLND_NET; -typedef struct st_mysqlnd_net_data MYSQLND_NET_DATA; -typedef struct st_mysqlnd_protocol MYSQLND_PROTOCOL; +typedef struct st_mysqlnd_protocol_frame_codec MYSQLND_PFC; +typedef struct st_mysqlnd_protocol_frame_codec_data MYSQLND_PFC_DATA; +typedef struct st_mysqlnd_vio MYSQLND_VIO; +typedef struct st_mysqlnd_vio_data MYSQLND_VIO_DATA; +typedef struct st_mysqlnd_protocol_payload_decoder_factory MYSQLND_PROTOCOL_PAYLOAD_DECODER_FACTORY; typedef struct st_mysqlnd_res MYSQLND_RES; typedef char** MYSQLND_ROW_C; /* return data as array of strings */ typedef struct st_mysqlnd_stmt_data MYSQLND_STMT_DATA; @@ -271,158 +311,87 @@ struct st_mysqlnd_stats }; -typedef struct st_mysqlnd_read_buffer { - zend_uchar * data; - size_t offset; - size_t size; - size_t len; - zend_bool (*is_empty)(struct st_mysqlnd_read_buffer *); - void (*read)(struct st_mysqlnd_read_buffer *, size_t count, zend_uchar * dest); - size_t (*bytes_left)(struct st_mysqlnd_read_buffer *); - void (*free_buffer)(struct st_mysqlnd_read_buffer **); -} MYSQLND_READ_BUFFER; +typedef enum_func_status (*func_mysqlnd_vio__init)(MYSQLND_VIO * const vio, MYSQLND_STATS * const stats, MYSQLND_ERROR_INFO * const error_info); +typedef void (*func_mysqlnd_vio__dtor)(MYSQLND_VIO * const vio, MYSQLND_STATS * const conn_stats, MYSQLND_ERROR_INFO * const error_info); +typedef enum_func_status (*func_mysqlnd_vio__connect)(MYSQLND_VIO * const vio, const MYSQLND_CSTRING scheme, const zend_bool persistent, MYSQLND_STATS * const conn_stats, MYSQLND_ERROR_INFO * const error_info); +typedef void (*func_mysqlnd_vio__close_stream)(MYSQLND_VIO * const vio, MYSQLND_STATS * const conn_stats, MYSQLND_ERROR_INFO * const error_info); +typedef php_stream * (*func_mysqlnd_vio__open_stream)(MYSQLND_VIO * const vio, const MYSQLND_CSTRING scheme, const zend_bool persistent, MYSQLND_STATS * const conn_stats, MYSQLND_ERROR_INFO * const error_info); +typedef php_stream * (*func_mysqlnd_vio__get_stream)(const MYSQLND_VIO * const vio); +typedef enum_func_status (*func_mysqlnd_vio__set_stream)(MYSQLND_VIO * const vio, php_stream * vio_stream); +typedef zend_bool (*func_mysqlnd_vio__has_valid_stream)(const MYSQLND_VIO * const vio); +typedef func_mysqlnd_vio__open_stream (*func_mysqlnd_vio__get_open_stream)(MYSQLND_VIO * const vio, const MYSQLND_CSTRING scheme, MYSQLND_ERROR_INFO * const error_info); -typedef enum_func_status (*func_mysqlnd_net__set_client_option)(MYSQLND_NET * const net, enum_mysqlnd_option option, const char * const value); -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); -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); -typedef size_t (*func_mysqlnd_net__consume_uneaten_data)(MYSQLND_NET * const net, enum php_mysqlnd_server_command cmd); -typedef void (*func_mysqlnd_net__free_contents)(MYSQLND_NET * net); -typedef enum_func_status (*func_mysqlnd_net__enable_ssl)(MYSQLND_NET * const net); -typedef enum_func_status (*func_mysqlnd_net__disable_ssl)(MYSQLND_NET * const net); -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); -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); -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); -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); -typedef enum_func_status (*func_mysqlnd_net__init)(MYSQLND_NET * const net, MYSQLND_STATS * const stats, MYSQLND_ERROR_INFO * const error_info); -typedef void (*func_mysqlnd_net__dtor)(MYSQLND_NET * const net, MYSQLND_STATS * const conn_stats, MYSQLND_ERROR_INFO * const error_info); -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); -typedef void (*func_mysqlnd_net__close_stream)(MYSQLND_NET * const net, MYSQLND_STATS * const conn_stats, MYSQLND_ERROR_INFO * const error_info); -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); -typedef php_stream * (*func_mysqlnd_net__get_stream)(const MYSQLND_NET * const net); -typedef php_stream * (*func_mysqlnd_net__set_stream)(MYSQLND_NET * const net, php_stream * net_stream); -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); -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); -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); - -struct st_mysqlnd_net_methods -{ - func_mysqlnd_net__init init; - func_mysqlnd_net__dtor dtor; - func_mysqlnd_net__connect_ex connect_ex; - func_mysqlnd_net__close_stream close_stream; - func_mysqlnd_net__open_stream open_pipe; - func_mysqlnd_net__open_stream open_tcp_or_unix; - - func_mysqlnd_net__get_stream get_stream; - func_mysqlnd_net__set_stream set_stream; - func_mysqlnd_net__get_open_stream get_open_stream; - - func_mysqlnd_net__post_connect_set_opt post_connect_set_opt; - - func_mysqlnd_net__set_client_option set_client_option; - func_mysqlnd_net__decode decode; - func_mysqlnd_net__encode encode; - func_mysqlnd_net__consume_uneaten_data consume_uneaten_data; - func_mysqlnd_net__free_contents free_contents; - func_mysqlnd_net__enable_ssl enable_ssl; - func_mysqlnd_net__disable_ssl disable_ssl; - - func_mysqlnd_net__network_read_ex network_read_ex; - func_mysqlnd_net__network_write_ex network_write_ex; - func_mysqlnd_net__send_ex send_ex; - func_mysqlnd_net__receive_ex receive_ex; - - func_mysqlnd_net__read_compressed_packet_from_stream_and_fill_read_buffer read_compressed_packet_from_stream_and_fill_read_buffer; +typedef enum_func_status (*func_mysqlnd_vio__set_client_option)(MYSQLND_VIO * const vio, enum_mysqlnd_client_option option, const char * const value); +typedef void (*func_mysqlnd_vio__post_connect_set_opt)(MYSQLND_VIO * const vio, const MYSQLND_CSTRING scheme, MYSQLND_STATS * const conn_stats, MYSQLND_ERROR_INFO * const error_info); - void * unused1; - void * unused2; - void * unused3; - void * unused4; - void * unused5; -}; +typedef enum_func_status (*func_mysqlnd_vio__enable_ssl)(MYSQLND_VIO * const vio); +typedef enum_func_status (*func_mysqlnd_vio__disable_ssl)(MYSQLND_VIO * const vio); +typedef enum_func_status (*func_mysqlnd_vio__network_read)(MYSQLND_VIO * const vio, zend_uchar * const buffer, const size_t count, MYSQLND_STATS * const stats, MYSQLND_ERROR_INFO * const error_info); +typedef size_t (*func_mysqlnd_vio__network_write)(MYSQLND_VIO * const vio, const zend_uchar * const buf, const size_t count, MYSQLND_STATS * const stats, MYSQLND_ERROR_INFO * const error_info); +typedef size_t (*func_mysqlnd_vio__consume_uneaten_data)(MYSQLND_VIO * const vio, enum php_mysqlnd_server_command cmd); -struct st_mysqlnd_packet_greet; -struct st_mysqlnd_packet_greet; -struct st_mysqlnd_packet_auth; -struct st_mysqlnd_packet_ok; -struct st_mysqlnd_packet_command; -struct st_mysqlnd_packet_eof; -struct st_mysqlnd_packet_rset_header; -struct st_mysqlnd_packet_res_field; -struct st_mysqlnd_packet_row; -struct st_mysqlnd_packet_stats; -struct st_mysqlnd_packet_prepare_response; -struct st_mysqlnd_packet_chg_user_resp; -struct st_mysqlnd_packet_auth_pam; -struct st_mysqlnd_packet_sha256_pk_request; -struct st_mysqlnd_packet_sha256_pk_request_response; +typedef void (*func_mysqlnd_vio__free_contents)(MYSQLND_VIO * vio); -typedef struct st_mysqlnd_packet_greet * (*func_mysqlnd_protocol__get_greet_packet)(MYSQLND_PROTOCOL * const protocol, zend_bool persistent); -typedef struct st_mysqlnd_packet_auth * (*func_mysqlnd_protocol__get_auth_packet)(MYSQLND_PROTOCOL * const protocol, zend_bool persistent); -typedef struct st_mysqlnd_packet_auth_response *(*func_mysqlnd_protocol__get_auth_response_packet)(MYSQLND_PROTOCOL * const protocol, zend_bool persistent); -typedef struct st_mysqlnd_packet_change_auth_response * (*func_mysqlnd_protocol__get_change_auth_response_packet)(MYSQLND_PROTOCOL * const protocol, zend_bool persistent); -typedef struct st_mysqlnd_packet_ok * (*func_mysqlnd_protocol__get_ok_packet)(MYSQLND_PROTOCOL * const protocol, zend_bool persistent); -typedef struct st_mysqlnd_packet_command * (*func_mysqlnd_protocol__get_command_packet)(MYSQLND_PROTOCOL * const protocol, zend_bool persistent); -typedef struct st_mysqlnd_packet_eof * (*func_mysqlnd_protocol__get_eof_packet)(MYSQLND_PROTOCOL * const protocol, zend_bool persistent); -typedef struct st_mysqlnd_packet_rset_header * (*func_mysqlnd_protocol__get_rset_header_packet)(MYSQLND_PROTOCOL * const protocol, zend_bool persistent); -typedef struct st_mysqlnd_packet_res_field * (*func_mysqlnd_protocol__get_result_field_packet)(MYSQLND_PROTOCOL * const protocol, zend_bool persistent); -typedef struct st_mysqlnd_packet_row * (*func_mysqlnd_protocol__get_row_packet)(MYSQLND_PROTOCOL * const protocol, zend_bool persistent); -typedef struct st_mysqlnd_packet_stats * (*func_mysqlnd_protocol__get_stats_packet)(MYSQLND_PROTOCOL * const protocol, zend_bool persistent); -typedef struct st_mysqlnd_packet_prepare_response *(*func_mysqlnd_protocol__get_prepare_response_packet)(MYSQLND_PROTOCOL * const protocol, zend_bool persistent); -typedef struct st_mysqlnd_packet_chg_user_resp*(*func_mysqlnd_protocol__get_change_user_response_packet)(MYSQLND_PROTOCOL * const protocol, zend_bool persistent); -typedef struct st_mysqlnd_packet_sha256_pk_request *(*func_mysqlnd_protocol__get_sha256_pk_request_packet)(MYSQLND_PROTOCOL * const protocol, zend_bool persistent); -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); - -struct st_mysqlnd_protocol_methods + +MYSQLND_CLASS_METHODS_TYPE(mysqlnd_vio) { - func_mysqlnd_protocol__get_greet_packet get_greet_packet; - func_mysqlnd_protocol__get_auth_packet get_auth_packet; - func_mysqlnd_protocol__get_auth_response_packet get_auth_response_packet; - func_mysqlnd_protocol__get_change_auth_response_packet get_change_auth_response_packet; - func_mysqlnd_protocol__get_ok_packet get_ok_packet; - func_mysqlnd_protocol__get_command_packet get_command_packet; - func_mysqlnd_protocol__get_eof_packet get_eof_packet; - func_mysqlnd_protocol__get_rset_header_packet get_rset_header_packet; - func_mysqlnd_protocol__get_result_field_packet get_result_field_packet; - func_mysqlnd_protocol__get_row_packet get_row_packet; - func_mysqlnd_protocol__get_stats_packet get_stats_packet; - func_mysqlnd_protocol__get_prepare_response_packet get_prepare_response_packet; - func_mysqlnd_protocol__get_change_user_response_packet get_change_user_response_packet; - func_mysqlnd_protocol__get_sha256_pk_request_packet get_sha256_pk_request_packet; - func_mysqlnd_protocol__get_sha256_pk_request_response_packet get_sha256_pk_request_response_packet; + func_mysqlnd_vio__init init; + func_mysqlnd_vio__dtor dtor; + func_mysqlnd_vio__connect connect; - void * unused1; - void * unused2; - void * unused3; + func_mysqlnd_vio__close_stream close_stream; + func_mysqlnd_vio__open_stream open_pipe; + func_mysqlnd_vio__open_stream open_tcp_or_unix; + + func_mysqlnd_vio__get_stream get_stream; + func_mysqlnd_vio__set_stream set_stream; + func_mysqlnd_vio__has_valid_stream has_valid_stream; + func_mysqlnd_vio__get_open_stream get_open_stream; + + func_mysqlnd_vio__set_client_option set_client_option; + func_mysqlnd_vio__post_connect_set_opt post_connect_set_opt; + + func_mysqlnd_vio__enable_ssl enable_ssl; + func_mysqlnd_vio__disable_ssl disable_ssl; + + func_mysqlnd_vio__network_read network_read; + func_mysqlnd_vio__network_write network_write; + + func_mysqlnd_vio__consume_uneaten_data consume_uneaten_data; + + func_mysqlnd_vio__free_contents free_contents; }; -typedef MYSQLND * (*func_mysqlnd_object_factory__get_connection)(zend_bool persistent); +MYSQLND_CLASS_METHODS_TYPE(mysqlnd_object_factory); + +typedef MYSQLND * (*func_mysqlnd_object_factory__get_connection)(MYSQLND_CLASS_METHODS_TYPE(mysqlnd_object_factory) * factory, const zend_bool persistent); typedef MYSQLND * (*func_mysqlnd_object_factory__clone_connection_object)(MYSQLND * conn); -typedef MYSQLND_STMT * (*func_mysqlnd_object_factory__get_prepared_statement)(MYSQLND_CONN_DATA * conn); -typedef MYSQLND_NET * (*func_mysqlnd_object_factory__get_io_channel)(zend_bool persistent, MYSQLND_STATS * stats, MYSQLND_ERROR_INFO * error_info); -typedef MYSQLND_PROTOCOL * (*func_mysqlnd_object_factory__get_protocol_decoder)(zend_bool persistent); +typedef MYSQLND_STMT * (*func_mysqlnd_object_factory__get_prepared_statement)(MYSQLND_CONN_DATA * conn, const zend_bool persistent); +typedef MYSQLND_PFC * (*func_mysqlnd_object_factory__get_pfc)(const zend_bool persistent, MYSQLND_STATS * stats, MYSQLND_ERROR_INFO * error_info); +typedef MYSQLND_VIO * (*func_mysqlnd_object_factory__get_vio)(const zend_bool persistent, MYSQLND_STATS * stats, MYSQLND_ERROR_INFO * error_info); +typedef MYSQLND_PROTOCOL_PAYLOAD_DECODER_FACTORY * (*func_mysqlnd_object_factory__get_protocol_payload_decoder_factory)(MYSQLND_CONN_DATA * conn, const zend_bool persistent); -struct st_mysqlnd_object_factory_methods +MYSQLND_CLASS_METHODS_TYPE(mysqlnd_object_factory) { func_mysqlnd_object_factory__get_connection get_connection; func_mysqlnd_object_factory__clone_connection_object clone_connection_object; func_mysqlnd_object_factory__get_prepared_statement get_prepared_statement; - func_mysqlnd_object_factory__get_io_channel get_io_channel; - func_mysqlnd_object_factory__get_protocol_decoder get_protocol_decoder; + func_mysqlnd_object_factory__get_pfc get_protocol_frame_codec; + func_mysqlnd_object_factory__get_vio get_vio; + func_mysqlnd_object_factory__get_protocol_payload_decoder_factory get_protocol_payload_decoder_factory; }; -typedef enum_func_status (*func_mysqlnd_conn_data__init)(MYSQLND_CONN_DATA * conn); -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); -typedef zend_ulong (*func_mysqlnd_conn_data__escape_string)(MYSQLND_CONN_DATA * const conn, char *newstr, const char *escapestr, size_t escapestr_len); +typedef enum_func_status (*func_mysqlnd_conn_data__connect)(MYSQLND_CONN_DATA * conn, MYSQLND_CSTRING hostname, MYSQLND_CSTRING username, MYSQLND_CSTRING password, MYSQLND_CSTRING database, unsigned int port, MYSQLND_CSTRING socket_or_pipe, unsigned int mysql_flags); +typedef zend_ulong (*func_mysqlnd_conn_data__escape_string)(MYSQLND_CONN_DATA * const conn, char *newstr, const char *escapestr, size_t escapestr_len); typedef enum_func_status (*func_mysqlnd_conn_data__set_charset)(MYSQLND_CONN_DATA * const conn, const char * const charset); -typedef enum_func_status (*func_mysqlnd_conn_data__query)(MYSQLND_CONN_DATA * conn, const char * query, unsigned int query_len); -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); +typedef enum_func_status (*func_mysqlnd_conn_data__query)(MYSQLND_CONN_DATA * conn, const char * const query, const size_t query_len); +typedef enum_func_status (*func_mysqlnd_conn_data__send_query)(MYSQLND_CONN_DATA * conn, const char * const query, const size_t query_len, enum_mysqlnd_send_query_type type, zval *read_cb, zval *err_cb); typedef enum_func_status (*func_mysqlnd_conn_data__reap_query)(MYSQLND_CONN_DATA * conn, enum_mysqlnd_reap_result_type type); typedef MYSQLND_RES * (*func_mysqlnd_conn_data__use_result)(MYSQLND_CONN_DATA * const conn, const unsigned int flags); typedef MYSQLND_RES * (*func_mysqlnd_conn_data__store_result)(MYSQLND_CONN_DATA * const conn, const unsigned int flags); @@ -436,7 +405,7 @@ typedef enum_func_status (*func_mysqlnd_conn_data__refresh_server)(MYSQLND_CONN_ typedef enum_func_status (*func_mysqlnd_conn_data__ping)(MYSQLND_CONN_DATA * const conn); typedef enum_func_status (*func_mysqlnd_conn_data__kill_connection)(MYSQLND_CONN_DATA * conn, unsigned int pid); -typedef enum_func_status (*func_mysqlnd_conn_data__select_db)(MYSQLND_CONN_DATA * const conn, const char * const db, unsigned int db_len); +typedef enum_func_status (*func_mysqlnd_conn_data__select_db)(MYSQLND_CONN_DATA * const conn, const char * const db, const size_t db_len); typedef enum_func_status (*func_mysqlnd_conn_data__server_dump_debug_information)(MYSQLND_CONN_DATA * const conn); 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); @@ -446,15 +415,14 @@ typedef const char * (*func_mysqlnd_conn_data__get_sqlstate)(const MYSQLND_CONN typedef uint64_t (*func_mysqlnd_conn_data__get_thread_id)(const MYSQLND_CONN_DATA * const conn); typedef void (*func_mysqlnd_conn_data__get_statistics)(const MYSQLND_CONN_DATA * const conn, zval *return_value ZEND_FILE_LINE_DC); -typedef zend_ulong (*func_mysqlnd_conn_data__get_server_version)(const MYSQLND_CONN_DATA * const conn); +typedef zend_ulong (*func_mysqlnd_conn_data__get_server_version)(const MYSQLND_CONN_DATA * const conn); typedef const char * (*func_mysqlnd_conn_data__get_server_information)(const MYSQLND_CONN_DATA * const conn); typedef enum_func_status (*func_mysqlnd_conn_data__get_server_statistics)(MYSQLND_CONN_DATA * conn, zend_string **message); typedef const char * (*func_mysqlnd_conn_data__get_host_information)(const MYSQLND_CONN_DATA * const conn); typedef unsigned int (*func_mysqlnd_conn_data__get_protocol_information)(const MYSQLND_CONN_DATA * const conn); typedef const char * (*func_mysqlnd_conn_data__get_last_message)(const MYSQLND_CONN_DATA * const conn); typedef const char * (*func_mysqlnd_conn_data__charset_name)(const MYSQLND_CONN_DATA * const conn); -typedef MYSQLND_RES * (*func_mysqlnd_conn_data__list_fields)(MYSQLND_CONN_DATA * conn, const char * table, const char * achtung_wild); -typedef MYSQLND_RES * (*func_mysqlnd_conn_data__list_method)(MYSQLND_CONN_DATA * conn, const char * query, const char * achtung_wild, char *par1); +typedef MYSQLND_RES * (*func_mysqlnd_conn_data__list_method)(MYSQLND_CONN_DATA * conn, const char * const query, const char * const achtung_wild, const char * const par1); typedef uint64_t (*func_mysqlnd_conn_data__get_last_insert_id)(const MYSQLND_CONN_DATA * const conn); typedef uint64_t (*func_mysqlnd_conn_data__get_affected_rows)(const MYSQLND_CONN_DATA * const conn); @@ -464,7 +432,7 @@ typedef unsigned int (*func_mysqlnd_conn_data__get_field_count)(const MYSQLND_C typedef unsigned int (*func_mysqlnd_conn_data__get_server_status)(const MYSQLND_CONN_DATA * const conn); typedef enum_func_status (*func_mysqlnd_conn_data__set_server_option)(MYSQLND_CONN_DATA * const conn, enum_mysqlnd_server_option option); -typedef enum_func_status (*func_mysqlnd_conn_data__set_client_option)(MYSQLND_CONN_DATA * const conn, enum_mysqlnd_option option, const char * const value); +typedef enum_func_status (*func_mysqlnd_conn_data__set_client_option)(MYSQLND_CONN_DATA * const conn, enum_mysqlnd_client_option option, const char * const value); typedef void (*func_mysqlnd_conn_data__free_contents)(MYSQLND_CONN_DATA * conn);/* private */ typedef void (*func_mysqlnd_conn_data__free_options)(MYSQLND_CONN_DATA * conn); /* private */ typedef void (*func_mysqlnd_conn_data__dtor)(MYSQLND_CONN_DATA * conn); /* private */ @@ -473,11 +441,9 @@ typedef enum_func_status (*func_mysqlnd_conn_data__query_read_result_set_header) typedef MYSQLND_CONN_DATA * (*func_mysqlnd_conn_data__get_reference)(MYSQLND_CONN_DATA * const conn); typedef enum_func_status (*func_mysqlnd_conn_data__free_reference)(MYSQLND_CONN_DATA * const conn); -typedef enum mysqlnd_connection_state (*func_mysqlnd_conn_data__get_state)(const MYSQLND_CONN_DATA * const conn); -typedef void (*func_mysqlnd_conn_data__set_state)(MYSQLND_CONN_DATA * const conn, enum mysqlnd_connection_state new_state); -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); -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); +typedef enum_func_status (*func_mysqlnd_conn_data__send_command_do_request)(MYSQLND_CONN_DATA * const conn, const enum php_mysqlnd_server_command command, const zend_uchar * const arg, const size_t arg_len, const zend_bool silent, const zend_bool ignore_upsert_status); +typedef enum_func_status (*func_mysqlnd_conn_data__send_command_handle_response)(MYSQLND_CONN_DATA * const conn, const enum mysqlnd_packet_type ok_packet, const zend_bool silent, const enum php_mysqlnd_server_command command, const zend_bool ignore_upsert_status); typedef enum_func_status (*func_mysqlnd_conn_data__restart_psession)(MYSQLND_CONN_DATA * conn); typedef enum_func_status (*func_mysqlnd_conn_data__end_psession)(MYSQLND_CONN_DATA * conn); @@ -496,24 +462,25 @@ typedef void (*func_mysqlnd_conn_data__tx_cor_options_to_string)(const MYSQLN typedef enum_func_status (*func_mysqlnd_conn_data__tx_savepoint)(MYSQLND_CONN_DATA * conn, const char * const name); typedef enum_func_status (*func_mysqlnd_conn_data__tx_savepoint_release)(MYSQLND_CONN_DATA * conn, const char * const name); -typedef enum_func_status (*func_mysqlnd_conn_data__local_tx_start)(MYSQLND_CONN_DATA * conn, size_t this_func); -typedef enum_func_status (*func_mysqlnd_conn_data__local_tx_end)(MYSQLND_CONN_DATA * conn, size_t this_func, enum_func_status status); +typedef enum_func_status (*func_mysqlnd_conn_data__local_tx_start)(MYSQLND_CONN_DATA * conn, const size_t this_func); +typedef enum_func_status (*func_mysqlnd_conn_data__local_tx_end)(MYSQLND_CONN_DATA * conn, const size_t this_func, const enum_func_status status); typedef enum_func_status (*func_mysqlnd_conn_data__execute_init_commands)(MYSQLND_CONN_DATA * conn); typedef unsigned int (*func_mysqlnd_conn_data__get_updated_connect_flags)(MYSQLND_CONN_DATA * conn, unsigned int mysql_flags); -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); -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); +typedef enum_func_status (*func_mysqlnd_conn_data__connect_handshake)(MYSQLND_CONN_DATA * conn, const MYSQLND_CSTRING * const scheme, const MYSQLND_CSTRING * const username, const MYSQLND_CSTRING * const password, const MYSQLND_CSTRING * const database, const unsigned int mysql_flags); typedef struct st_mysqlnd_authentication_plugin * (*func_mysqlnd_conn_data__fetch_auth_plugin_by_name)(const char * const requested_protocol); -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); +typedef enum_func_status (*func_mysqlnd_conn_data__set_client_option_2d)(MYSQLND_CONN_DATA * const conn, const enum_mysqlnd_client_option option, const char * const key, const char * const value); -typedef unsigned int (*func_mysqlnd_conn_data__negotiate_client_api_capabilities)(MYSQLND_CONN_DATA * const conn, const unsigned int flags); -typedef unsigned int (*func_mysqlnd_conn_data__get_client_api_capabilities)(const MYSQLND_CONN_DATA * const conn); +typedef size_t (*func_mysqlnd_conn_data__negotiate_client_api_capabilities)(MYSQLND_CONN_DATA * const conn, const size_t flags); +typedef size_t (*func_mysqlnd_conn_data__get_client_api_capabilities)(const MYSQLND_CONN_DATA * const conn); +typedef MYSQLND_STRING (*func_mysqlnd_conn_data__get_scheme)(MYSQLND_CONN_DATA * conn, MYSQLND_CSTRING hostname, MYSQLND_CSTRING *socket_or_pipe, unsigned int port, zend_bool * unix_socket, zend_bool * named_pipe); -struct st_mysqlnd_conn_data_methods + + +MYSQLND_CLASS_METHODS_TYPE(mysqlnd_conn_data) { - func_mysqlnd_conn_data__init init; func_mysqlnd_conn_data__connect connect; func_mysqlnd_conn_data__escape_string escape_string; func_mysqlnd_conn_data__set_charset set_charset; @@ -549,7 +516,6 @@ struct st_mysqlnd_conn_data_methods func_mysqlnd_conn_data__get_protocol_information get_protocol_information; func_mysqlnd_conn_data__get_last_message get_last_message; func_mysqlnd_conn_data__charset_name charset_name; - func_mysqlnd_conn_data__list_fields list_fields; func_mysqlnd_conn_data__list_method list_method; func_mysqlnd_conn_data__get_last_insert_id get_last_insert_id; @@ -570,11 +536,6 @@ struct st_mysqlnd_conn_data_methods func_mysqlnd_conn_data__get_reference get_reference; func_mysqlnd_conn_data__free_reference free_reference; - func_mysqlnd_conn_data__get_state get_state; - func_mysqlnd_conn_data__set_state set_state; - - func_mysqlnd_conn_data__simple_command simple_command; - func_mysqlnd_conn_data__simple_command_handle_response simple_command_handle_response; func_mysqlnd_conn_data__restart_psession restart_psession; func_mysqlnd_conn_data__end_psession end_psession; @@ -598,22 +559,23 @@ struct st_mysqlnd_conn_data_methods func_mysqlnd_conn_data__execute_init_commands execute_init_commands; func_mysqlnd_conn_data__get_updated_connect_flags get_updated_connect_flags; func_mysqlnd_conn_data__connect_handshake connect_handshake; - func_mysqlnd_conn_data__simple_command_send_request simple_command_send_request; func_mysqlnd_conn_data__fetch_auth_plugin_by_name fetch_auth_plugin_by_name; func_mysqlnd_conn_data__set_client_option_2d set_client_option_2d; func_mysqlnd_conn_data__negotiate_client_api_capabilities negotiate_client_api_capabilities; func_mysqlnd_conn_data__get_client_api_capabilities get_client_api_capabilities; + + func_mysqlnd_conn_data__get_scheme get_scheme; }; -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); +typedef enum_func_status (*func_mysqlnd_data__connect)(MYSQLND * conn, const MYSQLND_CSTRING hostname, const MYSQLND_CSTRING username, const MYSQLND_CSTRING password, const MYSQLND_CSTRING database, unsigned int port, const MYSQLND_CSTRING socket_or_pipe, unsigned int mysql_flags); typedef MYSQLND * (*func_mysqlnd_conn__clone_object)(MYSQLND * const conn); typedef void (*func_mysqlnd_conn__dtor)(MYSQLND * conn); -typedef enum_func_status (*func_mysqlnd_conn__close)(MYSQLND * conn, enum_connection_close_type close_type); +typedef enum_func_status (*func_mysqlnd_conn__close)(MYSQLND * conn, const enum_connection_close_type close_type); -struct st_mysqlnd_conn_methods +MYSQLND_CLASS_METHODS_TYPE(mysqlnd_conn) { func_mysqlnd_data__connect connect; func_mysqlnd_conn__clone_object clone_object; @@ -621,13 +583,14 @@ struct st_mysqlnd_conn_methods func_mysqlnd_conn__close close; }; + /* for decoding - binary or text protocol */ typedef enum_func_status (*func_mysqlnd_res__row_decoder)(MYSQLND_MEMORY_POOL_CHUNK * row_buffer, zval * fields, unsigned int field_count, const MYSQLND_FIELD * fields_metadata, zend_bool as_int_or_float, MYSQLND_STATS * stats); -typedef MYSQLND_RES * (*func_mysqlnd_res__use_result)(MYSQLND_RES * const result, zend_bool ps_protocol); +typedef MYSQLND_RES * (*func_mysqlnd_res__use_result)(MYSQLND_RES * const result, const zend_bool ps_protocol); typedef MYSQLND_RES * (*func_mysqlnd_res__store_result)(MYSQLND_RES * result, MYSQLND_CONN_DATA * const conn, const unsigned int flags); 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); typedef MYSQLND_ROW_C (*func_mysqlnd_res__fetch_row_c)(MYSQLND_RES *result); @@ -644,11 +607,11 @@ typedef const MYSQLND_FIELD *(*func_mysqlnd_res__fetch_field_direct)(MYSQLND_RES typedef const MYSQLND_FIELD *(*func_mysqlnd_res__fetch_fields)(MYSQLND_RES * const result); typedef enum_func_status (*func_mysqlnd_res__read_result_metadata)(MYSQLND_RES * result, MYSQLND_CONN_DATA * conn); -typedef zend_ulong * (*func_mysqlnd_res__fetch_lengths)(MYSQLND_RES * const result); +typedef const size_t * (*func_mysqlnd_res__fetch_lengths)(MYSQLND_RES * const result); 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); typedef void (*func_mysqlnd_res__free_result_buffers)(MYSQLND_RES * result); /* private */ -typedef enum_func_status (*func_mysqlnd_res__free_result)(MYSQLND_RES * result, zend_bool implicit); +typedef enum_func_status (*func_mysqlnd_res__free_result)(MYSQLND_RES * result, const zend_bool implicit); typedef void (*func_mysqlnd_res__free_result_internal)(MYSQLND_RES *result); typedef void (*func_mysqlnd_res__free_result_contents)(MYSQLND_RES *result); typedef void (*func_mysqlnd_res__free_buffered_data)(MYSQLND_RES *result); @@ -657,7 +620,7 @@ typedef void (*func_mysqlnd_res__unbuffered_free_last_data)(MYSQLND_RES *resu typedef MYSQLND_RES_METADATA * (*func_mysqlnd_res__result_meta_init)(unsigned int field_count, zend_bool persistent); -struct st_mysqlnd_res_methods +MYSQLND_CLASS_METHODS_TYPE(mysqlnd_res) { mysqlnd_fetch_row_func fetch_row; @@ -694,12 +657,12 @@ struct st_mysqlnd_res_methods }; -typedef uint64_t (*func_mysqlnd_result_unbuffered__num_rows)(const MYSQLND_RES_UNBUFFERED * const result); -typedef zend_ulong * (*func_mysqlnd_result_unbuffered__fetch_lengths)(MYSQLND_RES_UNBUFFERED * const result); -typedef void (*func_mysqlnd_result_unbuffered__free_last_data)(MYSQLND_RES_UNBUFFERED * result, MYSQLND_STATS * const global_stats); -typedef void (*func_mysqlnd_result_unbuffered__free_result)(MYSQLND_RES_UNBUFFERED * const result, MYSQLND_STATS * const global_stats); +typedef uint64_t (*func_mysqlnd_result_unbuffered__num_rows)(const MYSQLND_RES_UNBUFFERED * const result); +typedef const size_t * (*func_mysqlnd_result_unbuffered__fetch_lengths)(MYSQLND_RES_UNBUFFERED * const result); +typedef void (*func_mysqlnd_result_unbuffered__free_last_data)(MYSQLND_RES_UNBUFFERED * result, MYSQLND_STATS * const global_stats); +typedef void (*func_mysqlnd_result_unbuffered__free_result)(MYSQLND_RES_UNBUFFERED * const result, MYSQLND_STATS * const global_stats); -struct st_mysqlnd_result_unbuffered_methods +MYSQLND_CLASS_METHODS_TYPE(mysqlnd_result_unbuffered) { mysqlnd_fetch_row_func fetch_row; func_mysqlnd_res__row_decoder row_decoder; @@ -712,11 +675,11 @@ struct st_mysqlnd_result_unbuffered_methods typedef uint64_t (*func_mysqlnd_result_buffered__num_rows)(const MYSQLND_RES_BUFFERED * const result); typedef enum_func_status (*func_mysqlnd_result_buffered__initialize_result_set_rest)(MYSQLND_RES_BUFFERED * const result, MYSQLND_RES_METADATA * const meta, MYSQLND_STATS * stats, zend_bool int_and_float_native); -typedef zend_ulong * (*func_mysqlnd_result_buffered__fetch_lengths)(MYSQLND_RES_BUFFERED * const result); +typedef const size_t * (*func_mysqlnd_result_buffered__fetch_lengths)(MYSQLND_RES_BUFFERED * const result); typedef enum_func_status (*func_mysqlnd_result_buffered__data_seek)(MYSQLND_RES_BUFFERED * const result, const uint64_t row); typedef void (*func_mysqlnd_result_buffered__free_result)(MYSQLND_RES_BUFFERED * const result); -struct st_mysqlnd_result_buffered_methods +MYSQLND_CLASS_METHODS_TYPE(mysqlnd_result_buffered) { mysqlnd_fetch_row_func fetch_row; func_mysqlnd_res__row_decoder row_decoder; @@ -734,10 +697,10 @@ typedef const MYSQLND_FIELD * (*func_mysqlnd_res_meta__fetch_fields)(MYSQLND_RES typedef MYSQLND_FIELD_OFFSET (*func_mysqlnd_res_meta__field_tell)(const MYSQLND_RES_METADATA * const meta); typedef MYSQLND_FIELD_OFFSET (*func_mysqlnd_res_meta__field_seek)(MYSQLND_RES_METADATA * const meta, const MYSQLND_FIELD_OFFSET field_offset); typedef enum_func_status (*func_mysqlnd_res_meta__read_metadata)(MYSQLND_RES_METADATA * const meta, MYSQLND_CONN_DATA * conn); -typedef MYSQLND_RES_METADATA * (*func_mysqlnd_res_meta__clone_metadata)(const MYSQLND_RES_METADATA * const meta, zend_bool persistent); +typedef MYSQLND_RES_METADATA * (*func_mysqlnd_res_meta__clone_metadata)(const MYSQLND_RES_METADATA * const meta, const zend_bool persistent); typedef void (*func_mysqlnd_res_meta__free_metadata)(MYSQLND_RES_METADATA * meta); -struct st_mysqlnd_res_meta_methods +MYSQLND_CLASS_METHODS_TYPE(mysqlnd_res_meta) { func_mysqlnd_res_meta__fetch_field fetch_field; func_mysqlnd_res_meta__fetch_field_direct fetch_field_direct; @@ -750,8 +713,8 @@ struct st_mysqlnd_res_meta_methods }; -typedef enum_func_status (*func_mysqlnd_stmt__prepare)(MYSQLND_STMT * const stmt, const char * const query, unsigned int query_len); -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); +typedef enum_func_status (*func_mysqlnd_stmt__prepare)(MYSQLND_STMT * const stmt, const char * const query, const size_t query_len); +typedef enum_func_status (*func_mysqlnd_stmt__send_execute)(MYSQLND_STMT * const s, const enum_mysqlnd_send_execute_type type, zval * read_cb, zval * err_cb); typedef enum_func_status (*func_mysqlnd_stmt__execute)(MYSQLND_STMT * const stmt); typedef MYSQLND_RES * (*func_mysqlnd_stmt__use_result)(MYSQLND_STMT * const stmt); typedef MYSQLND_RES * (*func_mysqlnd_stmt__store_result)(MYSQLND_STMT * const stmt); @@ -761,7 +724,7 @@ typedef enum_func_status (*func_mysqlnd_stmt__next_result)(MYSQLND_STMT * const typedef enum_func_status (*func_mysqlnd_stmt__free_result)(MYSQLND_STMT * const stmt); typedef enum_func_status (*func_mysqlnd_stmt__seek_data)(const MYSQLND_STMT * const stmt, uint64_t row); typedef enum_func_status (*func_mysqlnd_stmt__reset)(MYSQLND_STMT * const stmt); -typedef enum_func_status (*func_mysqlnd_stmt__net_close)(MYSQLND_STMT * const stmt, zend_bool implicit); /* private */ +typedef enum_func_status (*func_mysqlnd_stmt__close_on_server)(MYSQLND_STMT * const stmt, zend_bool implicit); /* private */ typedef enum_func_status (*func_mysqlnd_stmt__dtor)(MYSQLND_STMT * const stmt, zend_bool implicit); /* use this for mysqlnd_stmt_close */ typedef enum_func_status (*func_mysqlnd_stmt__fetch)(MYSQLND_STMT * const stmt, zend_bool * const fetched_anything); typedef enum_func_status (*func_mysqlnd_stmt__bind_parameters)(MYSQLND_STMT * const stmt, MYSQLND_PARAM_BIND * const param_bind); @@ -794,7 +757,7 @@ typedef void (*func_mysqlnd_stmt__free_stmt_content)(MYSQLND_STMT * const s) typedef enum_func_status (*func_mysqlnd_stmt__flush)(MYSQLND_STMT * const stmt); typedef void (*func_mysqlnd_stmt__free_stmt_result)(MYSQLND_STMT * const s); -struct st_mysqlnd_stmt_methods +MYSQLND_CLASS_METHODS_TYPE(mysqlnd_stmt) { func_mysqlnd_stmt__prepare prepare; func_mysqlnd_stmt__send_execute send_execute; @@ -807,7 +770,7 @@ struct st_mysqlnd_stmt_methods func_mysqlnd_stmt__free_result free_result; func_mysqlnd_stmt__seek_data seek_data; func_mysqlnd_stmt__reset reset; - func_mysqlnd_stmt__net_close net_close; + func_mysqlnd_stmt__close_on_server close_on_server; func_mysqlnd_stmt__dtor dtor; func_mysqlnd_stmt__fetch fetch; @@ -854,103 +817,96 @@ struct st_mysqlnd_stmt_methods }; -struct st_mysqlnd_net_data +struct st_mysqlnd_vio_data { php_stream *stream; - zend_bool compressed; zend_bool ssl; + MYSQLND_VIO_OPTIONS options; #ifdef MYSQLND_DO_WIRE_CHECK_BEFORE_COMMAND zend_uchar last_command; #else zend_uchar unused_pad1; #endif - MYSQLND_NET_OPTIONS options; - - unsigned int refcount; zend_bool persistent; - struct st_mysqlnd_net_methods m; + MYSQLND_CLASS_METHODS_TYPE(mysqlnd_vio) m; }; -struct st_mysqlnd_net +struct st_mysqlnd_vio { - /* cmd buffer */ - MYSQLND_CMD_BUFFER cmd_buffer; + struct st_mysqlnd_vio_data * data; - struct st_mysqlnd_net_data * data; + zend_bool persistent; +}; -#ifdef MYSQLND_COMPRESSION_ENABLED - MYSQLND_READ_BUFFER * uncompressed_data; -#else - void * unused_pad1; -#endif - zend_bool persistent; - /* sequence for simple checking of correct packets */ - zend_uchar packet_no; - zend_uchar compressed_envelope_packet_no; +struct st_mysqlnd_protocol_command +{ + enum_func_status (*run)(void *cmd); + void (*free_command)(void * cmd); }; +typedef struct st_mysqlnd_protocol_command * (*func_mysqlnd__command_factory)(enum php_mysqlnd_server_command command, ...); + -struct st_mysqlnd_protocol + +typedef struct st_mysqlnd_connection_state MYSQLND_CONNECTION_STATE; +typedef enum mysqlnd_connection_state (*func_mysqlnd_connection_state__get)(const MYSQLND_CONNECTION_STATE * const state_struct); +typedef void (*func_mysqlnd_connection_state__set)(MYSQLND_CONNECTION_STATE * const state_struct, const enum mysqlnd_connection_state state); + + +MYSQLND_CLASS_METHODS_TYPE(mysqlnd_connection_state) { - zend_bool persistent; - struct st_mysqlnd_protocol_methods m; + func_mysqlnd_connection_state__get get; + func_mysqlnd_connection_state__set set; }; +struct st_mysqlnd_connection_state +{ + enum mysqlnd_connection_state state; + + MYSQLND_CLASS_METHODS_TYPE(mysqlnd_connection_state) *m; +}; struct st_mysqlnd_connection_data { /* Operation related */ - MYSQLND_NET * net; - MYSQLND_PROTOCOL * protocol; + MYSQLND_PFC * protocol_frame_codec; + MYSQLND_VIO * vio; + MYSQLND_PROTOCOL_PAYLOAD_DECODER_FACTORY * payload_decoder_factory; /* Information related */ - char *host; - unsigned int host_len; - char *unix_socket; - unsigned int unix_socket_len; - char *user; - unsigned int user_len; - char *passwd; - unsigned int passwd_len; - char *scheme; - unsigned int scheme_len; + MYSQLND_STRING hostname; + MYSQLND_STRING unix_socket; + MYSQLND_STRING username; + MYSQLND_STRING password; + MYSQLND_STRING scheme; uint64_t thread_id; char *server_version; char *host_info; - zend_uchar *auth_plugin_data; - size_t auth_plugin_data_len; + MYSQLND_STRING authentication_plugin_data; const MYSQLND_CHARSET *charset; const MYSQLND_CHARSET *greet_charset; - char *connect_or_select_db; - unsigned int connect_or_select_db_len; + MYSQLND_STRING connect_or_select_db; MYSQLND_INFILE infile; unsigned int protocol_version; - zend_ulong max_packet_size; unsigned int port; - zend_ulong client_flag; - zend_ulong server_capabilities; + zend_ulong server_capabilities; /* For UPSERT queries */ MYSQLND_UPSERT_STATUS * upsert_status; MYSQLND_UPSERT_STATUS upsert_status_impl; - char *last_message; - unsigned int last_message_len; + MYSQLND_STRING last_message; /* If error packet, we use these */ MYSQLND_ERROR_INFO * error_info; MYSQLND_ERROR_INFO error_info_impl; - /* - To prevent queries during unbuffered fetches. Also to - mark the connection as destroyed for garbage collection. - */ - enum mysqlnd_connection_state state; - enum_mysqlnd_query_type last_query_type; + MYSQLND_CONNECTION_STATE state; + enum_mysqlnd_query_type last_query_type; /* Temporary storage between query and (use|store)_result() call */ MYSQLND_RES *current_result; @@ -967,20 +923,23 @@ struct st_mysqlnd_connection_data unsigned int field_count; /* options */ - MYSQLND_OPTIONS * options; - MYSQLND_OPTIONS options_impl; + MYSQLND_SESSION_OPTIONS * options; + MYSQLND_SESSION_OPTIONS options_impl; /* stats */ MYSQLND_STATS * stats; - unsigned int client_api_capabilities; + size_t client_api_capabilities; zval async_read_cb; zval async_err_cb; zend_bool in_async_read_cb; zend_bool in_async_err_cb; - struct st_mysqlnd_conn_data_methods * m; + MYSQLND_CLASS_METHODS_TYPE(mysqlnd_object_factory) object_factory; + func_mysqlnd__command_factory command_factory; + + MYSQLND_CLASS_METHODS_TYPE(mysqlnd_conn_data) * m; /* persistent connection */ zend_bool persistent; @@ -991,10 +950,192 @@ struct st_mysqlnd_connection { MYSQLND_CONN_DATA * data; zend_bool persistent; - struct st_mysqlnd_conn_methods * m; + MYSQLND_CLASS_METHODS_TYPE(mysqlnd_conn) * m; +}; + + + +struct st_mysqlnd_packet_greet; +struct st_mysqlnd_packet_greet; +struct st_mysqlnd_packet_auth; +struct st_mysqlnd_packet_ok; +struct st_mysqlnd_packet_command; +struct st_mysqlnd_packet_eof; +struct st_mysqlnd_packet_rset_header; +struct st_mysqlnd_packet_res_field; +struct st_mysqlnd_packet_row; +struct st_mysqlnd_packet_stats; +struct st_mysqlnd_packet_prepare_response; +struct st_mysqlnd_packet_chg_user_resp; +struct st_mysqlnd_packet_auth_pam; +struct st_mysqlnd_packet_sha256_pk_request; +struct st_mysqlnd_packet_sha256_pk_request_response; + +typedef struct st_mysqlnd_packet_greet * (*func_mysqlnd_protocol_payload_decoder_factory__get_greet_packet)(MYSQLND_PROTOCOL_PAYLOAD_DECODER_FACTORY * const factory, const zend_bool persistent); +typedef struct st_mysqlnd_packet_auth * (*func_mysqlnd_protocol_payload_decoder_factory__get_auth_packet)(MYSQLND_PROTOCOL_PAYLOAD_DECODER_FACTORY * const factory, const zend_bool persistent); +typedef struct st_mysqlnd_packet_auth_response *(*func_mysqlnd_protocol_payload_decoder_factory__get_auth_response_packet)(MYSQLND_PROTOCOL_PAYLOAD_DECODER_FACTORY * const factory, const zend_bool persistent); +typedef struct st_mysqlnd_packet_change_auth_response * (*func_mysqlnd_protocol_payload_decoder_factory__get_change_auth_response_packet)(MYSQLND_PROTOCOL_PAYLOAD_DECODER_FACTORY * const factory, const zend_bool persistent); +typedef struct st_mysqlnd_packet_ok * (*func_mysqlnd_protocol_payload_decoder_factory__get_ok_packet)(MYSQLND_PROTOCOL_PAYLOAD_DECODER_FACTORY * const factory, const zend_bool persistent); +typedef struct st_mysqlnd_packet_command * (*func_mysqlnd_protocol_payload_decoder_factory__get_command_packet)(MYSQLND_PROTOCOL_PAYLOAD_DECODER_FACTORY * const factory, const zend_bool persistent); +typedef struct st_mysqlnd_packet_eof * (*func_mysqlnd_protocol_payload_decoder_factory__get_eof_packet)(MYSQLND_PROTOCOL_PAYLOAD_DECODER_FACTORY * const factory, const zend_bool persistent); +typedef struct st_mysqlnd_packet_rset_header * (*func_mysqlnd_protocol_payload_decoder_factory__get_rset_header_packet)(MYSQLND_PROTOCOL_PAYLOAD_DECODER_FACTORY * const factory, const zend_bool persistent); +typedef struct st_mysqlnd_packet_res_field * (*func_mysqlnd_protocol_payload_decoder_factory__get_result_field_packet)(MYSQLND_PROTOCOL_PAYLOAD_DECODER_FACTORY * const factory, const zend_bool persistent); +typedef struct st_mysqlnd_packet_row * (*func_mysqlnd_protocol_payload_decoder_factory__get_row_packet)(MYSQLND_PROTOCOL_PAYLOAD_DECODER_FACTORY * const factory, const zend_bool persistent); +typedef struct st_mysqlnd_packet_stats * (*func_mysqlnd_protocol_payload_decoder_factory__get_stats_packet)(MYSQLND_PROTOCOL_PAYLOAD_DECODER_FACTORY * const factory, const zend_bool persistent); +typedef struct st_mysqlnd_packet_prepare_response *(*func_mysqlnd_protocol_payload_decoder_factory__get_prepare_response_packet)(MYSQLND_PROTOCOL_PAYLOAD_DECODER_FACTORY * const factory, const zend_bool persistent); +typedef struct st_mysqlnd_packet_chg_user_resp*(*func_mysqlnd_protocol_payload_decoder_factory__get_change_user_response_packet)(MYSQLND_PROTOCOL_PAYLOAD_DECODER_FACTORY * const factory, const zend_bool persistent); +typedef struct st_mysqlnd_packet_sha256_pk_request *(*func_mysqlnd_protocol_payload_decoder_factory__get_sha256_pk_request_packet)(MYSQLND_PROTOCOL_PAYLOAD_DECODER_FACTORY * const factory, const zend_bool persistent); +typedef struct st_mysqlnd_packet_sha256_pk_request_response *(*func_mysqlnd_protocol_payload_decoder_factory__get_sha256_pk_request_response_packet)(MYSQLND_PROTOCOL_PAYLOAD_DECODER_FACTORY * const factory, const zend_bool persistent); + +typedef enum_func_status (*func_mysqlnd_protocol_payload_decoder_factory__send_command)( + MYSQLND_PROTOCOL_PAYLOAD_DECODER_FACTORY * payload_decoder_factory, + const enum php_mysqlnd_server_command command, + const zend_uchar * const arg, const size_t arg_len, + const zend_bool silent, + + MYSQLND_CONNECTION_STATE * connection_state, + MYSQLND_ERROR_INFO * error_info, + MYSQLND_UPSERT_STATUS * upsert_status, + MYSQLND_STATS * stats, + func_mysqlnd_conn_data__send_close send_close, + void * send_close_ctx); + +typedef enum_func_status (*func_mysqlnd_protocol_payload_decoder_factory__send_command_handle_OK)( + MYSQLND_PROTOCOL_PAYLOAD_DECODER_FACTORY * const payload_decoder_factory, + MYSQLND_ERROR_INFO * const error_info, + MYSQLND_UPSERT_STATUS * const upsert_status, + const zend_bool ignore_upsert_status, /* actually used only by LOAD DATA. COM_QUERY and COM_EXECUTE handle the responses themselves */ + MYSQLND_STRING * const last_message, + const zend_bool last_message_persistent); + +typedef enum_func_status (*func_mysqlnd_protocol_payload_decoder_factory__send_command_handle_EOF)( + MYSQLND_PROTOCOL_PAYLOAD_DECODER_FACTORY * const payload_decoder_factory, + MYSQLND_ERROR_INFO * const error_info, + MYSQLND_UPSERT_STATUS * const upsert_status); + +typedef enum_func_status (*func_mysqlnd_protocol_payload_decoder_factory__send_command_handle_response)( + MYSQLND_PROTOCOL_PAYLOAD_DECODER_FACTORY * payload_decoder_factory, + const enum mysqlnd_packet_type ok_packet, + const zend_bool silent, + const enum php_mysqlnd_server_command command, + const zend_bool ignore_upsert_status, /* actually used only by LOAD DATA. COM_QUERY and COM_EXECUTE handle the responses themselves */ + + MYSQLND_ERROR_INFO * error_info, + MYSQLND_UPSERT_STATUS * upsert_status, + MYSQLND_STRING * last_message, + zend_bool last_message_persistent); + + +MYSQLND_CLASS_METHODS_TYPE(mysqlnd_protocol_payload_decoder_factory) +{ + func_mysqlnd_protocol_payload_decoder_factory__get_greet_packet get_greet_packet; + func_mysqlnd_protocol_payload_decoder_factory__get_auth_packet get_auth_packet; + func_mysqlnd_protocol_payload_decoder_factory__get_auth_response_packet get_auth_response_packet; + func_mysqlnd_protocol_payload_decoder_factory__get_change_auth_response_packet get_change_auth_response_packet; + func_mysqlnd_protocol_payload_decoder_factory__get_ok_packet get_ok_packet; + func_mysqlnd_protocol_payload_decoder_factory__get_command_packet get_command_packet; + func_mysqlnd_protocol_payload_decoder_factory__get_eof_packet get_eof_packet; + func_mysqlnd_protocol_payload_decoder_factory__get_rset_header_packet get_rset_header_packet; + func_mysqlnd_protocol_payload_decoder_factory__get_result_field_packet get_result_field_packet; + func_mysqlnd_protocol_payload_decoder_factory__get_row_packet get_row_packet; + func_mysqlnd_protocol_payload_decoder_factory__get_stats_packet get_stats_packet; + func_mysqlnd_protocol_payload_decoder_factory__get_prepare_response_packet get_prepare_response_packet; + func_mysqlnd_protocol_payload_decoder_factory__get_change_user_response_packet get_change_user_response_packet; + func_mysqlnd_protocol_payload_decoder_factory__get_sha256_pk_request_packet get_sha256_pk_request_packet; + func_mysqlnd_protocol_payload_decoder_factory__get_sha256_pk_request_response_packet get_sha256_pk_request_response_packet; + + func_mysqlnd_protocol_payload_decoder_factory__send_command send_command; + func_mysqlnd_protocol_payload_decoder_factory__send_command_handle_response send_command_handle_response; + func_mysqlnd_protocol_payload_decoder_factory__send_command_handle_OK send_command_handle_OK; + func_mysqlnd_protocol_payload_decoder_factory__send_command_handle_EOF send_command_handle_EOF; +}; + +struct st_mysqlnd_protocol_payload_decoder_factory +{ + MYSQLND_CONN_DATA * conn; + zend_bool persistent; + MYSQLND_CLASS_METHODS_TYPE(mysqlnd_protocol_payload_decoder_factory) m; }; +typedef struct st_mysqlnd_read_buffer { + zend_uchar * data; + size_t offset; + size_t size; + size_t len; + zend_bool (*is_empty)(const struct st_mysqlnd_read_buffer *); + void (*read)(struct st_mysqlnd_read_buffer *, size_t count, zend_uchar * dest); + size_t (*bytes_left)(const struct st_mysqlnd_read_buffer *); + void (*free_buffer)(struct st_mysqlnd_read_buffer **); +} MYSQLND_READ_BUFFER; + + + +typedef enum_func_status (*func_mysqlnd_pfc__init)(MYSQLND_PFC * const pfc, MYSQLND_STATS * const stats, MYSQLND_ERROR_INFO * const error_info); +typedef void (*func_mysqlnd_pfc__dtor)(MYSQLND_PFC * const pfc, MYSQLND_STATS * const conn_stats, MYSQLND_ERROR_INFO * const error_info); +typedef enum_func_status (*func_mysqlnd_pfc__reset)(MYSQLND_PFC * const pfc, MYSQLND_STATS * const conn_stats, MYSQLND_ERROR_INFO * const error_info); +typedef enum_func_status (*func_mysqlnd_pfc__set_client_option)(MYSQLND_PFC * const pfc, enum_mysqlnd_client_option option, const char * const value); +typedef enum_func_status (*func_mysqlnd_pfc__decode)(zend_uchar * uncompressed_data, const size_t uncompressed_data_len, const zend_uchar * const compressed_data, const size_t compressed_data_len); +typedef enum_func_status (*func_mysqlnd_pfc__encode)(zend_uchar * compress_buffer, size_t * compress_buffer_len, const zend_uchar * const uncompressed_data, const size_t uncompressed_data_len); +typedef size_t (*func_mysqlnd_pfc__send)(MYSQLND_PFC * const pfc, MYSQLND_VIO * const vio, zend_uchar * const buffer, const size_t count, MYSQLND_STATS * const conn_stats, MYSQLND_ERROR_INFO * const error_info); +typedef enum_func_status (*func_mysqlnd_pfc__receive)(MYSQLND_PFC * const pfc, MYSQLND_VIO * const vio, zend_uchar * const buffer, const size_t count, MYSQLND_STATS * const conn_stats, MYSQLND_ERROR_INFO * const error_info); +typedef enum_func_status (*func_mysqlnd_pfc__read_compressed_packet_from_stream_and_fill_read_buffer)(MYSQLND_PFC * pfc, MYSQLND_VIO * const vio, size_t net_payload_size, MYSQLND_STATS * conn_stats, MYSQLND_ERROR_INFO * error_info); +typedef void (*func_mysqlnd_pfc__free_contents)(MYSQLND_PFC * pfc); + +MYSQLND_CLASS_METHODS_TYPE(mysqlnd_protocol_packet_frame_codec) +{ + func_mysqlnd_pfc__init init; + func_mysqlnd_pfc__dtor dtor; + func_mysqlnd_pfc__reset reset; + func_mysqlnd_pfc__set_client_option set_client_option; + + func_mysqlnd_pfc__decode decode; + func_mysqlnd_pfc__encode encode; + + func_mysqlnd_pfc__send send; + func_mysqlnd_pfc__receive receive; + + func_mysqlnd_pfc__read_compressed_packet_from_stream_and_fill_read_buffer read_compressed_packet_from_stream_and_fill_read_buffer; + + func_mysqlnd_pfc__free_contents free_contents; +}; + + +struct st_mysqlnd_protocol_frame_codec_data +{ + php_stream *stream; + zend_bool compressed; + zend_bool ssl; + uint64_t flags; + char * sha256_server_public_key; + +#ifdef MYSQLND_COMPRESSION_ENABLED + MYSQLND_READ_BUFFER * uncompressed_data; +#else + void * unused_pad1; +#endif + + /* sequence for simple checking of correct packets */ + zend_uchar packet_no; + zend_uchar compressed_envelope_packet_no; + + zend_bool persistent; + + MYSQLND_CLASS_METHODS_TYPE(mysqlnd_protocol_packet_frame_codec) m; +}; + + +struct st_mysqlnd_protocol_frame_codec +{ + MYSQLND_CMD_BUFFER cmd_buffer; + + struct st_mysqlnd_protocol_frame_codec_data * data; + + zend_bool persistent; +}; + + + struct mysqlnd_field_hash_key { zend_bool is_numeric; @@ -1007,7 +1148,7 @@ struct st_mysqlnd_result_metadata MYSQLND_FIELD *fields; struct mysqlnd_field_hash_key *zend_hash_keys; - struct st_mysqlnd_res_meta_methods * m; + MYSQLND_CLASS_METHODS_TYPE(mysqlnd_res_meta) * m; size_t bit_fields_total_len; /* trailing \0 not counted */ /* We need this to make fast allocs in rowp_read */ @@ -1026,7 +1167,7 @@ struct st_mysqlnd_result_metadata uint64_t initialized_rows; \ \ /* Column lengths of current row - both buffered and unbuffered. For buffered results it duplicates the data found in **data */ \ - zend_ulong *lengths; \ + size_t *lengths; \ \ MYSQLND_MEMORY_POOL *result_set_memory_pool; \ \ @@ -1037,7 +1178,7 @@ struct st_mysqlnd_result_metadata unsigned int field_count; \ zend_bool ps; \ zend_bool persistent; \ - struct st_mysqlnd_result_buffered_methods m; \ + MYSQLND_CLASS_METHODS_TYPE(mysqlnd_result_buffered) m; \ enum mysqlnd_buffered_type type; \ void * unused1; \ void * unused2; \ @@ -1070,7 +1211,7 @@ struct st_mysqlnd_buffered_result_c struct st_mysqlnd_unbuffered_result { - struct st_mysqlnd_result_unbuffered_methods m; + MYSQLND_CLASS_METHODS_TYPE(mysqlnd_result_unbuffered) m; uint64_t row_count; /* For unbuffered (both normal and PS) */ @@ -1081,7 +1222,7 @@ struct st_mysqlnd_unbuffered_result Column lengths of current row - both buffered and unbuffered. For buffered results it duplicates the data found in **data */ - zend_ulong *lengths; + size_t *lengths; MYSQLND_MEMORY_POOL *result_set_memory_pool; @@ -1111,8 +1252,7 @@ struct st_mysqlnd_res MYSQLND_RES_UNBUFFERED *unbuf; zend_bool persistent; - - struct st_mysqlnd_res_methods m; + MYSQLND_CLASS_METHODS_TYPE(mysqlnd_res) m; }; @@ -1136,7 +1276,6 @@ struct st_mysqlnd_stmt_data zend_ulong stmt_id; zend_ulong flags;/* cursor is set here */ enum_mysqlnd_stmt_state state; - unsigned int warning_count; MYSQLND_RES *result; unsigned int field_count; unsigned int param_count; @@ -1171,18 +1310,11 @@ struct st_mysqlnd_stmt_data struct st_mysqlnd_stmt { MYSQLND_STMT_DATA * data; - struct st_mysqlnd_stmt_methods *m; + MYSQLND_CLASS_METHODS_TYPE(mysqlnd_stmt) * m; zend_bool persistent; }; -typedef struct st_mysqlnd_string -{ - char *s; - size_t l; -} MYSQLND_STRING; - - struct st_mysqlnd_plugin_header { unsigned int plugin_api_version; @@ -1223,8 +1355,8 @@ typedef zend_uchar * (*func_auth_plugin__get_auth_data)(struct st_mysqlnd_authen size_t * auth_data_len, MYSQLND_CONN_DATA * conn, const char * const user, const char * const passwd, const size_t passwd_len, zend_uchar * auth_plugin_data, size_t auth_plugin_data_len, - const MYSQLND_OPTIONS * const options, - const MYSQLND_NET_OPTIONS * const net_options, zend_ulong mysql_flags + const MYSQLND_SESSION_OPTIONS * const session_options, + const MYSQLND_PFC_DATA * const pfc_data, zend_ulong mysql_flags ); struct st_mysqlnd_authentication_plugin @@ -1235,5 +1367,4 @@ struct st_mysqlnd_authentication_plugin } methods; }; - #endif /* MYSQLND_STRUCTS_H */ |