]> granicus.if.org Git - php/commitdiff
Split struct MYSQLND in struct MYSQLND and struct MYSQLD_CONN_DATA.
authorAndrey Hristov <andrey@php.net>
Mon, 31 Oct 2011 11:46:24 +0000 (11:46 +0000)
committerAndrey Hristov <andrey@php.net>
Mon, 31 Oct 2011 11:46:24 +0000 (11:46 +0000)
A step in the direction of keeping internal data private

20 files changed:
ext/mysqli/mysqli_api.c
ext/mysqli/mysqli_nonapi.c
ext/mysqli/mysqli_priv.h
ext/mysqli/mysqli_prop.c
ext/mysqli/mysqli_warning.c
ext/mysqlnd/mysqlnd.c
ext/mysqlnd/mysqlnd.h
ext/mysqlnd/mysqlnd_auth.c
ext/mysqlnd/mysqlnd_driver.c
ext/mysqlnd/mysqlnd_ext_plugin.c
ext/mysqlnd/mysqlnd_ext_plugin.h
ext/mysqlnd/mysqlnd_loaddata.c
ext/mysqlnd/mysqlnd_priv.h
ext/mysqlnd/mysqlnd_ps.c
ext/mysqlnd/mysqlnd_result.c
ext/mysqlnd/mysqlnd_result.h
ext/mysqlnd/mysqlnd_result_meta.c
ext/mysqlnd/mysqlnd_structs.h
ext/mysqlnd/mysqlnd_wireprotocol.c
ext/mysqlnd/mysqlnd_wireprotocol.h

index a611fef4b3dc0c014edfd0e15a970c91aba09f6b..20c7ff3d288111eef95a7a08d774175c2b625518 100644 (file)
@@ -1291,8 +1291,11 @@ PHP_FUNCTION(mysqli_get_host_info)
                return;
        }
        MYSQLI_FETCH_RESOURCE_CONN(mysql, &mysql_link, MYSQLI_STATUS_VALID);
-
+#if !defined(MYSQLI_USE_MYSQLND)
        RETURN_STRING((mysql->mysql->host_info) ? mysql->mysql->host_info : "", 1);
+#else
+       RETURN_STRING((mysql->mysql->data->host_info) ? mysql->mysql->data->host_info : "", 1);
+#endif
 }
 /* }}} */
 
@@ -1804,7 +1807,7 @@ PHP_FUNCTION(mysqli_prepare)
                        memcpy(last_error, stmt->stmt->last_error, MYSQL_ERRMSG_SIZE);
                        memcpy(sqlstate, mysql->mysql->net.sqlstate, SQLSTATE_LENGTH+1);
 #else
-                       MYSQLND_ERROR_INFO error_info = *mysql->mysql->error_info;
+                       MYSQLND_ERROR_INFO error_info = *mysql->mysql->data->error_info;
 #endif
                        mysqli_stmt_close(stmt->stmt, FALSE);
                        stmt->stmt = NULL;
@@ -1815,7 +1818,7 @@ PHP_FUNCTION(mysqli_prepare)
                        memcpy(mysql->mysql->net.last_error, last_error, MYSQL_ERRMSG_SIZE);
                        memcpy(mysql->mysql->net.sqlstate, sqlstate, SQLSTATE_LENGTH+1);
 #else
-                       *mysql->mysql->error_info = error_info;
+                       *mysql->mysql->data->error_info = error_info;
 #endif
                }
        }
index 1340b8ffc17e44cb0e586da663c61ba4db32ae0b..9a55afbfac900d3ab889116523c9abef96247d04 100644 (file)
@@ -431,12 +431,12 @@ PHP_FUNCTION(mysqli_error_list)
        MYSQLI_FETCH_RESOURCE_CONN(mysql, &mysql_link, MYSQLI_STATUS_VALID);
        array_init(return_value);
 #if defined(MYSQLI_USE_MYSQLND)
-       if (mysql->mysql->error_info->error_list) {
+       if (mysql->mysql->data->error_info->error_list) {
                MYSQLND_ERROR_LIST_ELEMENT * message;
                zend_llist_position pos;
-               for (message = (MYSQLND_ERROR_LIST_ELEMENT *) zend_llist_get_first_ex(mysql->mysql->error_info->error_list, &pos);
+               for (message = (MYSQLND_ERROR_LIST_ELEMENT *) zend_llist_get_first_ex(mysql->mysql->data->error_info->error_list, &pos);
                         message;
-                        message = (MYSQLND_ERROR_LIST_ELEMENT *) zend_llist_get_next_ex(mysql->mysql->error_info->error_list, &pos)) 
+                        message = (MYSQLND_ERROR_LIST_ELEMENT *) zend_llist_get_next_ex(mysql->mysql->data->error_info->error_list, &pos)) 
                {
                        zval * single_error;
                        MAKE_STD_ZVAL(single_error);
@@ -539,7 +539,7 @@ PHP_FUNCTION(mysqli_multi_query)
                strcpy(s_sqlstate, mysql_sqlstate(mysql->mysql));
                s_errno = mysql_errno(mysql->mysql);
 #else
-               MYSQLND_ERROR_INFO error_info = *mysql->mysql->error_info;
+               MYSQLND_ERROR_INFO error_info = *mysql->mysql->data->error_info;
 #endif
                MYSQLI_REPORT_MYSQL_ERROR(mysql->mysql);
                MYSQLI_DISABLE_MQ;
@@ -550,7 +550,7 @@ PHP_FUNCTION(mysqli_multi_query)
                strcpy(mysql->mysql->net.sqlstate, s_sqlstate);
                mysql->mysql->net.last_errno = s_errno;
 #else
-               *mysql->mysql->error_info = error_info;
+               *mysql->mysql->data->error_info = error_info;
 #endif
                RETURN_FALSE;
        }
@@ -913,7 +913,11 @@ PHP_FUNCTION(mysqli_get_warnings)
        MYSQLI_FETCH_RESOURCE_CONN(mysql, &mysql_link, MYSQLI_STATUS_VALID);
 
        if (mysql_warning_count(mysql->mysql)) {
+#ifdef MYSQLI_USE_MYSQLND
+               w = php_get_warnings(mysql->mysql->data TSRMLS_CC);
+#else
                w = php_get_warnings(mysql->mysql TSRMLS_CC);
+#endif
        } else {
                RETURN_FALSE;
        }
@@ -924,6 +928,7 @@ PHP_FUNCTION(mysqli_get_warnings)
 }
 /* }}} */
 
+
 /* {{{ proto object mysqli_stmt_get_warnings(object link) */
 PHP_FUNCTION(mysqli_stmt_get_warnings)
 {
@@ -949,6 +954,7 @@ PHP_FUNCTION(mysqli_stmt_get_warnings)
 }
 /* }}} */
 
+
 #ifdef HAVE_MYSQLI_SET_CHARSET
 /* {{{ proto bool mysqli_set_charset(object link, string csname)
    sets client character set */
@@ -1004,7 +1010,7 @@ PHP_FUNCTION(mysqli_get_charset)
        state = cs.state;
        comment = cs.comment;
 #else
-       cs = mysql->mysql->charset;
+       cs = mysql->mysql->data->charset;
        if (!cs) {
                php_error_docref(NULL TSRMLS_CC, E_WARNING, "The connection has no charset associated");
                RETURN_NULL();
index adafe55c140afb57231dba41fe4ee344a62cbb58..f52e04333dd544036493614989ce877be0e4ceab 100644 (file)
@@ -66,156 +66,12 @@ extern void php_mysqli_close(MY_MYSQL * mysql, int close_type, int resource_stat
 extern void php_mysqli_fetch_into_hash(INTERNAL_FUNCTION_PARAMETERS, int override_flag, int into_object);
 extern void php_clear_stmt_bind(MY_STMT *stmt TSRMLS_DC);
 extern void php_clear_mysql(MY_MYSQL *);
-extern MYSQLI_WARNING *php_get_warnings(MYSQL *mysql TSRMLS_DC);
-extern void php_clear_warnings(MYSQLI_WARNING *w);
-extern void php_free_stmt_bind_buffer(BIND_BUFFER bbuf, int type);
-extern void php_mysqli_report_error(const char *sqlstate, int errorno, const char *error TSRMLS_DC);
-extern void php_mysqli_report_index(const char *query, unsigned int status TSRMLS_DC);
-extern void php_set_local_infile_handler_default(MY_MYSQL *);
-extern void php_mysqli_throw_sql_exception(char *sqlstate, int errorno TSRMLS_DC, char *format, ...);
-
-#ifdef HAVE_SPL
-extern PHPAPI zend_class_entry *spl_ce_RuntimeException;
-#endif
-
-#define PHP_MYSQLI_EXPORT(__type) PHP_MYSQLI_API __type
-
-PHP_MYSQLI_EXPORT(zend_object_value) mysqli_objects_new(zend_class_entry * TSRMLS_DC);
-
-
-#define MYSQLI_DISABLE_MQ if (mysql->multi_query) { \
-       mysql_set_server_option(mysql->mysql, MYSQL_OPTION_MULTI_STATEMENTS_OFF); \
-       mysql->multi_query = 0; \
-}
-
-#define MYSQLI_ENABLE_MQ if (!mysql->multi_query) { \
-       mysql_set_server_option(mysql->mysql, MYSQL_OPTION_MULTI_STATEMENTS_ON); \
-       mysql->multi_query = 1; \
-}
-
-
-#define MYSQLI_RETURN_LONG_LONG(__val) \
-{ \
-       if ((__val) < LONG_MAX) {               \
-               RETURN_LONG((long) (__val));            \
-       } else {                                \
-               char *ret;                      \
-               /* always used with my_ulonglong -> %llu */ \
-               int l = spprintf(&ret, 0, MYSQLI_LLU_SPEC, (__val));    \
-               RETURN_STRINGL(ret, l, 0);              \
-       }                                       \
-}
-
-#define MYSQLI_STORE_RESULT 0
-#define MYSQLI_USE_RESULT      1
 #ifdef MYSQLI_USE_MYSQLND
-#define MYSQLI_ASYNC           8
+extern MYSQLI_WARNING *php_get_warnings(MYSQLND_CONN_DATA * mysql TSRMLS_DC);
 #else
-/* libmysql */
-#define MYSQLI_ASYNC           0
-#endif
-
-/* for mysqli_fetch_assoc */
-#define MYSQLI_ASSOC   1
-#define MYSQLI_NUM             2
-#define MYSQLI_BOTH            3
-
-/* fetch types */
-#define FETCH_SIMPLE           1
-#define FETCH_RESULT           2
-
-/*** REPORT MODES ***/
-#define MYSQLI_REPORT_OFF           0
-#define MYSQLI_REPORT_ERROR                    1
-#define MYSQLI_REPORT_STRICT           2
-#define MYSQLI_REPORT_INDEX                    4
-#define MYSQLI_REPORT_CLOSE                    8
-#define MYSQLI_REPORT_ALL                255
-
-#define MYSQLI_REPORT_MYSQL_ERROR(mysql) \
-if ((MyG(report_mode) & MYSQLI_REPORT_ERROR) && mysql_errno(mysql)) { \
-       php_mysqli_report_error(mysql_sqlstate(mysql), mysql_errno(mysql), mysql_error(mysql) TSRMLS_CC); \
-}
-
-#define MYSQLI_REPORT_STMT_ERROR(stmt) \
-if ((MyG(report_mode) & MYSQLI_REPORT_ERROR) && mysql_stmt_errno(stmt)) { \
-       php_mysqli_report_error(mysql_stmt_sqlstate(stmt), mysql_stmt_errno(stmt), mysql_stmt_error(stmt) TSRMLS_CC); \
-}
-
-void mysqli_common_connect(INTERNAL_FUNCTION_PARAMETERS, zend_bool is_real_connect, zend_bool in_ctor);
-
-void php_mysqli_init(INTERNAL_FUNCTION_PARAMETERS);
-
-#endif /* MYSQLI_PRIV_H */
-/*
-  +----------------------------------------------------------------------+
-  | PHP Version 5                                                        |
-  +----------------------------------------------------------------------+
-  | Copyright (c) 1997-2011 The PHP Group                                |
-  +----------------------------------------------------------------------+
-  | This source file is subject to version 3.01 of the PHP license,      |
-  | that is bundled with this package in the file LICENSE, and is        |
-  | available through the world-wide-web at the following url:           |
-  | http://www.php.net/license/3_01.txt                                  |
-  | If you did not receive a copy of the PHP license and are unable to   |
-  | obtain it through the world-wide-web, please send a note to          |
-  | license@php.net so we can mail you a copy immediately.               |
-  +----------------------------------------------------------------------+
-  | Author: Georg Richter <georg@php.net>                                |
-  +----------------------------------------------------------------------+
-
-  $Id: php_mysqli_structs.h 302179 2010-08-13 09:57:04Z andrey $
-*/
-
-#ifndef MYSQLI_PRIV_H
-#define MYSQLI_PRIV_H
-
-#ifdef PHP_MYSQL_UNIX_SOCK_ADDR
-#ifdef MYSQL_UNIX_ADDR
-#undef MYSQL_UNIX_ADDR
-#endif
-#define MYSQL_UNIX_ADDR PHP_MYSQL_UNIX_SOCK_ADDR
-#endif
-
-/* character set support */
-#if defined(MYSQLND_VERSION_ID) || MYSQL_VERSION_ID > 50009
-#define HAVE_MYSQLI_GET_CHARSET
-#endif
-
-#if defined(MYSQLND_VERSION_ID) || (MYSQL_VERSION_ID > 40112 && MYSQL_VERSION_ID < 50000) || MYSQL_VERSION_ID > 50005
-#define HAVE_MYSQLI_SET_CHARSET
+extern MYSQLI_WARNING *php_get_warnings(MYSQL * mysql TSRMLS_DC);
 #endif
 
-
-extern const zend_function_entry mysqli_functions[];
-extern const zend_function_entry mysqli_link_methods[];
-extern const zend_function_entry mysqli_stmt_methods[];
-extern const zend_function_entry mysqli_result_methods[];
-extern const zend_function_entry mysqli_driver_methods[];
-extern const zend_function_entry mysqli_warning_methods[];
-extern const zend_function_entry mysqli_exception_methods[];
-
-extern const mysqli_property_entry mysqli_link_property_entries[];
-extern const mysqli_property_entry mysqli_result_property_entries[];
-extern const mysqli_property_entry mysqli_stmt_property_entries[];
-extern const mysqli_property_entry mysqli_driver_property_entries[];
-extern const mysqli_property_entry mysqli_warning_property_entries[];
-
-extern zend_property_info mysqli_link_property_info_entries[];
-extern zend_property_info mysqli_result_property_info_entries[];
-extern zend_property_info mysqli_stmt_property_info_entries[];
-extern zend_property_info mysqli_driver_property_info_entries[];
-extern zend_property_info mysqli_warning_property_info_entries[];
-
-extern int php_le_pmysqli(void);
-extern void php_mysqli_dtor_p_elements(void *data);
-
-extern void php_mysqli_close(MY_MYSQL * mysql, int close_type, int resource_status TSRMLS_DC);
-
-extern void php_mysqli_fetch_into_hash(INTERNAL_FUNCTION_PARAMETERS, int override_flag, int into_object);
-extern void php_clear_stmt_bind(MY_STMT *stmt TSRMLS_DC);
-extern void php_clear_mysql(MY_MYSQL *);
-extern MYSQLI_WARNING *php_get_warnings(MYSQL *mysql TSRMLS_DC);
 extern void php_clear_warnings(MYSQLI_WARNING *w);
 extern void php_free_stmt_bind_buffer(BIND_BUFFER bbuf, int type);
 extern void php_mysqli_report_error(const char *sqlstate, int errorno, const char *error TSRMLS_DC);
@@ -227,13 +83,6 @@ extern void php_mysqli_throw_sql_exception(char *sqlstate, int errorno TSRMLS_DC
 extern PHPAPI zend_class_entry *spl_ce_RuntimeException;
 #endif
 
-#define REGISTER_MYSQLI_CLASS_ENTRY(name, mysqli_entry, class_functions) { \
-       zend_class_entry ce; \
-       INIT_CLASS_ENTRY(ce, name,class_functions); \
-       ce.create_object = mysqli_objects_new; \
-       mysqli_entry = zend_register_internal_class(&ce TSRMLS_CC); \
-} \
-
 #define PHP_MYSQLI_EXPORT(__type) PHP_MYSQLI_API __type
 
 PHP_MYSQLI_EXPORT(zend_object_value) mysqli_objects_new(zend_class_entry * TSRMLS_DC);
index 2c6309dbcf07cab4ea81c629f04cb0d92d4f2c4c..817b76089b620de3cf7bdab938ef512341893ff2 100644 (file)
@@ -205,12 +205,12 @@ static int link_error_list_read(mysqli_object *obj, zval **retval TSRMLS_DC)
        array_init(*retval);
        if (mysql) {
 #if defined(MYSQLI_USE_MYSQLND)
-               if (mysql->mysql->error_info->error_list) {
+               if (mysql->mysql->data->error_info->error_list) {
                        MYSQLND_ERROR_LIST_ELEMENT * message;
                        zend_llist_position pos;
-                       for (message = (MYSQLND_ERROR_LIST_ELEMENT *) zend_llist_get_first_ex(mysql->mysql->error_info->error_list, &pos);
+                       for (message = (MYSQLND_ERROR_LIST_ELEMENT *) zend_llist_get_first_ex(mysql->mysql->data->error_info->error_list, &pos);
                                 message;
-                                message = (MYSQLND_ERROR_LIST_ELEMENT *) zend_llist_get_next_ex(mysql->mysql->error_info->error_list, &pos)) 
+                                message = (MYSQLND_ERROR_LIST_ELEMENT *) zend_llist_get_next_ex(mysql->mysql->data->error_info->error_list, &pos)) 
                        {
                                zval * single_error;
                                MAKE_STD_ZVAL(single_error);
index e6d2f516ec4bd7c6700b909d6010c3de550d719b..1f752c3f60cfbcd19b3dc9e92c0457f0fa062429 100644 (file)
@@ -102,7 +102,7 @@ MYSQLI_WARNING *php_get_warnings(MYSQL *mysql TSRMLS_DC)
 #else
 /* {{{ MYSQLI_WARNING *php_new_warning */
 static
-MYSQLI_WARNING *php_new_warning(const zval *reason, int errorno TSRMLS_DC)
+MYSQLI_WARNING *php_new_warning(const zval * reason, int errorno TSRMLS_DC)
 {
        MYSQLI_WARNING *w;
 
@@ -123,17 +123,17 @@ MYSQLI_WARNING *php_new_warning(const zval *reason, int errorno TSRMLS_DC)
 
 
 /* {{{ MYSQLI_WARNING *php_get_warnings(MYSQL *mysql TSRMLS_DC) */
-MYSQLI_WARNING *php_get_warnings(MYSQL *mysql TSRMLS_DC)
+MYSQLI_WARNING * php_get_warnings(MYSQLND_CONN_DATA * mysql TSRMLS_DC)
 {
        MYSQLI_WARNING  *w, *first = NULL, *prev = NULL;
        MYSQL_RES               *result;
        zval                    *row;
 
-       if (mysql_real_query(mysql, "SHOW WARNINGS", 13)) {
+       if (mysql->m->query(mysql, "SHOW WARNINGS", 13 TSRMLS_CC)) {
                return NULL;
        }
 
-       result = mysql_use_result(mysql);
+       result = mysql->m->use_result(mysql TSRMLS_CC);
 
        for (;;) {
                zval **entry;
@@ -267,7 +267,9 @@ PHP_METHOD(mysqli_warning, __construct)
 {
        zval                    *z;
        mysqli_object   *obj;
+#ifndef MYSQLI_USE_MYSQLND
        MYSQL                   *hdl;
+#endif
        MYSQLI_WARNING  *w;
        MYSQLI_RESOURCE *mysqli_resource;
 
@@ -282,23 +284,36 @@ PHP_METHOD(mysqli_warning, __construct)
        if (obj->zo.ce == mysqli_link_class_entry) {
                MY_MYSQL *mysql;
                MYSQLI_FETCH_RESOURCE_CONN(mysql, &z, MYSQLI_STATUS_VALID);
-               hdl = mysql->mysql;
+               if (mysql_warning_count(mysql->mysql)) {
+#ifndef MYSQLI_USE_MYSQLND
+                       w = php_get_warnings(mysql->mysql TSRMLS_CC);
+#else
+                       w = php_get_warnings(mysql->mysql->data TSRMLS_CC);
+#endif
+               } else {
+                       php_error_docref(NULL TSRMLS_CC, E_WARNING, "No warnings found");
+                       RETURN_FALSE;
+               }
        } else if (obj->zo.ce == mysqli_stmt_class_entry) {
                MY_STMT *stmt;
                MYSQLI_FETCH_RESOURCE_STMT(stmt, &z, MYSQLI_STATUS_VALID);
+#ifndef MYSQLI_USE_MYSQLND
                hdl = mysqli_stmt_get_connection(stmt->stmt);
+               if (mysql_warning_count(hdl)) {
+                       w = php_get_warnings(hdl TSRMLS_CC);
+#else
+               if (mysqlnd_stmt_warning_count(stmt->stmt)) {
+                       w = php_get_warnings(mysqli_stmt_get_connection(stmt->stmt) TSRMLS_CC);
+#endif
+               } else {
+                       php_error_docref(NULL TSRMLS_CC, E_WARNING, "No warnings found");
+                       RETURN_FALSE;
+               }
        } else {
                php_error_docref(NULL TSRMLS_CC, E_WARNING, "invalid class argument");
                RETURN_FALSE;
        }
 
-       if (mysql_warning_count(hdl)) {
-               w = php_get_warnings(hdl TSRMLS_CC);
-       } else {
-               php_error_docref(NULL TSRMLS_CC, E_WARNING, "No warnings found");
-               RETURN_FALSE;
-       }
-
        mysqli_resource = (MYSQLI_RESOURCE *)ecalloc (1, sizeof(MYSQLI_RESOURCE));
        mysqli_resource->ptr = mysqli_resource->info = (void *)w;
        mysqli_resource->status = MYSQLI_STATUS_VALID;
index bb290b91a4dc739a0d2b1484248b3a15e6592451..74c1f51d7051ac2861e1d7551bfccadc861e58ae 100644 (file)
@@ -63,9 +63,10 @@ PHPAPI const char * const mysqlnd_out_of_memory = "Out of memory";
 
 PHPAPI MYSQLND_STATS *mysqlnd_global_stats = NULL;
 
+
 /* {{{ mysqlnd_conn::free_options */
 static void
-MYSQLND_METHOD(mysqlnd_conn, free_options)(MYSQLND * conn TSRMLS_DC)
+MYSQLND_METHOD(mysqlnd_conn, free_options)(MYSQLND_CONN_DATA * conn TSRMLS_DC)
 {
        zend_bool pers = conn->persistent;
 
@@ -100,7 +101,7 @@ MYSQLND_METHOD(mysqlnd_conn, free_options)(MYSQLND * conn TSRMLS_DC)
 
 /* {{{ mysqlnd_conn::free_contents */
 static void
-MYSQLND_METHOD(mysqlnd_conn, free_contents)(MYSQLND * conn TSRMLS_DC)
+MYSQLND_METHOD(mysqlnd_conn, free_contents)(MYSQLND_CONN_DATA * conn TSRMLS_DC)
 {
        zend_bool pers = conn->persistent;
 
@@ -174,7 +175,7 @@ MYSQLND_METHOD(mysqlnd_conn, free_contents)(MYSQLND * conn TSRMLS_DC)
 
 /* {{{ mysqlnd_conn::dtor */
 static void
-MYSQLND_METHOD_PRIVATE(mysqlnd_conn, dtor)(MYSQLND * conn TSRMLS_DC)
+MYSQLND_METHOD_PRIVATE(mysqlnd_conn, dtor)(MYSQLND_CONN_DATA * conn TSRMLS_DC)
 {
        DBG_ENTER("mysqlnd_conn::dtor");
        DBG_INF_FMT("conn=%llu", conn->thread_id);
@@ -203,9 +204,26 @@ MYSQLND_METHOD_PRIVATE(mysqlnd_conn, dtor)(MYSQLND * conn TSRMLS_DC)
 /* }}} */
 
 
+/* {{{ mysqlnd_conn::outter_dtor */
+static void
+MYSQLND_METHOD_PRIVATE(mysqlnd_conn, outter_dtor)(MYSQLND * conn_handle TSRMLS_DC)
+{
+       MYSQLND_CONN_DATA * conn = conn_handle->data;
+       DBG_ENTER("mysqlnd_conn::outter_dtor");
+       DBG_INF_FMT("conn=%llu", conn->thread_id);
+
+       conn->m->free_reference(conn TSRMLS_CC);
+
+       mnd_pefree(conn_handle, conn_handle->persistent);
+
+       DBG_VOID_RETURN;
+}
+/* }}} */
+
+
 /* {{{ mysqlnd_conn::simple_command_handle_response */
 static enum_func_status
-MYSQLND_METHOD(mysqlnd_conn, simple_command_handle_response)(MYSQLND * conn, enum mysqlnd_packet_type ok_packet,
+MYSQLND_METHOD(mysqlnd_conn, 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)
 {
@@ -304,7 +322,7 @@ MYSQLND_METHOD(mysqlnd_conn, simple_command_handle_response)(MYSQLND * conn, enu
 
 /* {{{ mysqlnd_conn::simple_command */
 static enum_func_status
-MYSQLND_METHOD(mysqlnd_conn, simple_command)(MYSQLND * conn, enum php_mysqlnd_server_command command,
+MYSQLND_METHOD(mysqlnd_conn, 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)
 {
@@ -369,7 +387,7 @@ MYSQLND_METHOD(mysqlnd_conn, simple_command)(MYSQLND * conn, enum php_mysqlnd_se
 
 /* {{{ mysqlnd_conn::set_server_option */
 static enum_func_status
-MYSQLND_METHOD(mysqlnd_conn, set_server_option)(MYSQLND * const conn, enum_mysqlnd_server_option option TSRMLS_DC)
+MYSQLND_METHOD(mysqlnd_conn, set_server_option)(MYSQLND_CONN_DATA * const conn, enum_mysqlnd_server_option option TSRMLS_DC)
 {
        size_t this_func = STRUCT_OFFSET(struct st_mysqlnd_conn_methods, set_server_option);
        zend_uchar buffer[2];
@@ -389,7 +407,7 @@ MYSQLND_METHOD(mysqlnd_conn, set_server_option)(MYSQLND * const conn, enum_mysql
 
 /* {{{ mysqlnd_conn::restart_psession */
 static enum_func_status
-MYSQLND_METHOD(mysqlnd_conn, restart_psession)(MYSQLND * conn TSRMLS_DC)
+MYSQLND_METHOD(mysqlnd_conn, restart_psession)(MYSQLND_CONN_DATA * conn TSRMLS_DC)
 {
        DBG_ENTER("mysqlnd_conn::restart_psession");
        MYSQLND_INC_CONN_STATISTIC(conn->stats, STAT_CONNECT_REUSED);
@@ -405,7 +423,7 @@ MYSQLND_METHOD(mysqlnd_conn, restart_psession)(MYSQLND * conn TSRMLS_DC)
 
 /* {{{ mysqlnd_conn::end_psession */
 static enum_func_status
-MYSQLND_METHOD(mysqlnd_conn, end_psession)(MYSQLND * conn TSRMLS_DC)
+MYSQLND_METHOD(mysqlnd_conn, end_psession)(MYSQLND_CONN_DATA * conn TSRMLS_DC)
 {
        DBG_ENTER("mysqlnd_conn::end_psession");
        DBG_RETURN(PASS);
@@ -416,7 +434,7 @@ MYSQLND_METHOD(mysqlnd_conn, end_psession)(MYSQLND * conn TSRMLS_DC)
 /* {{{ mysqlnd_switch_to_ssl_if_needed */
 static enum_func_status
 mysqlnd_switch_to_ssl_if_needed(
-                       MYSQLND * conn,
+                       MYSQLND_CONN_DATA * conn,
                        const MYSQLND_PACKET_GREET * const greet_packet,
                        const MYSQLND_OPTIONS * const options,
                        unsigned long mysql_flags
@@ -474,7 +492,7 @@ end:
 /* {{{ mysqlnd_connect_run_authentication */
 static enum_func_status
 mysqlnd_connect_run_authentication(
-                       MYSQLND * conn,
+                       MYSQLND_CONN_DATA * conn,
                        const char * const user,
                        const char * const passwd,
                        const char * const db,
@@ -560,7 +578,8 @@ mysqlnd_connect_run_authentication(
                                                                                                           plugin_data, plugin_data_len, options, mysql_flags TSRMLS_CC);
 
 
-                               ret = mysqlnd_auth_handshake(conn, user, passwd, passwd_len, db, db_len, options, mysql_flags, greet_packet->charset_no,
+                               ret = mysqlnd_auth_handshake(conn, user, passwd, passwd_len, db, db_len, options, mysql_flags,
+                                                                                       greet_packet->charset_no,
                                                                                        first_call,
                                                                                        requested_protocol,
                                                                                        scrambled_data, scrambled_data_len,
@@ -605,7 +624,7 @@ end:
 
 /* {{{ mysqlnd_conn::connect */
 static enum_func_status
-MYSQLND_METHOD(mysqlnd_conn, connect)(MYSQLND * conn,
+MYSQLND_METHOD(mysqlnd_conn, 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,
@@ -848,9 +867,9 @@ MYSQLND_METHOD(mysqlnd_conn, connect)(MYSQLND * conn,
                                }
                        }
                } else {
-                       conn->unix_socket       = mnd_pestrdup(socket_or_pipe, conn->persistent);
+                       conn->unix_socket = mnd_pestrdup(socket_or_pipe, conn->persistent);
                        if (unix_socket) {
-                               conn->host_info         = mnd_pestrdup("Localhost via UNIX socket", conn->persistent);
+                               conn->host_info = mnd_pestrdup("Localhost via UNIX socket", conn->persistent);
                        } else if (named_pipe) {
                                char *p;
                                mnd_sprintf(&p, 0, "%s via named pipe", conn->unix_socket);
@@ -950,7 +969,7 @@ err:
 
 
 /* {{{ mysqlnd_connect */
-PHPAPI MYSQLND * mysqlnd_connect(MYSQLND * conn,
+PHPAPI MYSQLND * mysqlnd_connect(MYSQLND * conn_handle,
                                                 const char * host, const char * user,
                                                 const char * passwd, unsigned int passwd_len,
                                                 const char * db, unsigned int db_len,
@@ -961,17 +980,19 @@ PHPAPI MYSQLND * mysqlnd_connect(MYSQLND * conn,
 {
        enum_func_status ret = FAIL;
        zend_bool self_alloced = FALSE;
+       MYSQLND_CONN_DATA * conn;
 
        DBG_ENTER("mysqlnd_connect");
        DBG_INF_FMT("host=%s user=%s db=%s port=%u flags=%u", host?host:"", user?user:"", db?db:"", port, mysql_flags);
 
-       if (!conn) {
+       if (!conn_handle) {
                self_alloced = TRUE;
-               if (!(conn = mysqlnd_init(FALSE))) {
+               if (!(conn_handle = mysqlnd_init(FALSE))) {
                        /* OOM */
                        DBG_RETURN(NULL);
                }
        }
+       conn = conn_handle->data;
 
        ret = conn->m->connect(conn, host, user, passwd, passwd_len, db, db_len, port, socket_or_pipe, mysql_flags TSRMLS_CC);
 
@@ -981,11 +1002,11 @@ PHPAPI MYSQLND * mysqlnd_connect(MYSQLND * conn,
                          We have alloced, thus there are no references to this
                          object - we are free to kill it!
                        */
-                       conn->m->dtor(conn TSRMLS_CC);
+                       conn->m->outter_dtor(conn_handle TSRMLS_CC);
                }
                DBG_RETURN(NULL);
        }
-       DBG_RETURN(conn);
+       DBG_RETURN(conn_handle);
 }
 /* }}} */
 
@@ -996,7 +1017,7 @@ PHPAPI MYSQLND * mysqlnd_connect(MYSQLND * conn,
   Still the result from the query is PASS
 */
 static enum_func_status
-MYSQLND_METHOD(mysqlnd_conn, query)(MYSQLND * conn, const char * query, unsigned int query_len TSRMLS_DC)
+MYSQLND_METHOD(mysqlnd_conn, query)(MYSQLND_CONN_DATA * conn, const char * query, unsigned int query_len TSRMLS_DC)
 {
        size_t this_func = STRUCT_OFFSET(struct st_mysqlnd_conn_methods, query);
        enum_func_status ret = FAIL;
@@ -1021,7 +1042,7 @@ MYSQLND_METHOD(mysqlnd_conn, query)(MYSQLND * conn, const char * query, unsigned
 
 /* {{{ mysqlnd_conn::send_query */
 static enum_func_status
-MYSQLND_METHOD(mysqlnd_conn, send_query)(MYSQLND * conn, const char * query, unsigned int query_len TSRMLS_DC)
+MYSQLND_METHOD(mysqlnd_conn, send_query)(MYSQLND_CONN_DATA * conn, const char * query, unsigned int query_len TSRMLS_DC)
 {
        size_t this_func = STRUCT_OFFSET(struct st_mysqlnd_conn_methods, send_query);
        enum_func_status ret;
@@ -1030,8 +1051,8 @@ MYSQLND_METHOD(mysqlnd_conn, send_query)(MYSQLND * conn, const char * query, uns
 
        if (PASS == conn->m->local_tx_start(conn, this_func TSRMLS_CC)) {
                ret = conn->m->simple_command(conn, COM_QUERY, (zend_uchar *) query, query_len,
-                                                                        PROT_LAST /* we will handle the OK packet*/,
-                                                                        FALSE, FALSE TSRMLS_CC);
+                                                                                        PROT_LAST /* we will handle the OK packet*/,
+                                                                                        FALSE, FALSE TSRMLS_CC);
                if (PASS == ret) {
                        CONN_SET_STATE(conn, CONN_QUERY_SENT);
                }
@@ -1044,7 +1065,7 @@ MYSQLND_METHOD(mysqlnd_conn, send_query)(MYSQLND * conn, const char * query, uns
 
 /* {{{ mysqlnd_conn::reap_query */
 static enum_func_status
-MYSQLND_METHOD(mysqlnd_conn, reap_query)(MYSQLND * conn TSRMLS_DC)
+MYSQLND_METHOD(mysqlnd_conn, reap_query)(MYSQLND_CONN_DATA * conn TSRMLS_DC)
 {
        size_t this_func = STRUCT_OFFSET(struct st_mysqlnd_conn_methods, reap_query);
        enum_mysqlnd_connection_state state = CONN_GET_STATE(conn);
@@ -1076,7 +1097,7 @@ MYSQLND ** mysqlnd_stream_array_check_for_readiness(MYSQLND ** conn_array TSRMLS
        MYSQLND **ret = NULL;
 
        while (*p) {
-               if (CONN_GET_STATE(*p) <= CONN_READY || CONN_GET_STATE(*p) == CONN_QUIT_SENT) {
+               if (CONN_GET_STATE((*p)->data) <= CONN_READY || CONN_GET_STATE((*p)->data) == CONN_QUIT_SENT) {
                        cnt++;
                }
                p++;
@@ -1085,7 +1106,7 @@ MYSQLND ** mysqlnd_stream_array_check_for_readiness(MYSQLND ** conn_array TSRMLS
                MYSQLND **ret_p = ret = ecalloc(cnt + 1, sizeof(MYSQLND *));
                p_p = p = conn_array;
                while (*p) {
-                       if (CONN_GET_STATE(*p) <= CONN_READY || CONN_GET_STATE(*p) == CONN_QUIT_SENT) {
+                       if (CONN_GET_STATE((*p)->data) <= CONN_READY || CONN_GET_STATE((*p)->data) == CONN_QUIT_SENT) {
                                *ret_p = *p;
                                *p = NULL;
                                ret_p++;
@@ -1102,7 +1123,7 @@ MYSQLND ** mysqlnd_stream_array_check_for_readiness(MYSQLND ** conn_array TSRMLS
 
 
 /* {{{ stream_select mysqlnd_stream_array_to_fd_set functions */
-static int mysqlnd_stream_array_to_fd_set(MYSQLND **conn_array, fd_set *fds, php_socket_t *max_fd TSRMLS_DC)
+static int mysqlnd_stream_array_to_fd_set(MYSQLND ** conn_array, fd_set * fds, php_socket_t * max_fd TSRMLS_DC)
 {
        php_socket_t this_fd;
        int cnt = 0;
@@ -1114,7 +1135,7 @@ static int mysqlnd_stream_array_to_fd_set(MYSQLND **conn_array, fd_set *fds, php
                 * when casting.  It is only used here so that the buffered data warning
                 * is not displayed.
                 * */
-               if (SUCCESS == php_stream_cast((*p)->net->stream, PHP_STREAM_AS_FD_FOR_SELECT | PHP_STREAM_CAST_INTERNAL,
+               if (SUCCESS == php_stream_cast((*p)->data->net->stream, PHP_STREAM_AS_FD_FOR_SELECT | PHP_STREAM_CAST_INTERNAL,
                                                                                (void*)&this_fd, 1) && this_fd >= 0) {
 
                        PHP_SAFE_FD_SET(this_fd, fds);
@@ -1129,7 +1150,7 @@ static int mysqlnd_stream_array_to_fd_set(MYSQLND **conn_array, fd_set *fds, php
        return cnt ? 1 : 0;
 }
 
-static int mysqlnd_stream_array_from_fd_set(MYSQLND **conn_array, fd_set *fds TSRMLS_DC)
+static int mysqlnd_stream_array_from_fd_set(MYSQLND ** conn_array, fd_set * fds TSRMLS_DC)
 {
        php_socket_t this_fd;
        int ret = 0;
@@ -1139,7 +1160,7 @@ static int mysqlnd_stream_array_from_fd_set(MYSQLND **conn_array, fd_set *fds TS
        MYSQLND **fwd = conn_array, **bckwd = conn_array;
 
        while (*fwd) {
-               if (SUCCESS == php_stream_cast((*fwd)->net->stream, PHP_STREAM_AS_FD_FOR_SELECT | PHP_STREAM_CAST_INTERNAL,
+               if (SUCCESS == php_stream_cast((*fwd)->data->net->stream, PHP_STREAM_AS_FD_FOR_SELECT | PHP_STREAM_CAST_INTERNAL,
                                                                                (void*)&this_fd, 1) && this_fd >= 0) {
                        if (PHP_SAFE_FD_ISSET(this_fd, fds)) {
                                if (disproportion) {
@@ -1160,25 +1181,26 @@ static int mysqlnd_stream_array_from_fd_set(MYSQLND **conn_array, fd_set *fds TS
 }
 /* }}} */
 
+
 #ifndef PHP_WIN32
 #define php_select(m, r, w, e, t)      select(m, r, w, e, t)
 #else
 #include "win32/select.h"
 #endif
 
+
 /* {{{ _mysqlnd_poll */
 PHPAPI enum_func_status
 _mysqlnd_poll(MYSQLND **r_array, MYSQLND **e_array, MYSQLND ***dont_poll, long sec, long usec, uint * desc_num TSRMLS_DC)
 {
-
        struct timeval  tv;
        struct timeval *tv_p = NULL;
        fd_set                  rfds, wfds, efds;
        php_socket_t    max_fd = 0;
        int                             retval, sets = 0;
        int                             set_count, max_set_count = 0;
-       DBG_ENTER("mysqlnd_poll");
 
+       DBG_ENTER("_mysqlnd_poll");
        if (sec < 0 || usec < 0) {
                php_error_docref(NULL TSRMLS_CC, E_WARNING, "Negative values passed for sec and/or usec");
                DBG_RETURN(FAIL);
@@ -1241,7 +1263,6 @@ _mysqlnd_poll(MYSQLND **r_array, MYSQLND **e_array, MYSQLND ***dont_poll, long s
        }
 
        *desc_num = retval;
-
        DBG_RETURN(PASS);
 }
 /* }}} */
@@ -1256,7 +1277,7 @@ _mysqlnd_poll(MYSQLND **r_array, MYSQLND **e_array, MYSQLND ***dont_poll, long s
 
 /* {{{ mysqlnd_conn::list_fields */
 MYSQLND_RES *
-MYSQLND_METHOD(mysqlnd_conn, list_fields)(MYSQLND * conn, const char *table, const char *achtung_wild TSRMLS_DC)
+MYSQLND_METHOD(mysqlnd_conn, list_fields)(MYSQLND_CONN_DATA * conn, const char *table, const char *achtung_wild TSRMLS_DC)
 {
        size_t this_func = STRUCT_OFFSET(struct st_mysqlnd_conn_methods, list_fields);
        /* db + \0 + wild + \0 (for wild) */
@@ -1328,7 +1349,7 @@ MYSQLND_METHOD(mysqlnd_conn, list_fields)(MYSQLND * conn, const char *table, con
 
 /* {{{ mysqlnd_conn::list_method */
 MYSQLND_RES *
-MYSQLND_METHOD(mysqlnd_conn, list_method)(MYSQLND * conn, const char * query, const char *achtung_wild, char *par1 TSRMLS_DC)
+MYSQLND_METHOD(mysqlnd_conn, list_method)(MYSQLND_CONN_DATA * conn, const char * query, const char *achtung_wild, char *par1 TSRMLS_DC)
 {
        size_t this_func = STRUCT_OFFSET(struct st_mysqlnd_conn_methods, list_method);
        char * show_query = NULL;
@@ -1368,7 +1389,7 @@ MYSQLND_METHOD(mysqlnd_conn, list_method)(MYSQLND * conn, const char * query, co
 
 /* {{{ mysqlnd_conn::errno */
 static unsigned int
-MYSQLND_METHOD(mysqlnd_conn, errno)(const MYSQLND * const conn TSRMLS_DC)
+MYSQLND_METHOD(mysqlnd_conn, errno)(const MYSQLND_CONN_DATA * const conn TSRMLS_DC)
 {
        return conn->error_info->error_no;
 }
@@ -1377,7 +1398,7 @@ MYSQLND_METHOD(mysqlnd_conn, errno)(const MYSQLND * const conn TSRMLS_DC)
 
 /* {{{ mysqlnd_conn::error */
 static const char *
-MYSQLND_METHOD(mysqlnd_conn, error)(const MYSQLND * const conn TSRMLS_DC)
+MYSQLND_METHOD(mysqlnd_conn, error)(const MYSQLND_CONN_DATA * const conn TSRMLS_DC)
 {
        return conn->error_info->error;
 }
@@ -1386,7 +1407,7 @@ MYSQLND_METHOD(mysqlnd_conn, error)(const MYSQLND * const conn TSRMLS_DC)
 
 /* {{{ mysqlnd_conn::sqlstate */
 static const char *
-MYSQLND_METHOD(mysqlnd_conn, sqlstate)(const MYSQLND * const conn TSRMLS_DC)
+MYSQLND_METHOD(mysqlnd_conn, sqlstate)(const MYSQLND_CONN_DATA * const conn TSRMLS_DC)
 {
        return conn->error_info->sqlstate[0] ? conn->error_info->sqlstate:MYSQLND_SQLSTATE_NULL;
 }
@@ -1394,16 +1415,19 @@ MYSQLND_METHOD(mysqlnd_conn, sqlstate)(const MYSQLND * const conn TSRMLS_DC)
 
 
 /* {{{ mysqlnd_old_escape_string */
-PHPAPI ulong mysqlnd_old_escape_string(char *newstr, const char *escapestr, size_t escapestr_len TSRMLS_DC)
+PHPAPI ulong 
+mysqlnd_old_escape_string(char * newstr, const char * escapestr, size_t escapestr_len TSRMLS_DC)
 {
        DBG_ENTER("mysqlnd_old_escape_string");
        DBG_RETURN(mysqlnd_cset_escape_slashes(mysqlnd_find_charset_name("latin1"), newstr, escapestr, escapestr_len TSRMLS_CC));
 }
 /* }}} */
 
+
 /* {{{ mysqlnd_conn::ssl_set */
 static enum_func_status
-MYSQLND_METHOD(mysqlnd_conn, ssl_set)(MYSQLND * const conn, const char * key, const char * const cert, const char * const ca, const char * const capath, const char * const cipher TSRMLS_DC)
+MYSQLND_METHOD(mysqlnd_conn, 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)
 {
        size_t this_func = STRUCT_OFFSET(struct st_mysqlnd_conn_methods, ssl_set);
        enum_func_status ret = FAIL;
@@ -1425,9 +1449,10 @@ MYSQLND_METHOD(mysqlnd_conn, ssl_set)(MYSQLND * const conn, const char * key, co
 
 /* {{{ mysqlnd_conn::escape_string */
 static ulong
-MYSQLND_METHOD(mysqlnd_conn, escape_string)(MYSQLND * const conn, char *newstr, const char *escapestr, size_t escapestr_len TSRMLS_DC)
+MYSQLND_METHOD(mysqlnd_conn, escape_string)(MYSQLND * const conn_handle, char * newstr, const char * escapestr, size_t escapestr_len TSRMLS_DC)
 {
        size_t this_func = STRUCT_OFFSET(struct st_mysqlnd_conn_methods, escape_string);
+       MYSQLND_CONN_DATA * conn = conn_handle->data;
        ulong ret;
        DBG_ENTER("mysqlnd_conn::escape_string");
        DBG_INF_FMT("conn=%llu", conn->thread_id);
@@ -1447,7 +1472,7 @@ MYSQLND_METHOD(mysqlnd_conn, escape_string)(MYSQLND * const conn, char *newstr,
 
 /* {{{ mysqlnd_conn::dump_debug_info */
 static enum_func_status
-MYSQLND_METHOD(mysqlnd_conn, dump_debug_info)(MYSQLND * const conn TSRMLS_DC)
+MYSQLND_METHOD(mysqlnd_conn, dump_debug_info)(MYSQLND_CONN_DATA * const conn TSRMLS_DC)
 {
        size_t this_func = STRUCT_OFFSET(struct st_mysqlnd_conn_methods, server_dump_debug_information);
        enum_func_status ret = FAIL;
@@ -1466,7 +1491,7 @@ MYSQLND_METHOD(mysqlnd_conn, dump_debug_info)(MYSQLND * const conn TSRMLS_DC)
 
 /* {{{ mysqlnd_conn::select_db */
 static enum_func_status
-MYSQLND_METHOD(mysqlnd_conn, select_db)(MYSQLND * const conn, const char * const db, unsigned int db_len TSRMLS_DC)
+MYSQLND_METHOD(mysqlnd_conn, select_db)(MYSQLND_CONN_DATA * const conn, const char * const db, unsigned int db_len TSRMLS_DC)
 {
        size_t this_func = STRUCT_OFFSET(struct st_mysqlnd_conn_methods, select_db);
        enum_func_status ret = FAIL;
@@ -1502,7 +1527,7 @@ MYSQLND_METHOD(mysqlnd_conn, select_db)(MYSQLND * const conn, const char * const
 
 /* {{{ mysqlnd_conn::ping */
 static enum_func_status
-MYSQLND_METHOD(mysqlnd_conn, ping)(MYSQLND * const conn TSRMLS_DC)
+MYSQLND_METHOD(mysqlnd_conn, ping)(MYSQLND_CONN_DATA * const conn TSRMLS_DC)
 {
        size_t this_func = STRUCT_OFFSET(struct st_mysqlnd_conn_methods, ping);
        enum_func_status ret = FAIL;
@@ -1528,7 +1553,7 @@ MYSQLND_METHOD(mysqlnd_conn, ping)(MYSQLND * const conn TSRMLS_DC)
 
 /* {{{ mysqlnd_conn::statistic */
 static enum_func_status
-MYSQLND_METHOD(mysqlnd_conn, statistic)(MYSQLND * conn, char **message, unsigned int * message_len TSRMLS_DC)
+MYSQLND_METHOD(mysqlnd_conn, statistic)(MYSQLND_CONN_DATA * conn, char **message, unsigned int * message_len TSRMLS_DC)
 {
        size_t this_func = STRUCT_OFFSET(struct st_mysqlnd_conn_methods, get_server_statistics);
        enum_func_status ret = FAIL;
@@ -1567,7 +1592,7 @@ MYSQLND_METHOD(mysqlnd_conn, statistic)(MYSQLND * conn, char **message, unsigned
 
 /* {{{ mysqlnd_conn::kill */
 static enum_func_status
-MYSQLND_METHOD(mysqlnd_conn, kill)(MYSQLND * conn, unsigned int pid TSRMLS_DC)
+MYSQLND_METHOD(mysqlnd_conn, kill)(MYSQLND_CONN_DATA * conn, unsigned int pid TSRMLS_DC)
 {
        size_t this_func = STRUCT_OFFSET(struct st_mysqlnd_conn_methods, kill_connection);
        enum_func_status ret = FAIL;
@@ -1600,7 +1625,7 @@ MYSQLND_METHOD(mysqlnd_conn, kill)(MYSQLND * conn, unsigned int pid TSRMLS_DC)
 
 /* {{{ mysqlnd_conn::set_charset */
 static enum_func_status
-MYSQLND_METHOD(mysqlnd_conn, set_charset)(MYSQLND * const conn, const char * const csname TSRMLS_DC)
+MYSQLND_METHOD(mysqlnd_conn, set_charset)(MYSQLND_CONN_DATA * const conn, const char * const csname TSRMLS_DC)
 {
        size_t this_func = STRUCT_OFFSET(struct st_mysqlnd_conn_methods, set_charset);
        enum_func_status ret = FAIL;
@@ -1639,7 +1664,7 @@ MYSQLND_METHOD(mysqlnd_conn, set_charset)(MYSQLND * const conn, const char * con
 
 /* {{{ mysqlnd_conn::refresh */
 static enum_func_status
-MYSQLND_METHOD(mysqlnd_conn, refresh)(MYSQLND * const conn, uint8_t options TSRMLS_DC)
+MYSQLND_METHOD(mysqlnd_conn, refresh)(MYSQLND_CONN_DATA * const conn, uint8_t options TSRMLS_DC)
 {
        size_t this_func = STRUCT_OFFSET(struct st_mysqlnd_conn_methods, refresh_server);
        enum_func_status ret = FAIL;
@@ -1661,7 +1686,7 @@ MYSQLND_METHOD(mysqlnd_conn, refresh)(MYSQLND * const conn, uint8_t options TSRM
 
 /* {{{ mysqlnd_conn::shutdown */
 static enum_func_status
-MYSQLND_METHOD(mysqlnd_conn, shutdown)(MYSQLND * const conn, uint8_t level TSRMLS_DC)
+MYSQLND_METHOD(mysqlnd_conn, shutdown)(MYSQLND_CONN_DATA * const conn, uint8_t level TSRMLS_DC)
 {
        size_t this_func = STRUCT_OFFSET(struct st_mysqlnd_conn_methods, shutdown_server);
        enum_func_status ret = FAIL;
@@ -1683,7 +1708,7 @@ MYSQLND_METHOD(mysqlnd_conn, shutdown)(MYSQLND * const conn, uint8_t level TSRML
 
 /* {{{ mysqlnd_send_close */
 static enum_func_status
-MYSQLND_METHOD(mysqlnd_conn, send_close)(MYSQLND * const conn TSRMLS_DC)
+MYSQLND_METHOD(mysqlnd_conn, send_close)(MYSQLND_CONN_DATA * const conn TSRMLS_DC)
 {
        enum_func_status ret = PASS;
 
@@ -1695,7 +1720,7 @@ MYSQLND_METHOD(mysqlnd_conn, send_close)(MYSQLND * const conn TSRMLS_DC)
                case CONN_READY:
                        DBG_INF("Connection clean, sending COM_QUIT");
                        if (conn->net->stream) {
-                               ret =  conn->m->simple_command(conn, COM_QUIT, NULL, 0, PROT_LAST, TRUE, TRUE TSRMLS_CC);
+                               ret = conn->m->simple_command(conn, COM_QUIT, NULL, 0, PROT_LAST, TRUE, TRUE TSRMLS_CC);
                        }
                        /* Do nothing */
                        break;
@@ -1737,9 +1762,10 @@ MYSQLND_METHOD(mysqlnd_conn, send_close)(MYSQLND * const conn TSRMLS_DC)
 
 /* {{{ mysqlnd_conn::close */
 static enum_func_status
-MYSQLND_METHOD(mysqlnd_conn, close)(MYSQLND * conn, enum_connection_close_type close_type TSRMLS_DC)
+MYSQLND_METHOD(mysqlnd_conn, close)(MYSQLND * conn_handle, enum_connection_close_type close_type TSRMLS_DC)
 {
        size_t this_func = STRUCT_OFFSET(struct st_mysqlnd_conn_methods, close);
+       MYSQLND_CONN_DATA * conn = conn_handle->data;
        enum_func_status ret = FAIL;
        static enum_mysqlnd_collected_stats
        close_type_to_stat_map[MYSQLND_CLOSE_LAST] = {
@@ -1770,7 +1796,7 @@ MYSQLND_METHOD(mysqlnd_conn, close)(MYSQLND * conn, enum_connection_close_type c
                /* do it after free_reference and we might crash */
                conn->m->local_tx_end(conn, this_func, ret TSRMLS_CC);
 
-               ret = conn->m->free_reference(conn TSRMLS_CC);
+               conn->m->outter_dtor(conn_handle TSRMLS_CC);
        }
        DBG_RETURN(ret);
 }
@@ -1778,8 +1804,8 @@ MYSQLND_METHOD(mysqlnd_conn, close)(MYSQLND * conn, enum_connection_close_type c
 
 
 /* {{{ mysqlnd_conn::get_reference */
-static MYSQLND *
-MYSQLND_METHOD_PRIVATE(mysqlnd_conn, get_reference)(MYSQLND * const conn TSRMLS_DC)
+static MYSQLND_CONN_DATA *
+MYSQLND_METHOD_PRIVATE(mysqlnd_conn, get_reference)(MYSQLND_CONN_DATA * const conn TSRMLS_DC)
 {
        DBG_ENTER("mysqlnd_conn::get_reference");
        ++conn->refcount;
@@ -1791,7 +1817,7 @@ MYSQLND_METHOD_PRIVATE(mysqlnd_conn, get_reference)(MYSQLND * const conn TSRMLS_
 
 /* {{{ mysqlnd_conn::free_reference */
 static enum_func_status
-MYSQLND_METHOD_PRIVATE(mysqlnd_conn, free_reference)(MYSQLND * const conn TSRMLS_DC)
+MYSQLND_METHOD_PRIVATE(mysqlnd_conn, free_reference)(MYSQLND_CONN_DATA * const conn TSRMLS_DC)
 {
        enum_func_status ret = PASS;
        DBG_ENTER("mysqlnd_conn::free_reference");
@@ -1812,7 +1838,7 @@ MYSQLND_METHOD_PRIVATE(mysqlnd_conn, free_reference)(MYSQLND * const conn TSRMLS
 
 /* {{{ mysqlnd_conn::get_state */
 static enum mysqlnd_connection_state
-MYSQLND_METHOD_PRIVATE(mysqlnd_conn, get_state)(MYSQLND * const conn TSRMLS_DC)
+MYSQLND_METHOD_PRIVATE(mysqlnd_conn, get_state)(MYSQLND_CONN_DATA * const conn TSRMLS_DC)
 {
        DBG_ENTER("mysqlnd_conn::get_state");
        DBG_RETURN(conn->state);
@@ -1822,7 +1848,7 @@ MYSQLND_METHOD_PRIVATE(mysqlnd_conn, get_state)(MYSQLND * const conn TSRMLS_DC)
 
 /* {{{ mysqlnd_conn::set_state */
 static void
-MYSQLND_METHOD_PRIVATE(mysqlnd_conn, set_state)(MYSQLND * const conn, enum mysqlnd_connection_state new_state TSRMLS_DC)
+MYSQLND_METHOD_PRIVATE(mysqlnd_conn, set_state)(MYSQLND_CONN_DATA * const conn, enum mysqlnd_connection_state new_state TSRMLS_DC)
 {
        DBG_ENTER("mysqlnd_conn::set_state");
        DBG_INF_FMT("New state=%u", new_state);
@@ -1834,7 +1860,7 @@ MYSQLND_METHOD_PRIVATE(mysqlnd_conn, set_state)(MYSQLND * const conn, enum mysql
 
 /* {{{ mysqlnd_conn::field_count */
 static unsigned int
-MYSQLND_METHOD(mysqlnd_conn, field_count)(const MYSQLND * const conn TSRMLS_DC)
+MYSQLND_METHOD(mysqlnd_conn, field_count)(const MYSQLND_CONN_DATA * const conn TSRMLS_DC)
 {
        return conn->field_count;
 }
@@ -1843,7 +1869,7 @@ MYSQLND_METHOD(mysqlnd_conn, field_count)(const MYSQLND * const conn TSRMLS_DC)
 
 /* {{{ mysqlnd_conn::server_status */
 static unsigned int
-MYSQLND_METHOD(mysqlnd_conn, server_status)(const MYSQLND * const conn TSRMLS_DC)
+MYSQLND_METHOD(mysqlnd_conn, server_status)(const MYSQLND_CONN_DATA * const conn TSRMLS_DC)
 {
        return conn->upsert_status->server_status;
 }
@@ -1852,7 +1878,7 @@ MYSQLND_METHOD(mysqlnd_conn, server_status)(const MYSQLND * const conn TSRMLS_DC
 
 /* {{{ mysqlnd_conn::insert_id */
 static uint64_t
-MYSQLND_METHOD(mysqlnd_conn, insert_id)(const MYSQLND * const conn TSRMLS_DC)
+MYSQLND_METHOD(mysqlnd_conn, insert_id)(const MYSQLND_CONN_DATA * const conn TSRMLS_DC)
 {
        return conn->upsert_status->last_insert_id;
 }
@@ -1861,7 +1887,7 @@ MYSQLND_METHOD(mysqlnd_conn, insert_id)(const MYSQLND * const conn TSRMLS_DC)
 
 /* {{{ mysqlnd_conn::affected_rows */
 static uint64_t
-MYSQLND_METHOD(mysqlnd_conn, affected_rows)(const MYSQLND * const conn TSRMLS_DC)
+MYSQLND_METHOD(mysqlnd_conn, affected_rows)(const MYSQLND_CONN_DATA * const conn TSRMLS_DC)
 {
        return conn->upsert_status->affected_rows;
 }
@@ -1870,7 +1896,7 @@ MYSQLND_METHOD(mysqlnd_conn, affected_rows)(const MYSQLND * const conn TSRMLS_DC
 
 /* {{{ mysqlnd_conn::warning_count */
 static unsigned int
-MYSQLND_METHOD(mysqlnd_conn, warning_count)(const MYSQLND * const conn TSRMLS_DC)
+MYSQLND_METHOD(mysqlnd_conn, warning_count)(const MYSQLND_CONN_DATA * const conn TSRMLS_DC)
 {
        return conn->upsert_status->warning_count;
 }
@@ -1879,13 +1905,12 @@ MYSQLND_METHOD(mysqlnd_conn, warning_count)(const MYSQLND * const conn TSRMLS_DC
 
 /* {{{ mysqlnd_conn::info */
 static const char *
-MYSQLND_METHOD(mysqlnd_conn, info)(const MYSQLND * const conn TSRMLS_DC)
+MYSQLND_METHOD(mysqlnd_conn, info)(const MYSQLND_CONN_DATA * const conn TSRMLS_DC)
 {
        return conn->last_message;
 }
 /* }}} */
 
-#if !defined(MYSQLND_USE_OPTIMISATIONS) || MYSQLND_USE_OPTIMISATIONS == 0
 /* {{{ mysqlnd_get_client_info */
 PHPAPI const char * mysqlnd_get_client_info()
 {
@@ -1900,11 +1925,11 @@ PHPAPI unsigned int mysqlnd_get_client_version()
        return MYSQLND_VERSION_ID;
 }
 /* }}} */
-#endif
+
 
 /* {{{ mysqlnd_conn::get_server_info */
 static const char *
-MYSQLND_METHOD(mysqlnd_conn, get_server_info)(const MYSQLND * const conn TSRMLS_DC)
+MYSQLND_METHOD(mysqlnd_conn, get_server_info)(const MYSQLND_CONN_DATA * const conn TSRMLS_DC)
 {
        return conn->server_version;
 }
@@ -1913,7 +1938,7 @@ MYSQLND_METHOD(mysqlnd_conn, get_server_info)(const MYSQLND * const conn TSRMLS_
 
 /* {{{ mysqlnd_conn::get_host_info */
 static const char *
-MYSQLND_METHOD(mysqlnd_conn, get_host_info)(const MYSQLND * const conn TSRMLS_DC)
+MYSQLND_METHOD(mysqlnd_conn, get_host_info)(const MYSQLND_CONN_DATA * const conn TSRMLS_DC)
 {
        return conn->host_info;
 }
@@ -1922,7 +1947,7 @@ MYSQLND_METHOD(mysqlnd_conn, get_host_info)(const MYSQLND * const conn TSRMLS_DC
 
 /* {{{ mysqlnd_conn::get_proto_info */
 static unsigned int
-MYSQLND_METHOD(mysqlnd_conn, get_proto_info)(const MYSQLND *const conn TSRMLS_DC)
+MYSQLND_METHOD(mysqlnd_conn, get_proto_info)(const MYSQLND_CONN_DATA * const conn TSRMLS_DC)
 {
        return conn->protocol_version;
 }
@@ -1931,7 +1956,7 @@ MYSQLND_METHOD(mysqlnd_conn, get_proto_info)(const MYSQLND *const conn TSRMLS_DC
 
 /* {{{ mysqlnd_conn::charset_name */
 static const char *
-MYSQLND_METHOD(mysqlnd_conn, charset_name)(const MYSQLND * const conn TSRMLS_DC)
+MYSQLND_METHOD(mysqlnd_conn, charset_name)(const MYSQLND_CONN_DATA * const conn TSRMLS_DC)
 {
        return conn->charset->name;
 }
@@ -1940,7 +1965,7 @@ MYSQLND_METHOD(mysqlnd_conn, charset_name)(const MYSQLND * const conn TSRMLS_DC)
 
 /* {{{ mysqlnd_conn::thread_id */
 static uint64_t
-MYSQLND_METHOD(mysqlnd_conn, thread_id)(const MYSQLND * const conn TSRMLS_DC)
+MYSQLND_METHOD(mysqlnd_conn, thread_id)(const MYSQLND_CONN_DATA * const conn TSRMLS_DC)
 {
        return conn->thread_id;
 }
@@ -1949,7 +1974,7 @@ MYSQLND_METHOD(mysqlnd_conn, thread_id)(const MYSQLND * const conn TSRMLS_DC)
 
 /* {{{ mysqlnd_conn::get_server_version */
 static unsigned long
-MYSQLND_METHOD(mysqlnd_conn, get_server_version)(const MYSQLND * const conn TSRMLS_DC)
+MYSQLND_METHOD(mysqlnd_conn, get_server_version)(const MYSQLND_CONN_DATA * const conn TSRMLS_DC)
 {
        long major, minor, patch;
        char *p;
@@ -1971,7 +1996,7 @@ MYSQLND_METHOD(mysqlnd_conn, get_server_version)(const MYSQLND * const conn TSRM
 
 /* {{{ mysqlnd_conn::more_results */
 static zend_bool
-MYSQLND_METHOD(mysqlnd_conn, more_results)(const MYSQLND * const conn TSRMLS_DC)
+MYSQLND_METHOD(mysqlnd_conn, more_results)(const MYSQLND_CONN_DATA * const conn TSRMLS_DC)
 {
        DBG_ENTER("mysqlnd_conn::more_results");
        /* (conn->state == CONN_NEXT_RESULT_PENDING) too */
@@ -1982,7 +2007,7 @@ MYSQLND_METHOD(mysqlnd_conn, more_results)(const MYSQLND * const conn TSRMLS_DC)
 
 /* {{{ mysqlnd_conn::next_result */
 static enum_func_status
-MYSQLND_METHOD(mysqlnd_conn, next_result)(MYSQLND * const conn TSRMLS_DC)
+MYSQLND_METHOD(mysqlnd_conn, next_result)(MYSQLND_CONN_DATA * const conn TSRMLS_DC)
 {
        size_t this_func = STRUCT_OFFSET(struct st_mysqlnd_conn_methods, next_result);
        enum_func_status ret = FAIL;
@@ -2081,10 +2106,10 @@ PHPAPI const char *mysqlnd_field_type_name(enum mysqlnd_field_types field_type)
 
 /* {{{ mysqlnd_conn::change_user */
 static enum_func_status
-MYSQLND_METHOD(mysqlnd_conn, change_user)(MYSQLND * const conn,
-                                                                                 const char *user,
-                                                                                 const char *passwd,
-                                                                                 const char *db,
+MYSQLND_METHOD(mysqlnd_conn, 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)
@@ -2242,7 +2267,7 @@ end:
 
 /* {{{ mysqlnd_conn::set_client_option */
 static enum_func_status
-MYSQLND_METHOD(mysqlnd_conn, set_client_option)(MYSQLND * const conn,
+MYSQLND_METHOD(mysqlnd_conn, set_client_option)(MYSQLND_CONN_DATA * const conn,
                                                                                                enum mysqlnd_option option,
                                                                                                const char * const value
                                                                                                TSRMLS_DC)
@@ -2389,7 +2414,7 @@ end:
 
 /* {{{ mysqlnd_conn::use_result */
 static MYSQLND_RES *
-MYSQLND_METHOD(mysqlnd_conn, use_result)(MYSQLND * const conn TSRMLS_DC)
+MYSQLND_METHOD(mysqlnd_conn, use_result)(MYSQLND_CONN_DATA * const conn TSRMLS_DC)
 {
        size_t this_func = STRUCT_OFFSET(struct st_mysqlnd_conn_methods, use_result);
        MYSQLND_RES * result = NULL;
@@ -2431,7 +2456,7 @@ MYSQLND_METHOD(mysqlnd_conn, use_result)(MYSQLND * const conn TSRMLS_DC)
 
 /* {{{ mysqlnd_conn::store_result */
 static MYSQLND_RES *
-MYSQLND_METHOD(mysqlnd_conn, store_result)(MYSQLND * const conn TSRMLS_DC)
+MYSQLND_METHOD(mysqlnd_conn, store_result)(MYSQLND_CONN_DATA * const conn TSRMLS_DC)
 {
        size_t this_func = STRUCT_OFFSET(struct st_mysqlnd_conn_methods, store_result);
        MYSQLND_RES * result = NULL;
@@ -2470,9 +2495,8 @@ MYSQLND_METHOD(mysqlnd_conn, store_result)(MYSQLND * const conn TSRMLS_DC)
 
 /* {{{ mysqlnd_conn::get_connection_stats */
 static void
-MYSQLND_METHOD(mysqlnd_conn, get_connection_stats)(const MYSQLND * const conn,
-                                                                                                  zval *return_value
-                                                                                                  TSRMLS_DC ZEND_FILE_LINE_DC)
+MYSQLND_METHOD(mysqlnd_conn, get_connection_stats)(const MYSQLND_CONN_DATA * const conn,
+                                                                                                  zval * return_value TSRMLS_DC ZEND_FILE_LINE_DC)
 {
        DBG_ENTER("mysqlnd_conn::get_connection_stats");
        mysqlnd_fill_stats_hash(conn->stats, mysqlnd_stats_values_names, return_value TSRMLS_CC ZEND_FILE_LINE_CC);
@@ -2483,7 +2507,7 @@ MYSQLND_METHOD(mysqlnd_conn, get_connection_stats)(const MYSQLND * const conn,
 
 /* {{{ mysqlnd_conn::set_autocommit */
 static enum_func_status
-MYSQLND_METHOD(mysqlnd_conn, set_autocommit)(MYSQLND * conn, unsigned int mode TSRMLS_DC)
+MYSQLND_METHOD(mysqlnd_conn, set_autocommit)(MYSQLND_CONN_DATA * conn, unsigned int mode TSRMLS_DC)
 {
        size_t this_func = STRUCT_OFFSET(struct st_mysqlnd_conn_methods, set_autocommit);
        enum_func_status ret = FAIL;
@@ -2501,7 +2525,7 @@ MYSQLND_METHOD(mysqlnd_conn, set_autocommit)(MYSQLND * conn, unsigned int mode T
 
 /* {{{ mysqlnd_conn::tx_commit */
 static enum_func_status
-MYSQLND_METHOD(mysqlnd_conn, tx_commit)(MYSQLND * conn TSRMLS_DC)
+MYSQLND_METHOD(mysqlnd_conn, tx_commit)(MYSQLND_CONN_DATA * conn TSRMLS_DC)
 {
        size_t this_func = STRUCT_OFFSET(struct st_mysqlnd_conn_methods, tx_commit);
        enum_func_status ret = FAIL;
@@ -2519,7 +2543,7 @@ MYSQLND_METHOD(mysqlnd_conn, tx_commit)(MYSQLND * conn TSRMLS_DC)
 
 /* {{{ mysqlnd_conn::tx_rollback */
 static enum_func_status
-MYSQLND_METHOD(mysqlnd_conn, tx_rollback)(MYSQLND * conn TSRMLS_DC)
+MYSQLND_METHOD(mysqlnd_conn, tx_rollback)(MYSQLND_CONN_DATA * conn TSRMLS_DC)
 {
        size_t this_func = STRUCT_OFFSET(struct st_mysqlnd_conn_methods, tx_rollback);
        enum_func_status ret = FAIL;
@@ -2537,7 +2561,7 @@ MYSQLND_METHOD(mysqlnd_conn, tx_rollback)(MYSQLND * conn TSRMLS_DC)
 
 /* {{{ mysqlnd_conn::local_tx_start */
 static enum_func_status
-MYSQLND_METHOD(mysqlnd_conn, local_tx_start)(MYSQLND * conn, size_t this_func TSRMLS_DC)
+MYSQLND_METHOD(mysqlnd_conn, local_tx_start)(MYSQLND_CONN_DATA * conn, size_t this_func TSRMLS_DC)
 {
        enum_func_status ret = PASS;
        DBG_ENTER("mysqlnd_conn::local_tx_start");
@@ -2548,7 +2572,7 @@ MYSQLND_METHOD(mysqlnd_conn, local_tx_start)(MYSQLND * conn, size_t this_func TS
 
 /* {{{ mysqlnd_conn::local_tx_end */
 static enum_func_status
-MYSQLND_METHOD(mysqlnd_conn, local_tx_end)(MYSQLND * conn, size_t this_func, enum_func_status status TSRMLS_DC)
+MYSQLND_METHOD(mysqlnd_conn, local_tx_end)(MYSQLND_CONN_DATA * conn, size_t this_func, enum_func_status status TSRMLS_DC)
 {
        DBG_ENTER("mysqlnd_conn::local_tx_end");
        DBG_RETURN(status);
@@ -2558,7 +2582,7 @@ MYSQLND_METHOD(mysqlnd_conn, local_tx_end)(MYSQLND * conn, size_t this_func, enu
 
 /* {{{ mysqlnd_conn::init */
 static enum_func_status
-MYSQLND_METHOD(mysqlnd_conn, init)(MYSQLND * conn TSRMLS_DC)
+MYSQLND_METHOD(mysqlnd_conn, init)(MYSQLND_CONN_DATA * conn TSRMLS_DC)
 {
        DBG_ENTER("mysqlnd_conn::init");
        mysqlnd_stats_init(&conn->stats, STAT_LAST);
@@ -2571,7 +2595,7 @@ MYSQLND_METHOD(mysqlnd_conn, init)(MYSQLND * conn TSRMLS_DC)
 }
 /* }}} */
 
-MYSQLND_STMT * _mysqlnd_stmt_init(MYSQLND * const conn TSRMLS_DC);
+MYSQLND_STMT * _mysqlnd_stmt_init(MYSQLND_CONN_DATA * const conn TSRMLS_DC);
 
 
 MYSQLND_CLASS_METHODS_START(mysqlnd_conn)
@@ -2630,6 +2654,7 @@ MYSQLND_CLASS_METHODS_START(mysqlnd_conn)
        MYSQLND_METHOD(mysqlnd_conn, close),
 
        MYSQLND_METHOD_PRIVATE(mysqlnd_conn, dtor),
+       MYSQLND_METHOD_PRIVATE(mysqlnd_conn, outter_dtor),
 
        mysqlnd_query_read_result_set_header,
 
index 9d109457b5ee31771a91161ec6a206b3154a108a..a49a41c08b640b3fd4321f39d8ba299db17b03f6 100644 (file)
@@ -27,9 +27,6 @@
 
 #define MYSQLND_PLUGIN_API_VERSION 1
 
-/* This forces inlining of some accessor functions */
-#define MYSQLND_USE_OPTIMISATIONS 0
-
 #define MYSQLND_STRING_TO_INT_CONVERSION
 /*
   This force mysqlnd to do a single (or more depending on ammount of data)
@@ -78,8 +75,8 @@ PHPAPI void * _mysqlnd_plugin_find(const char * const name TSRMLS_DC);
 PHPAPI void _mysqlnd_plugin_apply_with_argument(apply_func_arg_t apply_func, void * argument TSRMLS_DC);
 #define mysqlnd_plugin_apply_with_argument(func, argument) _mysqlnd_plugin_apply_with_argument((func), (argument) TSRMLS_CC);
 
-#define mysqlnd_restart_psession(conn) (conn)->m->restart_psession((conn) TSRMLS_CC)
-#define mysqlnd_end_psession(conn)             (conn)->m->end_psession((conn) TSRMLS_CC)
+#define mysqlnd_restart_psession(conn) ((conn)->data)->m->restart_psession((conn)->data TSRMLS_CC)
+#define mysqlnd_end_psession(conn)             ((conn)->data)->m->end_psession((conn)->data TSRMLS_CC)
 PHPAPI void mysqlnd_minfo_print_hash(zval *values);
 #define mysqlnd_thread_safe()  TRUE
 
@@ -90,17 +87,17 @@ PHPAPI const MYSQLND_CHARSET * mysqlnd_find_charset_name(const char * const char
 /* Connect */
 #define mysqlnd_init(persistent) _mysqlnd_init((persistent) TSRMLS_CC)
 PHPAPI MYSQLND * _mysqlnd_init(zend_bool persistent TSRMLS_DC);
-PHPAPI MYSQLND * mysqlnd_connect(MYSQLND *conn,
-                                                 const char *host, const char *user,
-                                                 const char *passwd, unsigned int passwd_len,
-                                                 const char *db, unsigned int db_len,
+PHPAPI MYSQLND * mysqlnd_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,
+                                                 const char * socket_or_pipe,
                                                  unsigned int mysql_flags
                                                  TSRMLS_DC);
 
-#define mysqlnd_change_user(conn, user, passwd, db, silent)            (conn)->m->change_user((conn), (user), (passwd), (db), (silent), strlen((passwd)) TSRMLS_CC)
-#define mysqlnd_change_user_ex(conn, user, passwd, db, silent, passwd_len)             (conn)->m->change_user((conn), (user), (passwd), (db), (silent), (passwd_len) TSRMLS_CC)
+#define mysqlnd_change_user(conn, user, passwd, db, silent)            ((conn)->data)->m->change_user((conn)->data, (user), (passwd), (db), (silent), strlen((passwd)) TSRMLS_CC)
+#define mysqlnd_change_user_ex(conn, user, passwd, db, silent, passwd_len)     ((conn)->data)->m->change_user((conn)->data, (user), (passwd), (db), (silent), (passwd_len) TSRMLS_CC)
 
 #define mysqlnd_debug(x)                                                               _mysqlnd_debug((x) TSRMLS_CC)
 PHPAPI void _mysqlnd_debug(const char *mode TSRMLS_DC);
@@ -110,44 +107,45 @@ PHPAPI void _mysqlnd_debug(const char *mode TSRMLS_DC);
 #define mysqlnd_fetch_row_c(result)                                            (result)->m.fetch_row_c((result) TSRMLS_CC)
 #define mysqlnd_fetch_all(result, flags, return_value) (result)->m.fetch_all((result), (flags), (return_value) TSRMLS_CC ZEND_FILE_LINE_CC)
 #define mysqlnd_result_fetch_field_data(res,offset,ret)        (res)->m.fetch_field_data((res), (offset), (ret) TSRMLS_CC)
-#define mysqlnd_get_connection_stats(conn, values)             (conn)->m->get_statistics((conn),  (values) TSRMLS_CC ZEND_FILE_LINE_CC)
+#define mysqlnd_get_connection_stats(conn, values)             ((conn)->data)->m->get_statistics((conn)->data,  (values) TSRMLS_CC ZEND_FILE_LINE_CC)
 #define mysqlnd_get_client_stats(values)                               _mysqlnd_get_client_stats((values) TSRMLS_CC ZEND_FILE_LINE_CC)
 
-#define mysqlnd_close(conn,is_forced)                                  (conn)->m->close((conn), (is_forced) TSRMLS_CC)
-#define mysqlnd_query(conn, query_str, query_len)              (conn)->m->query((conn), (query_str), (query_len) TSRMLS_CC)
-#define mysqlnd_async_query(conn, query_str, query_len)        (conn)->m->send_query((conn), (query_str), (query_len) TSRMLS_CC)
+#define mysqlnd_close(conn,is_forced)                                  ((conn)->data)->m->close((conn), (is_forced) TSRMLS_CC)
+#define mysqlnd_query(conn, query_str, query_len)              ((conn)->data)->m->query((conn)->data, (query_str), (query_len) TSRMLS_CC)
+#define mysqlnd_async_query(conn, query_str, query_len)        ((conn)->data)->m->send_query((conn)->data, (query_str), (query_len) TSRMLS_CC)
 #define mysqlnd_poll(r, err, d_pull,sec,usec,desc_num) _mysqlnd_poll((r), (err), (d_pull), (sec), (usec), (desc_num) TSRMLS_CC)
-#define mysqlnd_reap_async_query(conn)                                 (conn)->m->reap_query((conn) TSRMLS_CC)
+#define mysqlnd_reap_async_query(conn)                                 ((conn)->data)->m->reap_query((conn)->data TSRMLS_CC)
 #define mysqlnd_unbuffered_skip_result(result)                 (result)->m.skip_result((result) TSRMLS_CC)
 
 PHPAPI enum_func_status _mysqlnd_poll(MYSQLND **r_array, MYSQLND **e_array, MYSQLND ***dont_poll, long sec, long usec, uint * desc_num TSRMLS_DC);
 
-#define mysqlnd_use_result(conn)               (conn)->m->use_result((conn) TSRMLS_CC)
-#define mysqlnd_store_result(conn)             (conn)->m->store_result((conn) TSRMLS_CC)
-#define mysqlnd_next_result(conn)              (conn)->m->next_result((conn) TSRMLS_CC)
-#define mysqlnd_more_results(conn)             (conn)->m->more_results((conn) TSRMLS_CC)
+#define mysqlnd_use_result(conn)               ((conn)->data)->m->use_result((conn)->data TSRMLS_CC)
+#define mysqlnd_store_result(conn)             ((conn)->data)->m->store_result((conn)->data TSRMLS_CC)
+#define mysqlnd_next_result(conn)              ((conn)->data)->m->next_result((conn)->data TSRMLS_CC)
+#define mysqlnd_more_results(conn)             ((conn)->data)->m->more_results((conn)->data TSRMLS_CC)
 #define mysqlnd_free_result(r,e_or_i)  ((MYSQLND_RES*)r)->m.free_result(((MYSQLND_RES*)(r)), (e_or_i) TSRMLS_CC)
 #define mysqlnd_data_seek(result, row) (result)->m.seek_data((result), (row) TSRMLS_CC)
 
 /* Errors */
-#define mysqlnd_errno(conn)                            (conn)->m->get_error_no((conn) TSRMLS_CC)
-#define mysqlnd_error(conn)                            (conn)->m->get_error_str((conn) TSRMLS_CC)
-#define mysqlnd_sqlstate(conn)                 (conn)->m->get_sqlstate((conn) TSRMLS_CC)
+#define mysqlnd_errno(conn)                            ((conn)->data)->m->get_error_no((conn)->data TSRMLS_CC)
+#define mysqlnd_error(conn)                            ((conn)->data)->m->get_error_str((conn)->data TSRMLS_CC)
+#define mysqlnd_sqlstate(conn)                 ((conn)->data)->m->get_sqlstate((conn)->data TSRMLS_CC)
 
 /* Charset */
-#define mysqlnd_character_set_name(conn) (conn)->m->charset_name((conn) TSRMLS_CC)
+#define mysqlnd_character_set_name(conn) ((conn)->data)->m->charset_name((conn)->data TSRMLS_CC)
 
 /* Simple metadata */
-#define mysqlnd_field_count(conn)              (conn)->m->get_field_count((conn) TSRMLS_CC)
-#define mysqlnd_insert_id(conn)                        (conn)->m->get_last_insert_id((conn) TSRMLS_CC)
-#define mysqlnd_affected_rows(conn)            (conn)->m->get_affected_rows((conn) TSRMLS_CC)
-#define mysqlnd_warning_count(conn)            (conn)->m->get_warning_count((conn) TSRMLS_CC)
-#define mysqlnd_info(conn)                             (conn)->m->get_last_message((conn) TSRMLS_CC)
-#define mysqlnd_get_server_info(conn)  (conn)->m->get_server_information((conn) TSRMLS_CC)
-#define mysqlnd_get_host_info(conn)            (conn)->m->get_host_information((conn) TSRMLS_CC)
-#define mysqlnd_get_proto_info(conn)   (conn)->m->get_protocol_information((conn) TSRMLS_CC)
-#define mysqlnd_thread_id(conn)                        (conn)->m->get_thread_id((conn) TSRMLS_CC)
-#define mysqlnd_get_server_status(conn)        (conn)->m->get_server_status((conn) TSRMLS_CC)
+#define mysqlnd_field_count(conn)              ((conn)->data)->m->get_field_count((conn)->data TSRMLS_CC)
+#define mysqlnd_insert_id(conn)                        ((conn)->data)->m->get_last_insert_id((conn)->data TSRMLS_CC)
+#define mysqlnd_affected_rows(conn)            ((conn)->data)->m->get_affected_rows((conn)->data TSRMLS_CC)
+#define mysqlnd_warning_count(conn)            ((conn)->data)->m->get_warning_count((conn)->data TSRMLS_CC)
+#define mysqlnd_info(conn)                             ((conn)->data)->m->get_last_message((conn)->data TSRMLS_CC)
+#define mysqlnd_get_server_info(conn)  ((conn)->data)->m->get_server_information((conn)->data TSRMLS_CC)
+#define mysqlnd_get_server_version(conn) ((conn)->data)->m->get_server_version((conn)->data TSRMLS_CC)
+#define mysqlnd_get_host_info(conn)            ((conn)->data)->m->get_host_information((conn)->data TSRMLS_CC)
+#define mysqlnd_get_proto_info(conn)   ((conn)->data)->m->get_protocol_information((conn)->data TSRMLS_CC)
+#define mysqlnd_thread_id(conn)                        ((conn)->data)->m->get_thread_id((conn)->data TSRMLS_CC)
+#define mysqlnd_get_server_status(conn)        ((conn)->data)->m->get_server_status((conn)->data TSRMLS_CC)
 
 #define mysqlnd_num_rows(result)               (result)->m.num_rows((result) TSRMLS_CC)
 #define mysqlnd_num_fields(result)             (result)->m.num_fields((result) TSRMLS_CC)
@@ -165,7 +163,7 @@ PHPAPI unsigned long * _mysqlnd_fetch_lengths(MYSQLND_RES * const result  TSRMLS
 PHPAPI const char *    mysqlnd_get_client_info();
 PHPAPI unsigned int    mysqlnd_get_client_version();
 
-#define mysqlnd_ssl_set(conn, key, cert, ca, capath, cipher) (conn)->m->ssl_set((conn), (key), (cert), (ca), (capath), (cipher) TSRMLS_CC)
+#define mysqlnd_ssl_set(conn, key, cert, ca, capath, cipher) ((conn)->data)->m->ssl_set((conn)->data, (key), (cert), (ca), (capath), (cipher) TSRMLS_CC)
 
 /* PS */
 #define mysqlnd_stmt_insert_id(stmt)           (stmt)->m->get_last_insert_id((stmt) TSRMLS_CC)
@@ -189,40 +187,39 @@ PHPAPI void mysqlnd_free_result_bind_dtor(MYSQLND_RESULT_BIND * result_bind TSRM
 PHPAPI const char * mysqlnd_field_type_name(enum mysqlnd_field_types field_type);
 
 /* LOAD DATA LOCAL */
-PHPAPI void mysqlnd_local_infile_default(MYSQLND *conn);
-PHPAPI void mysqlnd_set_local_infile_handler(MYSQLND * const conn, const char * const funcname);
+PHPAPI void mysqlnd_local_infile_default(MYSQLND_CONN_DATA * conn);
+PHPAPI void mysqlnd_set_local_infile_handler(MYSQLND_CONN_DATA * const conn, const char * const funcname);
 
 /* Simple commands */
-#define mysqlnd_autocommit(conn, mode)         (conn)->m->set_autocommit((conn), (mode) TSRMLS_CC)
-#define mysqlnd_commit(conn)                           (conn)->m->tx_commit((conn) TSRMLS_CC)
-#define mysqlnd_rollback(conn)                         (conn)->m->tx_rollback((conn) TSRMLS_CC)
-#define mysqlnd_list_dbs(conn, wild)           (conn)->m->list_method((conn), wild? "SHOW DATABASES LIKE %s":"SHOW DATABASES", (wild), NULL TSRMLS_CC)
-#define mysqlnd_list_fields(conn, tab,wild)    (conn)->m->list_fields((conn), (tab), (wild) TSRMLS_CC)
-#define mysqlnd_list_processes(conn)           (conn)->m->list_method((conn), "SHOW PROCESSLIST", NULL, NULL TSRMLS_CC)
-#define mysqlnd_list_tables(conn, wild)                (conn)->m->list_method((conn), wild? "SHOW TABLES LIKE %s":"SHOW TABLES", (wild), NULL TSRMLS_CC)
-#define mysqlnd_dump_debug_info(conn)          (conn)->m->server_dump_debug_information((conn) TSRMLS_CC)
-#define mysqlnd_select_db(conn, db, db_len)    (conn)->m->select_db((conn), (db), (db_len) TSRMLS_CC)
-#define mysqlnd_ping(conn)                                     (conn)->m->ping((conn) TSRMLS_CC)
-#define mysqlnd_kill(conn, pid)                                (conn)->m->kill_connection((conn), (pid) TSRMLS_CC)
-#define mysqlnd_refresh(conn, options)         (conn)->m->refresh_server((conn), (options) TSRMLS_CC)
-#define mysqlnd_shutdown(conn, level)          (conn)->m->shutdown_server((conn), (level) TSRMLS_CC)
-#define mysqlnd_get_server_version(conn)       (conn)->m->get_server_version((conn) TSRMLS_CC)
-#define mysqlnd_set_character_set(conn, cs)    (conn)->m->set_charset((conn), (cs) TSRMLS_CC)
-#define mysqlnd_stat(conn, msg, msg_len)       (conn)->m->get_server_statistics((conn), (msg), (msg_len) TSRMLS_CC)
-#define mysqlnd_options(conn, opt, value)      (conn)->m->set_client_option((conn), (opt), (value) TSRMLS_CC)
-#define mysqlnd_set_server_option(conn, op)    (conn)->m->set_server_option((conn), (op) TSRMLS_CC)
+#define mysqlnd_autocommit(conn, mode)         ((conn)->data)->m->set_autocommit((conn)->data, (mode) TSRMLS_CC)
+#define mysqlnd_commit(conn)                           ((conn)->data)->m->tx_commit((conn)->data TSRMLS_CC)
+#define mysqlnd_rollback(conn)                         ((conn)->data)->m->tx_rollback((conn)->data TSRMLS_CC)
+#define mysqlnd_list_dbs(conn, wild)           ((conn)->data)->m->list_method((conn)->data, wild? "SHOW DATABASES LIKE %s":"SHOW DATABASES", (wild), NULL TSRMLS_CC)
+#define mysqlnd_list_fields(conn, tab,wild)    ((conn)->data)->m->list_fields((conn)->data, (tab), (wild) TSRMLS_CC)
+#define mysqlnd_list_processes(conn)           ((conn)->data)->m->list_method((conn)->data, "SHOW PROCESSLIST", NULL, NULL TSRMLS_CC)
+#define mysqlnd_list_tables(conn, wild)                ((conn)->data)->m->list_method((conn)->data, wild? "SHOW TABLES LIKE %s":"SHOW TABLES", (wild), NULL TSRMLS_CC)
+#define mysqlnd_dump_debug_info(conn)          ((conn)->data)->m->server_dump_debug_information((conn)->data TSRMLS_CC)
+#define mysqlnd_select_db(conn, db, db_len)    ((conn)->data)->m->select_db((conn)->data, (db), (db_len) TSRMLS_CC)
+#define mysqlnd_ping(conn)                                     ((conn)->data)->m->ping((conn)->data TSRMLS_CC)
+#define mysqlnd_kill(conn, pid)                                ((conn)->data)->m->kill_connection((conn)->data, (pid) TSRMLS_CC)
+#define mysqlnd_refresh(conn, options)         ((conn)->data)->m->refresh_server((conn)->data, (options) TSRMLS_CC)
+#define mysqlnd_shutdown(conn, level)          ((conn)->data)->m->shutdown_server((conn)->data, (level) TSRMLS_CC)
+#define mysqlnd_set_character_set(conn, cs)    ((conn)->data)->m->set_charset((conn)->data, (cs) TSRMLS_CC)
+#define mysqlnd_stat(conn, msg, msg_len)       ((conn)->data)->m->get_server_statistics(((conn)->data), (msg), (msg_len) TSRMLS_CC)
+#define mysqlnd_options(conn, opt, value)      ((conn)->data)->m->set_client_option((conn)->data, (opt), (value) TSRMLS_CC)
+#define mysqlnd_set_server_option(conn, op)    ((conn)->data)->m->set_server_option((conn)->data, (op) TSRMLS_CC)
 
 /* Escaping */
 #define mysqlnd_real_escape_string(conn, newstr, escapestr, escapestr_len) \
-               (conn)->m->escape_string((conn), (newstr), (escapestr), (escapestr_len) TSRMLS_CC)
+               ((conn)->data)->m->escape_string((conn), (newstr), (escapestr), (escapestr_len) TSRMLS_CC)
 #define mysqlnd_escape_string(newstr, escapestr, escapestr_len) \
                mysqlnd_old_escape_string((newstr), (escapestr), (escapestr_len) TSRMLS_CC)
 
-PHPAPI ulong mysqlnd_old_escape_string(char *newstr, const char *escapestr, size_t escapestr_len TSRMLS_DC);
+PHPAPI ulong mysqlnd_old_escape_string(char * newstr, const char * escapestr, size_t escapestr_len TSRMLS_DC);
 
 
 /* PS */
-#define mysqlnd_stmt_init(conn)                                (conn)->m->stmt_init((conn) TSRMLS_CC)
+#define mysqlnd_stmt_init(conn)                                ((conn)->data)->m->stmt_init(((conn)->data) TSRMLS_CC)
 #define mysqlnd_stmt_store_result(stmt)                (!mysqlnd_stmt_field_count((stmt)) ? PASS:((stmt)->m->store_result((stmt) TSRMLS_CC)? PASS:FAIL))
 #define mysqlnd_stmt_get_result(stmt)          (stmt)->m->get_result((stmt) TSRMLS_CC)
 #define mysqlnd_stmt_more_results(stmt)                (stmt)->m->more_results((stmt) TSRMLS_CC)
index c723bd42dcdf2d44383251c811d53b38e2da92de..f2a51275145b7ece2338809295986edec1393764 100644 (file)
@@ -31,7 +31,7 @@
 
 /* {{{ mysqlnd_auth_handshake */
 enum_func_status
-mysqlnd_auth_handshake(MYSQLND * conn,
+mysqlnd_auth_handshake(MYSQLND_CONN_DATA * conn,
                                                          const char * const user,
                                                          const char * const passwd,
                                                          const size_t passwd_len,
@@ -153,7 +153,7 @@ end:
 
 /* {{{ mysqlnd_auth_change_user */
 enum_func_status
-mysqlnd_auth_change_user(MYSQLND * const conn,
+mysqlnd_auth_change_user(MYSQLND_CONN_DATA * const conn,
                                                                const char * const user,
                                                                const size_t user_len,
                                                                const char * const passwd,
@@ -220,7 +220,7 @@ mysqlnd_auth_change_user(MYSQLND * const conn,
                auth_packet->auth_plugin_name = auth_protocol;
 
 
-               if (mysqlnd_get_server_version(conn) >= 50123) {
+               if (conn->m->get_server_version(conn TSRMLS_CC) >= 50123) {
                        auth_packet->charset_no = conn->charset->nr;
                }
        
@@ -260,12 +260,12 @@ mysqlnd_auth_change_user(MYSQLND * const conn,
                  bug#25371 mysql_change_user() triggers "packets out of sync"
                  When it gets fixed, there should be one more check here
                */
-               if (mysqlnd_get_server_version(conn) > 50113L && mysqlnd_get_server_version(conn) < 50118L) {
+               if (conn->m->get_server_version(conn TSRMLS_CC) > 50113L &&conn->m->get_server_version(conn TSRMLS_CC) < 50118L) {
                        MYSQLND_PACKET_OK * redundant_error_packet = conn->protocol->m.get_ok_packet(conn->protocol, FALSE TSRMLS_CC);
                        if (redundant_error_packet) {
                                PACKET_READ(redundant_error_packet, conn);
                                PACKET_FREE(redundant_error_packet);
-                               DBG_INF_FMT("Server is %u, buggy, sends two ERR messages", mysqlnd_get_server_version(conn));
+                               DBG_INF_FMT("Server is %u, buggy, sends two ERR messages", conn->m->get_server_version(conn TSRMLS_CC));
                        } else {
                                SET_OOM_ERROR(*conn->error_info);
                        }
@@ -292,7 +292,7 @@ mysqlnd_auth_change_user(MYSQLND * const conn,
                }
                memset(conn->upsert_status, 0, sizeof(*conn->upsert_status));
                /* set charset for old servers */
-               if (mysqlnd_get_server_version(conn) < 50123) {
+               if (conn->m->get_server_version(conn TSRMLS_CC) < 50123) {
                        ret = conn->m->set_charset(conn, old_cs->name TSRMLS_CC);
                }
        } else if (ret == FAIL && chg_user_resp->server_asked_323_auth == TRUE) {
@@ -358,7 +358,7 @@ void php_mysqlnd_scramble(zend_uchar * const buffer, const zend_uchar * const sc
 static zend_uchar *
 mysqlnd_native_auth_get_auth_data(struct st_mysqlnd_authentication_plugin * self,
                                                                  size_t * auth_data_len,
-                                                                 MYSQLND * conn, const char * const user, const char * const passwd,
+                                                                 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, unsigned long mysql_flags
                                                                  TSRMLS_DC)
@@ -416,7 +416,7 @@ static struct st_mysqlnd_authentication_plugin mysqlnd_native_auth_plugin =
 static zend_uchar *
 mysqlnd_pam_auth_get_auth_data(struct st_mysqlnd_authentication_plugin * self,
                                                           size_t * auth_data_len,
-                                                          MYSQLND * conn, const char * const user, const char * const passwd,
+                                                          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, unsigned long mysql_flags
                                                           TSRMLS_DC)
index e74a71fab4dd36039800381cf95c53eefc50d7fe..1f33df176827e79d1265631ee1c882e1359946df 100644 (file)
@@ -109,46 +109,56 @@ mysqlnd_error_list_pdtor(void * pDest)
 static MYSQLND *
 MYSQLND_METHOD(mysqlnd_object_factory, get_connection)(zend_bool persistent TSRMLS_DC)
 {
-       size_t alloc_size = sizeof(MYSQLND) + mysqlnd_plugin_count() * sizeof(void *);
-       MYSQLND * ret;
+       size_t alloc_size_ret = sizeof(MYSQLND) + mysqlnd_plugin_count() * sizeof(void *);
+       size_t alloc_size_ret_data = sizeof(MYSQLND_CONN_DATA) + mysqlnd_plugin_count() * sizeof(void *);
+       MYSQLND * new_object;
+       MYSQLND_CONN_DATA * data;
 
        DBG_ENTER("mysqlnd_driver::get_connection");
        DBG_INF_FMT("persistent=%u", persistent);
-       ret = mnd_pecalloc(1, alloc_size, persistent);
-       if (!ret) {
+       new_object = mnd_pecalloc(1, alloc_size_ret, persistent);
+       if (!new_object) {
                DBG_RETURN(NULL);
        }
+       new_object->data = mnd_pecalloc(1, alloc_size_ret_data, persistent);
+       if (!new_object->data) {
+               mnd_pefree(new_object, persistent);
+               DBG_RETURN(NULL);
+       }
+       new_object->persistent = persistent;
 
-       ret->error_info = &(ret->error_info_impl);
-       ret->options = &(ret->options_impl);
-       ret->upsert_status = &(ret->upsert_status_impl);
+       data = new_object->data;
 
-       ret->persistent = persistent;
-       ret->m = mysqlnd_conn_get_methods();
-       CONN_SET_STATE(ret, CONN_ALLOCED);
-       ret->m->get_reference(ret TSRMLS_CC);
+       data->error_info = &(data->error_info_impl);
+       data->options = &(data->options_impl);
+       data->upsert_status = &(data->upsert_status_impl);
 
-       if (PASS != ret->m->init(ret TSRMLS_CC)) {
-               ret->m->dtor(ret TSRMLS_CC);
+       data->persistent = persistent;
+       data->m = mysqlnd_conn_get_methods();
+       CONN_SET_STATE(data, CONN_ALLOCED);
+       data->m->get_reference(data TSRMLS_CC);
+
+       if (PASS != data->m->init(data TSRMLS_CC)) {
+               data->m->outter_dtor(new_object TSRMLS_CC);
                DBG_RETURN(NULL);
        }
 
-       ret->error_info->error_list = mnd_pecalloc(1, sizeof(zend_llist), persistent);
-       if (!ret->error_info->error_list) {
-               ret->m->dtor(ret TSRMLS_CC);
+       data->error_info->error_list = mnd_pecalloc(1, sizeof(zend_llist), persistent);
+       if (!data->error_info->error_list) {
+               data->m->outter_dtor(new_object TSRMLS_CC);
                DBG_RETURN(NULL);
        } else {
-               zend_llist_init(ret->error_info->error_list, sizeof(MYSQLND_ERROR_LIST_ELEMENT), (llist_dtor_func_t)mysqlnd_error_list_pdtor, persistent);
+               zend_llist_init(data->error_info->error_list, sizeof(MYSQLND_ERROR_LIST_ELEMENT), (llist_dtor_func_t)mysqlnd_error_list_pdtor, persistent);
        }
 
-       DBG_RETURN(ret);
+       DBG_RETURN(new_object);
 }
 /* }}} */
 
 
 /* {{{ mysqlnd_object_factory::get_prepared_statement */
 static MYSQLND_STMT *
-MYSQLND_METHOD(mysqlnd_object_factory, get_prepared_statement)(MYSQLND * const conn TSRMLS_DC)
+MYSQLND_METHOD(mysqlnd_object_factory, get_prepared_statement)(MYSQLND_CONN_DATA * const conn TSRMLS_DC)
 {
        size_t alloc_size = sizeof(MYSQLND_STMT) + mysqlnd_plugin_count() * sizeof(void *);
        MYSQLND_STMT * ret = mnd_pecalloc(1, alloc_size, conn->persistent);
index ab82c24399c19daaf04ecfd23fd39981948b505b..b5d5f420b4fff349dc64bf9f2c167919047448df 100644 (file)
@@ -42,6 +42,20 @@ _mysqlnd_plugin_get_plugin_connection_data(const MYSQLND * conn, unsigned int pl
 /* }}} */
 
 
+/* {{{ _mysqlnd_plugin_get_plugin_connection_data_data */
+PHPAPI void **
+_mysqlnd_plugin_get_plugin_connection_data_data(const MYSQLND_CONN_DATA * conn, unsigned int plugin_id TSRMLS_DC)
+{
+       DBG_ENTER("_mysqlnd_plugin_get_plugin_connection_data_data");
+       DBG_INF_FMT("plugin_id=%u", plugin_id);
+       if (!conn || plugin_id >= mysqlnd_plugin_count()) {
+               return NULL;
+       }
+       DBG_RETURN((void *)((char *)conn + sizeof(MYSQLND_CONN_DATA) + plugin_id * sizeof(void *)));
+}
+/* }}} */
+
+
 /* {{{ _mysqlnd_plugin_get_plugin_result_data */
 PHPAPI void ** _mysqlnd_plugin_get_plugin_result_data(const MYSQLND_RES * result, unsigned int plugin_id TSRMLS_DC)
 {
index 2e7ae62008291861016c77a338b1fbe2d4fb43ee..876a69295cc57c16259850e515010ade5cc70e37 100644 (file)
@@ -25,6 +25,9 @@
 PHPAPI void ** _mysqlnd_plugin_get_plugin_connection_data(const MYSQLND * conn, unsigned int plugin_id TSRMLS_DC);
 #define mysqlnd_plugin_get_plugin_connection_data(c, p_id) _mysqlnd_plugin_get_plugin_connection_data((c), (p_id) TSRMLS_CC)
 
+PHPAPI void ** _mysqlnd_plugin_get_plugin_connection_data_data(const MYSQLND_CONN_DATA * conn, unsigned int plugin_id TSRMLS_DC);
+#define mysqlnd_plugin_get_plugin_connection_data_data(c, p_id) _mysqlnd_plugin_get_plugin_connection_data_data((c), (p_id) TSRMLS_CC)
+
 PHPAPI void ** _mysqlnd_plugin_get_plugin_result_data(const MYSQLND_RES * result, unsigned int plugin_id TSRMLS_DC);
 #define mysqlnd_plugin_get_plugin_result_data(r, p_id) _mysqlnd_plugin_get_plugin_result_data((r), (p_id) TSRMLS_CC)
 
index 2d1abc09472a24dbec1bc8ed3624bb8d37584060..4dff15dd2b463ed1e9379767f1b13674c5c914c6 100644 (file)
@@ -27,7 +27,7 @@
 
 /* {{{ mysqlnd_local_infile_init */
 static
-int mysqlnd_local_infile_init(void **ptr, char *filename, void **userdata TSRMLS_DC)
+int mysqlnd_local_infile_init(void ** ptr, char * filename, void ** userdata TSRMLS_DC)
 {
        MYSQLND_INFILE_INFO     *info;
        php_stream_context      *context = NULL;
@@ -66,7 +66,7 @@ int mysqlnd_local_infile_init(void **ptr, char *filename, void **userdata TSRMLS
 
 /* {{{ mysqlnd_local_infile_read */
 static
-int mysqlnd_local_infile_read(void *ptr, zend_uchar * buf, unsigned int buf_len TSRMLS_DC)
+int mysqlnd_local_infile_read(void * ptr, zend_uchar * buf, unsigned int buf_len TSRMLS_DC)
 {
        MYSQLND_INFILE_INFO     *info = (MYSQLND_INFILE_INFO *)ptr;
        int count;
@@ -87,7 +87,7 @@ int mysqlnd_local_infile_read(void *ptr, zend_uchar * buf, unsigned int buf_len
 
 /* {{{ mysqlnd_local_infile_error */
 static
-int    mysqlnd_local_infile_error(void *ptr, char *error_buf, unsigned int error_buf_len TSRMLS_DC)
+int    mysqlnd_local_infile_error(void * ptr, char *error_buf, unsigned int error_buf_len TSRMLS_DC)
 {
        MYSQLND_INFILE_INFO     *info = (MYSQLND_INFILE_INFO *)ptr;
 
@@ -108,7 +108,7 @@ int mysqlnd_local_infile_error(void *ptr, char *error_buf, unsigned int error_bu
 
 /* {{{ mysqlnd_local_infile_end */
 static
-void mysqlnd_local_infile_end(void *ptr TSRMLS_DC)
+void mysqlnd_local_infile_end(void * ptr TSRMLS_DC)
 {
        MYSQLND_INFILE_INFO     *info = (MYSQLND_INFILE_INFO *)ptr;
 
@@ -125,7 +125,8 @@ void mysqlnd_local_infile_end(void *ptr TSRMLS_DC)
 
 
 /* {{{ mysqlnd_local_infile_default */
-PHPAPI void mysqlnd_local_infile_default(MYSQLND *conn)
+PHPAPI void
+mysqlnd_local_infile_default(MYSQLND_CONN_DATA * conn)
 {
        conn->infile.local_infile_init = mysqlnd_local_infile_init;
        conn->infile.local_infile_read = mysqlnd_local_infile_read;
@@ -134,8 +135,10 @@ PHPAPI void mysqlnd_local_infile_default(MYSQLND *conn)
 }
 /* }}} */
 
+
 /* {{{ mysqlnd_set_local_infile_handler */
-PHPAPI void mysqlnd_set_local_infile_handler(MYSQLND * const conn, const char * const funcname)
+PHPAPI void
+mysqlnd_set_local_infile_handler(MYSQLND_CONN_DATA * const conn, const char * const funcname)
 {
        if (!conn->infile.callback) {
                MAKE_STD_ZVAL(conn->infile.callback);
@@ -152,7 +155,7 @@ static const char *lost_conn = "Lost connection to MySQL server during LOAD DATA
 
 /* {{{ mysqlnd_handle_local_infile */
 enum_func_status
-mysqlnd_handle_local_infile(MYSQLND *conn, const char *filename, zend_bool *is_warning TSRMLS_DC)
+mysqlnd_handle_local_infile(MYSQLND_CONN_DATA * conn, const char * filename, zend_bool * is_warning TSRMLS_DC)
 {
        zend_uchar                      *buf = NULL;
        zend_uchar                      empty_packet[MYSQLND_HEADER_SIZE];
index 4b70941a8da6a8db2c6e34b2433f46cd2e7781ff..f313ac5b208c712ad2a3feb324f3f7fe44bcce2f 100644 (file)
@@ -206,7 +206,7 @@ extern MYSQLND_CLASS_METHOD_TABLE_NAME_FORWARD(mysqlnd_res);
 extern MYSQLND_CLASS_METHOD_TABLE_NAME_FORWARD(mysqlnd_protocol);
 extern MYSQLND_CLASS_METHOD_TABLE_NAME_FORWARD(mysqlnd_net);
 
-enum_func_status mysqlnd_handle_local_infile(MYSQLND *conn, const char *filename, zend_bool *is_warning TSRMLS_DC);
+enum_func_status mysqlnd_handle_local_infile(MYSQLND_CONN_DATA * conn, const char *filename, zend_bool *is_warning TSRMLS_DC);
 
 
 
@@ -228,7 +228,7 @@ struct st_mysqlnd_packet_greet;
 struct st_mysqlnd_authentication_plugin;
 
 enum_func_status
-mysqlnd_auth_handshake(MYSQLND * conn,
+mysqlnd_auth_handshake(MYSQLND_CONN_DATA * conn,
                                                const char * const user,
                                                const char * const passwd,
                                                const size_t passwd_len,
@@ -248,7 +248,7 @@ mysqlnd_auth_handshake(MYSQLND * conn,
                                                TSRMLS_DC);
 
 enum_func_status
-mysqlnd_auth_change_user(MYSQLND * const conn,
+mysqlnd_auth_change_user(MYSQLND_CONN_DATA * const conn,
                                                                const char * const user,
                                                                const size_t user_len,
                                                                const char * const passwd,
index 0b7de4e4fe7c2698a7b20586e9e81a404eb77968..f3ee925e6009d3c55fb5405bd8d9074529f218ef 100644 (file)
@@ -57,7 +57,7 @@ MYSQLND_METHOD(mysqlnd_stmt, store_result)(MYSQLND_STMT * const s TSRMLS_DC)
 {
        MYSQLND_STMT_DATA * stmt = s? s->data:NULL;
        enum_func_status ret;
-       MYSQLND * conn;
+       MYSQLND_CONN_DATA * conn;
        MYSQLND_RES * result;
 
        DBG_ENTER("mysqlnd_stmt::store_result");
@@ -90,7 +90,7 @@ MYSQLND_METHOD(mysqlnd_stmt, store_result)(MYSQLND_STMT * const s TSRMLS_DC)
        stmt->default_rset_handler = s->m->store_result;
 
        SET_EMPTY_ERROR(*stmt->error_info);
-       SET_EMPTY_ERROR(*stmt->conn->error_info);
+       SET_EMPTY_ERROR(*conn->error_info);
        MYSQLND_INC_CONN_STATISTIC(conn->stats, STAT_PS_BUFFERED_SETS);
 
        result = stmt->result;
@@ -126,7 +126,7 @@ static MYSQLND_RES *
 MYSQLND_METHOD(mysqlnd_stmt, get_result)(MYSQLND_STMT * const s TSRMLS_DC)
 {
        MYSQLND_STMT_DATA * stmt = s? s->data:NULL;
-       MYSQLND * conn;
+       MYSQLND_CONN_DATA * conn;
        MYSQLND_RES *result;
 
        DBG_ENTER("mysqlnd_stmt::get_result");
@@ -155,19 +155,19 @@ MYSQLND_METHOD(mysqlnd_stmt, get_result)(MYSQLND_STMT * const s TSRMLS_DC)
        }
 
        SET_EMPTY_ERROR(*stmt->error_info);
-       SET_EMPTY_ERROR(*stmt->conn->error_info);
+       SET_EMPTY_ERROR(*conn->error_info);
        MYSQLND_INC_CONN_STATISTIC(conn->stats, STAT_BUFFERED_SETS);
 
        do {
                result = conn->m->result_init(stmt->result->field_count, stmt->persistent TSRMLS_CC);
                if (!result) {
-                       SET_OOM_ERROR(*stmt->conn->error_info);
+                       SET_OOM_ERROR(*conn->error_info);
                        break;
                }
 
                result->meta = stmt->result->meta->m->clone_metadata(stmt->result->meta, FALSE TSRMLS_CC);
                if (!result->meta) {
-                       SET_OOM_ERROR(*stmt->conn->error_info);
+                       SET_OOM_ERROR(*conn->error_info);
                        break;
                }
 
@@ -198,8 +198,7 @@ MYSQLND_METHOD(mysqlnd_stmt, more_results)(const MYSQLND_STMT * s TSRMLS_DC)
        MYSQLND_STMT_DATA * stmt = s? s->data:NULL;
        DBG_ENTER("mysqlnd_stmt::more_results");
        /* (conn->state == CONN_NEXT_RESULT_PENDING) too */
-       DBG_RETURN((stmt && stmt->conn && (stmt->conn->upsert_status->server_status &
-                                                          SERVER_MORE_RESULTS_EXISTS))?
+       DBG_RETURN((stmt && stmt->conn && (stmt->conn->m->get_server_status(stmt->conn TSRMLS_CC) & SERVER_MORE_RESULTS_EXISTS))?
                                                                        TRUE:
                                                                        FALSE);
 }
@@ -211,7 +210,7 @@ static enum_func_status
 MYSQLND_METHOD(mysqlnd_stmt, next_result)(MYSQLND_STMT * s TSRMLS_DC)
 {
        MYSQLND_STMT_DATA * stmt = s? s->data:NULL;
-       MYSQLND * conn;
+       MYSQLND_CONN_DATA * conn;
 
        DBG_ENTER("mysqlnd_stmt::next_result");
        if (!stmt || !stmt->conn || !stmt->result) {
@@ -474,7 +473,7 @@ mysqlnd_stmt_execute_parse_response(MYSQLND_STMT * const s TSRMLS_DC)
 {
        MYSQLND_STMT_DATA * stmt = s? s->data:NULL;
        enum_func_status ret;
-       MYSQLND * conn;
+       MYSQLND_CONN_DATA * conn;
 
        DBG_ENTER("mysqlnd_stmt_execute_parse_response");
        if (!stmt || !stmt->conn) {
@@ -582,7 +581,7 @@ MYSQLND_METHOD(mysqlnd_stmt, execute)(MYSQLND_STMT * const s TSRMLS_DC)
 {
        MYSQLND_STMT_DATA * stmt = s? s->data:NULL;
        enum_func_status ret;
-       MYSQLND *       conn;
+       MYSQLND_CONN_DATA * conn;
        zend_uchar *request = NULL;
        size_t          request_len;
        zend_bool       free_request;
@@ -936,8 +935,8 @@ static MYSQLND_RES *
 MYSQLND_METHOD(mysqlnd_stmt, use_result)(MYSQLND_STMT * s TSRMLS_DC)
 {
        MYSQLND_STMT_DATA * stmt = s? s->data:NULL;
-       MYSQLND_RES *result;
-       MYSQLND * conn;
+       MYSQLND_RES * result;
+       MYSQLND_CONN_DATA * conn;
 
        DBG_ENTER("mysqlnd_stmt::use_result");
        if (!stmt || !stmt->conn || !stmt->result) {
@@ -1194,7 +1193,7 @@ MYSQLND_METHOD(mysqlnd_stmt, reset)(MYSQLND_STMT * const s TSRMLS_DC)
        SET_EMPTY_ERROR(*stmt->conn->error_info);
 
        if (stmt->stmt_id) {
-               MYSQLND * conn = stmt->conn;
+               MYSQLND_CONN_DATA * conn = stmt->conn;
                if (stmt->param_bind) {
                        unsigned int i;
                        DBG_INF("resetting long data");
@@ -1278,8 +1277,8 @@ MYSQLND_METHOD(mysqlnd_stmt, send_long_data)(MYSQLND_STMT * const s, unsigned in
 {
        MYSQLND_STMT_DATA * stmt = s? s->data:NULL;
        enum_func_status ret = FAIL;
-       MYSQLND * conn;
-       zend_uchar *cmd_buf;
+       MYSQLND_CONN_DATA * conn;
+       zend_uchar * cmd_buf;
        enum php_mysqlnd_server_command cmd = COM_STMT_SEND_LONG_DATA;
 
        DBG_ENTER("mysqlnd_stmt::send_long_data");
@@ -2134,7 +2133,7 @@ static enum_func_status
 MYSQLND_METHOD_PRIVATE(mysqlnd_stmt, net_close)(MYSQLND_STMT * const s, zend_bool implicit TSRMLS_DC)
 {
        MYSQLND_STMT_DATA * stmt = s? s->data:NULL;
-       MYSQLND * conn;
+       MYSQLND_CONN_DATA * conn;
        zend_uchar cmd_buf[STMT_ID_LENGTH /* statement id */];
        enum_mysqlnd_collected_stats statistic = STAT_LAST;
 
@@ -2348,7 +2347,7 @@ MYSQLND_CLASS_METHODS_END;
 
 /* {{{ _mysqlnd_stmt_init */
 MYSQLND_STMT *
-_mysqlnd_stmt_init(MYSQLND * const conn TSRMLS_DC)
+_mysqlnd_stmt_init(MYSQLND_CONN_DATA * const conn TSRMLS_DC)
 {
        MYSQLND_STMT * ret;
        DBG_ENTER("_mysqlnd_stmt_init");
index e2dc9500c2fece48e732195e5788ee27a8b23266..5298b0bf2f8058d16e1aabe7bd81d6e265c3cd60 100644 (file)
@@ -315,7 +315,7 @@ void mysqlnd_internal_free_result(MYSQLND_RES * result TSRMLS_DC)
 
 /* {{{ mysqlnd_res::read_result_metadata */
 static enum_func_status
-MYSQLND_METHOD(mysqlnd_res, read_result_metadata)(MYSQLND_RES * result, MYSQLND *conn TSRMLS_DC)
+MYSQLND_METHOD(mysqlnd_res, read_result_metadata)(MYSQLND_RES * result, MYSQLND_CONN_DATA * conn TSRMLS_DC)
 {
        DBG_ENTER("mysqlnd_res::read_result_metadata");
 
@@ -360,7 +360,7 @@ MYSQLND_METHOD(mysqlnd_res, read_result_metadata)(MYSQLND_RES * result, MYSQLND
 
 /* {{{ mysqlnd_query_read_result_set_header */
 enum_func_status
-mysqlnd_query_read_result_set_header(MYSQLND *conn, MYSQLND_STMT * s TSRMLS_DC)
+mysqlnd_query_read_result_set_header(MYSQLND_CONN_DATA * conn, MYSQLND_STMT * s TSRMLS_DC)
 {
        MYSQLND_STMT_DATA * stmt = s ? s->data:NULL;
        enum_func_status ret;
@@ -1102,7 +1102,7 @@ mysqlnd_fetch_row_buffered(MYSQLND_RES * result, void *param, unsigned int flags
 
 /* {{{ mysqlnd_res::store_result_fetch_data */
 enum_func_status
-MYSQLND_METHOD(mysqlnd_res, store_result_fetch_data)(MYSQLND * const conn, MYSQLND_RES * result,
+MYSQLND_METHOD(mysqlnd_res, store_result_fetch_data)(MYSQLND_CONN_DATA * const conn, MYSQLND_RES * result,
                                                                                                        MYSQLND_RES_METADATA *meta,
                                                                                                        zend_bool binary_protocol TSRMLS_DC)
 {
@@ -1248,7 +1248,7 @@ end:
 /* {{{ mysqlnd_res::store_result */
 static MYSQLND_RES *
 MYSQLND_METHOD(mysqlnd_res, store_result)(MYSQLND_RES * result,
-                                                                                 MYSQLND * const conn,
+                                                                                 MYSQLND_CONN_DATA * const conn,
                                                                                  zend_bool ps_protocol TSRMLS_DC)
 {
        enum_func_status ret;
index d005b41734aa6832a78fe3e437708c4fd27e3e83..7f313a6056f645978b48961577a2c23bda8864df 100644 (file)
@@ -25,7 +25,7 @@
 
 PHPAPI MYSQLND_RES * mysqlnd_result_init(unsigned int field_count, zend_bool persistent TSRMLS_DC);
 
-enum_func_status mysqlnd_query_read_result_set_header(MYSQLND * conn, MYSQLND_STMT * stmt TSRMLS_DC);
+enum_func_status mysqlnd_query_read_result_set_header(MYSQLND_CONN_DATA * conn, MYSQLND_STMT * stmt TSRMLS_DC);
 
 #endif /* MYSQLND_RESULT_H */
 
index 85e98feab461ad014bc298cdae28e2f41276e8d2..d2a35c179d9a29419261c6202b4f59c6d90590a2 100644 (file)
@@ -138,7 +138,7 @@ mysqlnd_unicode_is_key_numeric(UChar *key, size_t length, long *idx)
 
 /* {{{ mysqlnd_res_meta::read_metadata */
 static enum_func_status
-MYSQLND_METHOD(mysqlnd_res_meta, read_metadata)(MYSQLND_RES_METADATA * const meta, MYSQLND * conn TSRMLS_DC)
+MYSQLND_METHOD(mysqlnd_res_meta, read_metadata)(MYSQLND_RES_METADATA * const meta, MYSQLND_CONN_DATA * conn TSRMLS_DC)
 {
        unsigned int i = 0;
        MYSQLND_PACKET_RES_FIELD * field_packet;
index db8990adef37d206e8b2f9727472f7bf5d43d001..cc0e46d5f4ee29ea8367658b5d059aa0c3cb37c0 100644 (file)
@@ -211,6 +211,7 @@ typedef struct st_mysqlnd_net_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_protocol     MYSQLND_PROTOCOL;
 typedef struct st_mysqlnd_res  MYSQLND_RES;
@@ -374,7 +375,7 @@ struct st_mysqlnd_protocol_methods
 
 
 typedef MYSQLND * (*func_mysqlnd_object_factory__get_connection)(zend_bool persistent TSRMLS_DC);
-typedef MYSQLND_STMT * (*func_mysqlnd_object_factory__get_prepared_statement)(MYSQLND * conn TSRMLS_DC);
+typedef MYSQLND_STMT * (*func_mysqlnd_object_factory__get_prepared_statement)(MYSQLND_CONN_DATA * conn TSRMLS_DC);
 typedef MYSQLND_NET * (*func_mysqlnd_object_factory__get_io_channel)(zend_bool persistent, MYSQLND_STATS * stats, MYSQLND_ERROR_INFO * error_info TSRMLS_DC);
 typedef MYSQLND_PROTOCOL * (*func_mysqlnd_object_factory__get_protocol_decoder)(zend_bool persistent TSRMLS_DC);
 
@@ -388,83 +389,84 @@ struct st_mysqlnd_object_factory_methods
 };
 
 
-typedef enum_func_status       (*func_mysqlnd_conn__init)(MYSQLND * conn TSRMLS_DC);
-typedef enum_func_status       (*func_mysqlnd_conn__connect)(MYSQLND *conn, const char *host, const char * user, const char * passwd, unsigned int passwd_len, const char * db, unsigned int db_len, unsigned int port, const char * socket_or_pipe, unsigned int mysql_flags TSRMLS_DC);
+typedef enum_func_status       (*func_mysqlnd_conn__init)(MYSQLND_CONN_DATA * conn TSRMLS_DC);
+typedef enum_func_status       (*func_mysqlnd_conn__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);
 typedef ulong                          (*func_mysqlnd_conn__escape_string)(MYSQLND * const conn, char *newstr, const char *escapestr, size_t escapestr_len TSRMLS_DC);
-typedef enum_func_status       (*func_mysqlnd_conn__set_charset)(MYSQLND * const conn, const char * const charset TSRMLS_DC);
-typedef enum_func_status       (*func_mysqlnd_conn__query)(MYSQLND *conn, const char *query, unsigned int query_len TSRMLS_DC);
-typedef enum_func_status       (*func_mysqlnd_conn__send_query)(MYSQLND *conn, const char *query, unsigned int query_len TSRMLS_DC);
-typedef enum_func_status       (*func_mysqlnd_conn__reap_query)(MYSQLND *conn TSRMLS_DC);
-typedef MYSQLND_RES *          (*func_mysqlnd_conn__use_result)(MYSQLND * const conn TSRMLS_DC);
-typedef MYSQLND_RES *          (*func_mysqlnd_conn__store_result)(MYSQLND * const conn TSRMLS_DC);
-typedef enum_func_status       (*func_mysqlnd_conn__next_result)(MYSQLND * const conn TSRMLS_DC);
-typedef zend_bool                      (*func_mysqlnd_conn__more_results)(const MYSQLND * const conn TSRMLS_DC);
-
-typedef MYSQLND_STMT *         (*func_mysqlnd_conn__stmt_init)(MYSQLND * const conn TSRMLS_DC);
-
-typedef enum_func_status       (*func_mysqlnd_conn__shutdown_server)(MYSQLND * const conn, uint8_t level TSRMLS_DC);
-typedef enum_func_status       (*func_mysqlnd_conn__refresh_server)(MYSQLND * const conn, uint8_t options TSRMLS_DC);
-
-typedef enum_func_status       (*func_mysqlnd_conn__ping)(MYSQLND * const conn TSRMLS_DC);
-typedef enum_func_status       (*func_mysqlnd_conn__kill_connection)(MYSQLND *conn, unsigned int pid TSRMLS_DC);
-typedef enum_func_status       (*func_mysqlnd_conn__select_db)(MYSQLND * const conn, const char * const db, unsigned int db_len TSRMLS_DC);
-typedef enum_func_status       (*func_mysqlnd_conn__server_dump_debug_information)(MYSQLND * const conn TSRMLS_DC);
-typedef enum_func_status       (*func_mysqlnd_conn__change_user)(MYSQLND * const conn, const char * user, const char * passwd, const char * db, zend_bool silent, size_t passwd_len TSRMLS_DC);
-
-typedef unsigned int           (*func_mysqlnd_conn__get_error_no)(const MYSQLND * const conn TSRMLS_DC);
-typedef const char *           (*func_mysqlnd_conn__get_error_str)(const MYSQLND * const conn TSRMLS_DC);
-typedef const char *           (*func_mysqlnd_conn__get_sqlstate)(const MYSQLND * const conn TSRMLS_DC);
-typedef uint64_t                       (*func_mysqlnd_conn__get_thread_id)(const MYSQLND * const conn TSRMLS_DC);
-typedef void                           (*func_mysqlnd_conn__get_statistics)(const MYSQLND * const conn, zval *return_value TSRMLS_DC ZEND_FILE_LINE_DC);
-
-typedef unsigned long          (*func_mysqlnd_conn__get_server_version)(const MYSQLND * const conn TSRMLS_DC);
-typedef const char *           (*func_mysqlnd_conn__get_server_information)(const MYSQLND * const conn TSRMLS_DC);
-typedef enum_func_status       (*func_mysqlnd_conn__get_server_statistics)(MYSQLND *conn, char **message, unsigned int * message_len TSRMLS_DC);
-typedef const char *           (*func_mysqlnd_conn__get_host_information)(const MYSQLND * const conn TSRMLS_DC);
-typedef unsigned int           (*func_mysqlnd_conn__get_protocol_information)(const MYSQLND * const conn TSRMLS_DC);
-typedef const char *           (*func_mysqlnd_conn__get_last_message)(const MYSQLND * const conn TSRMLS_DC);
-typedef const char *           (*func_mysqlnd_conn__charset_name)(const MYSQLND * const conn TSRMLS_DC);
-typedef MYSQLND_RES *          (*func_mysqlnd_conn__list_fields)(MYSQLND *conn, const char *table, const char *achtung_wild TSRMLS_DC);
-typedef MYSQLND_RES *          (*func_mysqlnd_conn__list_method)(MYSQLND *conn, const char *query, const char *achtung_wild, char *par1 TSRMLS_DC);
-
-typedef uint64_t                       (*func_mysqlnd_conn__get_last_insert_id)(const MYSQLND * const conn TSRMLS_DC);
-typedef uint64_t                       (*func_mysqlnd_conn__get_affected_rows)(const MYSQLND * const conn TSRMLS_DC);
-typedef unsigned int           (*func_mysqlnd_conn__get_warning_count)(const MYSQLND * const conn TSRMLS_DC);
-
-typedef unsigned int           (*func_mysqlnd_conn__get_field_count)(const MYSQLND * const conn TSRMLS_DC);
-
-typedef unsigned int           (*func_mysqlnd_conn__get_server_status)(const MYSQLND * const conn TSRMLS_DC);
-typedef enum_func_status       (*func_mysqlnd_conn__set_server_option)(MYSQLND * const conn, enum_mysqlnd_server_option option TSRMLS_DC);
-typedef enum_func_status       (*func_mysqlnd_conn__set_client_option)(MYSQLND * const conn, enum_mysqlnd_option option, const char * const value TSRMLS_DC);
-typedef void                           (*func_mysqlnd_conn__free_contents)(MYSQLND *conn TSRMLS_DC);   /* private */
-typedef void                           (*func_mysqlnd_conn__free_options)(MYSQLND * conn TSRMLS_DC);   /* private */
-typedef enum_func_status       (*func_mysqlnd_conn__close)(MYSQLND *conn, enum_connection_close_type close_type TSRMLS_DC);
-typedef void                           (*func_mysqlnd_conn__dtor)(MYSQLND *conn TSRMLS_DC);    /* private */
-
-typedef enum_func_status       (*func_mysqlnd_conn__query_read_result_set_header)(MYSQLND *conn, MYSQLND_STMT *stmt TSRMLS_DC);
-
-typedef MYSQLND *                      (*func_mysqlnd_conn__get_reference)(MYSQLND * const conn TSRMLS_DC);
-typedef enum_func_status       (*func_mysqlnd_conn__free_reference)(MYSQLND * const conn TSRMLS_DC);
-typedef enum mysqlnd_connection_state (*func_mysqlnd_conn__get_state)(MYSQLND * const conn TSRMLS_DC);
-typedef void                           (*func_mysqlnd_conn__set_state)(MYSQLND * const conn, enum mysqlnd_connection_state new_state TSRMLS_DC);
-
-typedef enum_func_status       (*func_mysqlnd_conn__simple_command)(MYSQLND *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);
-typedef enum_func_status       (*func_mysqlnd_conn__simple_command_handle_response)(MYSQLND *conn, enum mysqlnd_packet_type ok_packet, zend_bool silent, enum php_mysqlnd_server_command command, zend_bool ignore_upsert_status TSRMLS_DC);
-
-typedef enum_func_status       (*func_mysqlnd_conn__restart_psession)(MYSQLND *conn TSRMLS_DC);
-typedef enum_func_status       (*func_mysqlnd_conn__end_psession)(MYSQLND *conn TSRMLS_DC);
-typedef enum_func_status       (*func_mysqlnd_conn__send_close)(MYSQLND * conn TSRMLS_DC);
-
-typedef enum_func_status    (*func_mysqlnd_conn__ssl_set)(MYSQLND * const conn, const char * key, const char * const cert, const char * const ca, const char * const capath, const char * const cipher TSRMLS_DC);
+typedef enum_func_status       (*func_mysqlnd_conn__set_charset)(MYSQLND_CONN_DATA * const conn, const char * const charset TSRMLS_DC);
+typedef enum_func_status       (*func_mysqlnd_conn__query)(MYSQLND_CONN_DATA * conn, const char * query, unsigned int query_len TSRMLS_DC);
+typedef enum_func_status       (*func_mysqlnd_conn__send_query)(MYSQLND_CONN_DATA * conn, const char *query, unsigned int query_len TSRMLS_DC);
+typedef enum_func_status       (*func_mysqlnd_conn__reap_query)(MYSQLND_CONN_DATA * conn TSRMLS_DC);
+typedef MYSQLND_RES *          (*func_mysqlnd_conn__use_result)(MYSQLND_CONN_DATA * const conn TSRMLS_DC);
+typedef MYSQLND_RES *          (*func_mysqlnd_conn__store_result)(MYSQLND_CONN_DATA * const conn TSRMLS_DC);
+typedef enum_func_status       (*func_mysqlnd_conn__next_result)(MYSQLND_CONN_DATA * const conn TSRMLS_DC);
+typedef zend_bool                      (*func_mysqlnd_conn__more_results)(const MYSQLND_CONN_DATA * const conn TSRMLS_DC);
+
+typedef MYSQLND_STMT *         (*func_mysqlnd_conn__stmt_init)(MYSQLND_CONN_DATA * const conn TSRMLS_DC);
+
+typedef enum_func_status       (*func_mysqlnd_conn__shutdown_server)(MYSQLND_CONN_DATA * const conn, uint8_t level TSRMLS_DC);
+typedef enum_func_status       (*func_mysqlnd_conn__refresh_server)(MYSQLND_CONN_DATA * const conn, uint8_t options TSRMLS_DC);
+
+typedef enum_func_status       (*func_mysqlnd_conn__ping)(MYSQLND_CONN_DATA * const conn TSRMLS_DC);
+typedef enum_func_status       (*func_mysqlnd_conn__kill_connection)(MYSQLND_CONN_DATA * conn, unsigned int pid TSRMLS_DC);
+typedef enum_func_status       (*func_mysqlnd_conn__select_db)(MYSQLND_CONN_DATA * const conn, const char * const db, unsigned int db_len TSRMLS_DC);
+typedef enum_func_status       (*func_mysqlnd_conn__server_dump_debug_information)(MYSQLND_CONN_DATA * const conn TSRMLS_DC);
+typedef enum_func_status       (*func_mysqlnd_conn__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);
+
+typedef unsigned int           (*func_mysqlnd_conn__get_error_no)(const MYSQLND_CONN_DATA * const conn TSRMLS_DC);
+typedef const char *           (*func_mysqlnd_conn__get_error_str)(const MYSQLND_CONN_DATA * const conn TSRMLS_DC);
+typedef const char *           (*func_mysqlnd_conn__get_sqlstate)(const MYSQLND_CONN_DATA * const conn TSRMLS_DC);
+typedef uint64_t                       (*func_mysqlnd_conn__get_thread_id)(const MYSQLND_CONN_DATA * const conn TSRMLS_DC);
+typedef void                           (*func_mysqlnd_conn__get_statistics)(const MYSQLND_CONN_DATA * const conn, zval *return_value TSRMLS_DC ZEND_FILE_LINE_DC);
+
+typedef unsigned long          (*func_mysqlnd_conn__get_server_version)(const MYSQLND_CONN_DATA * const conn TSRMLS_DC);
+typedef const char *           (*func_mysqlnd_conn__get_server_information)(const MYSQLND_CONN_DATA * const conn TSRMLS_DC);
+typedef enum_func_status       (*func_mysqlnd_conn__get_server_statistics)(MYSQLND_CONN_DATA * conn, char **message, unsigned int * message_len TSRMLS_DC);
+typedef const char *           (*func_mysqlnd_conn__get_host_information)(const MYSQLND_CONN_DATA * const conn TSRMLS_DC);
+typedef unsigned int           (*func_mysqlnd_conn__get_protocol_information)(const MYSQLND_CONN_DATA * const conn TSRMLS_DC);
+typedef const char *           (*func_mysqlnd_conn__get_last_message)(const MYSQLND_CONN_DATA * const conn TSRMLS_DC);
+typedef const char *           (*func_mysqlnd_conn__charset_name)(const MYSQLND_CONN_DATA * const conn TSRMLS_DC);
+typedef MYSQLND_RES *          (*func_mysqlnd_conn__list_fields)(MYSQLND_CONN_DATA * conn, const char * table, const char * achtung_wild TSRMLS_DC);
+typedef MYSQLND_RES *          (*func_mysqlnd_conn__list_method)(MYSQLND_CONN_DATA * conn, const char * query, const char * achtung_wild, char *par1 TSRMLS_DC);
+
+typedef uint64_t                       (*func_mysqlnd_conn__get_last_insert_id)(const MYSQLND_CONN_DATA * const conn TSRMLS_DC);
+typedef uint64_t                       (*func_mysqlnd_conn__get_affected_rows)(const MYSQLND_CONN_DATA * const conn TSRMLS_DC);
+typedef unsigned int           (*func_mysqlnd_conn__get_warning_count)(const MYSQLND_CONN_DATA * const conn TSRMLS_DC);
+
+typedef unsigned int           (*func_mysqlnd_conn__get_field_count)(const MYSQLND_CONN_DATA * const conn TSRMLS_DC);
+
+typedef unsigned int           (*func_mysqlnd_conn__get_server_status)(const MYSQLND_CONN_DATA * const conn TSRMLS_DC);
+typedef enum_func_status       (*func_mysqlnd_conn__set_server_option)(MYSQLND_CONN_DATA * const conn, enum_mysqlnd_server_option option TSRMLS_DC);
+typedef enum_func_status       (*func_mysqlnd_conn__set_client_option)(MYSQLND_CONN_DATA * const conn, enum_mysqlnd_option option, const char * const value TSRMLS_DC);
+typedef void                           (*func_mysqlnd_conn__free_contents)(MYSQLND_CONN_DATA * conn TSRMLS_DC);/* private */
+typedef void                           (*func_mysqlnd_conn__free_options)(MYSQLND_CONN_DATA * conn TSRMLS_DC); /* private */
+typedef enum_func_status       (*func_mysqlnd_conn__close)(MYSQLND * conn, enum_connection_close_type close_type TSRMLS_DC);
+typedef void                           (*func_mysqlnd_conn__dtor)(MYSQLND_CONN_DATA * conn TSRMLS_DC); /* private */
+typedef void                           (*func_mysqlnd_conn__outter_dtor)(MYSQLND * conn TSRMLS_DC);    /* private */
+
+typedef enum_func_status       (*func_mysqlnd_conn__query_read_result_set_header)(MYSQLND_CONN_DATA * conn, MYSQLND_STMT * stmt TSRMLS_DC);
+
+typedef MYSQLND_CONN_DATA *    (*func_mysqlnd_conn__get_reference)(MYSQLND_CONN_DATA * const conn TSRMLS_DC);
+typedef enum_func_status       (*func_mysqlnd_conn__free_reference)(MYSQLND_CONN_DATA * const conn TSRMLS_DC);
+typedef enum mysqlnd_connection_state (*func_mysqlnd_conn__get_state)(MYSQLND_CONN_DATA * const conn TSRMLS_DC);
+typedef void                           (*func_mysqlnd_conn__set_state)(MYSQLND_CONN_DATA * const conn, enum mysqlnd_connection_state new_state TSRMLS_DC);
+
+typedef enum_func_status       (*func_mysqlnd_conn__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);
+typedef enum_func_status       (*func_mysqlnd_conn__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);
+
+typedef enum_func_status       (*func_mysqlnd_conn__restart_psession)(MYSQLND_CONN_DATA * conn TSRMLS_DC);
+typedef enum_func_status       (*func_mysqlnd_conn__end_psession)(MYSQLND_CONN_DATA * conn TSRMLS_DC);
+typedef enum_func_status       (*func_mysqlnd_conn__send_close)(MYSQLND_CONN_DATA * conn TSRMLS_DC);
+
+typedef enum_func_status    (*func_mysqlnd_conn__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);
 
 typedef MYSQLND_RES *          (*func_mysqlnd_conn__result_init)(unsigned int field_count, zend_bool persistent TSRMLS_DC);
 
-typedef enum_func_status       (*func_mysqlnd_conn__set_autocommit)(MYSQLND * conn, unsigned int mode TSRMLS_DC);
-typedef enum_func_status       (*func_mysqlnd_conn__tx_commit)(MYSQLND * conn TSRMLS_DC);
-typedef enum_func_status       (*func_mysqlnd_conn__tx_rollback)(MYSQLND * conn TSRMLS_DC);
+typedef enum_func_status       (*func_mysqlnd_conn__set_autocommit)(MYSQLND_CONN_DATA * conn, unsigned int mode TSRMLS_DC);
+typedef enum_func_status       (*func_mysqlnd_conn__tx_commit)(MYSQLND_CONN_DATA * conn TSRMLS_DC);
+typedef enum_func_status       (*func_mysqlnd_conn__tx_rollback)(MYSQLND_CONN_DATA * conn TSRMLS_DC);
 
-typedef enum_func_status       (*func_mysqlnd_conn__local_tx_start)(MYSQLND * conn, size_t this_func TSRMLS_DC);
-typedef enum_func_status       (*func_mysqlnd_conn__local_tx_end)(MYSQLND * conn, size_t this_func, enum_func_status status TSRMLS_DC);
+typedef enum_func_status       (*func_mysqlnd_conn__local_tx_start)(MYSQLND_CONN_DATA * conn, size_t this_func TSRMLS_DC);
+typedef enum_func_status       (*func_mysqlnd_conn__local_tx_end)(MYSQLND_CONN_DATA * conn, size_t this_func, enum_func_status status TSRMLS_DC);
 
 
 struct st_mysqlnd_conn_methods
@@ -522,6 +524,7 @@ struct st_mysqlnd_conn_methods
        func_mysqlnd_conn__free_options free_options;
        func_mysqlnd_conn__close close;
        func_mysqlnd_conn__dtor dtor;
+       func_mysqlnd_conn__outter_dtor outter_dtor;
 
        func_mysqlnd_conn__query_read_result_set_header query_read_result_set_header;
 
@@ -556,7 +559,7 @@ typedef mysqlnd_fetch_row_func      fetch_row_normal_buffered; /* private */
 typedef mysqlnd_fetch_row_func fetch_row_normal_unbuffered; /* private */
 
 typedef MYSQLND_RES *          (*func_mysqlnd_res__use_result)(MYSQLND_RES * const result, zend_bool ps_protocol TSRMLS_DC);
-typedef MYSQLND_RES *          (*func_mysqlnd_res__store_result)(MYSQLND_RES * result, MYSQLND * const conn, zend_bool ps TSRMLS_DC);
+typedef MYSQLND_RES *          (*func_mysqlnd_res__store_result)(MYSQLND_RES * result, MYSQLND_CONN_DATA * const conn, zend_bool ps TSRMLS_DC);
 typedef void                           (*func_mysqlnd_res__fetch_into)(MYSQLND_RES *result, unsigned int flags, zval *return_value, enum_mysqlnd_extension ext TSRMLS_DC ZEND_FILE_LINE_DC);
 typedef MYSQLND_ROW_C          (*func_mysqlnd_res__fetch_row_c)(MYSQLND_RES *result TSRMLS_DC);
 typedef void                           (*func_mysqlnd_res__fetch_all)(MYSQLND_RES *result, unsigned int flags, zval *return_value TSRMLS_DC ZEND_FILE_LINE_DC);
@@ -571,9 +574,9 @@ typedef const MYSQLND_FIELD *(*func_mysqlnd_res__fetch_field)(MYSQLND_RES * cons
 typedef const MYSQLND_FIELD *(*func_mysqlnd_res__fetch_field_direct)(MYSQLND_RES * const result, MYSQLND_FIELD_OFFSET fieldnr TSRMLS_DC);
 typedef const MYSQLND_FIELD *(*func_mysqlnd_res__fetch_fields)(MYSQLND_RES * const result TSRMLS_DC);
 
-typedef enum_func_status       (*func_mysqlnd_res__read_result_metadata)(MYSQLND_RES *result, MYSQLND * conn TSRMLS_DC);
+typedef enum_func_status       (*func_mysqlnd_res__read_result_metadata)(MYSQLND_RES * result, MYSQLND_CONN_DATA * conn TSRMLS_DC);
 typedef unsigned long *                (*func_mysqlnd_res__fetch_lengths)(MYSQLND_RES * const result TSRMLS_DC);
-typedef enum_func_status       (*func_mysqlnd_res__store_result_fetch_data)(MYSQLND * const conn, MYSQLND_RES *result, MYSQLND_RES_METADATA *meta, zend_bool binary_protocol TSRMLS_DC);
+typedef enum_func_status       (*func_mysqlnd_res__store_result_fetch_data)(MYSQLND_CONN_DATA * const conn, MYSQLND_RES * result, MYSQLND_RES_METADATA *meta, zend_bool binary_protocol TSRMLS_DC);
 typedef enum_func_status       (*func_mysqlnd_res__initialize_result_set_rest)(MYSQLND_RES * const result TSRMLS_DC);
 
 typedef void                           (*func_mysqlnd_res__free_result_buffers)(MYSQLND_RES * result TSRMLS_DC);       /* private */
@@ -640,7 +643,7 @@ typedef const MYSQLND_FIELD *       (*func_mysqlnd_res_meta__fetch_field)(MYSQLND_RES_
 typedef const MYSQLND_FIELD *  (*func_mysqlnd_res_meta__fetch_field_direct)(const MYSQLND_RES_METADATA * const meta, MYSQLND_FIELD_OFFSET fieldnr TSRMLS_DC);
 typedef const MYSQLND_FIELD *  (*func_mysqlnd_res_meta__fetch_fields)(MYSQLND_RES_METADATA * const meta TSRMLS_DC);
 typedef MYSQLND_FIELD_OFFSET   (*func_mysqlnd_res_meta__field_tell)(const MYSQLND_RES_METADATA * const meta TSRMLS_DC);
-typedef enum_func_status               (*func_mysqlnd_res_meta__read_metadata)(MYSQLND_RES_METADATA * const meta, MYSQLND * conn TSRMLS_DC);
+typedef enum_func_status               (*func_mysqlnd_res_meta__read_metadata)(MYSQLND_RES_METADATA * const meta, MYSQLND_CONN_DATA * conn TSRMLS_DC);
 typedef MYSQLND_RES_METADATA * (*func_mysqlnd_res_meta__clone_metadata)(const MYSQLND_RES_METADATA * const meta, zend_bool persistent TSRMLS_DC);
 typedef void                                   (*func_mysqlnd_res_meta__free_metadata)(MYSQLND_RES_METADATA * meta TSRMLS_DC);
 
@@ -790,7 +793,7 @@ struct st_mysqlnd_protocol
 };
 
 
-struct st_mysqlnd_connection
+struct st_mysqlnd_connection_data
 {
 /* Operation related */
        MYSQLND_NET             * net;
@@ -868,6 +871,13 @@ struct st_mysqlnd_connection
 };
 
 
+struct st_mysqlnd_connection
+{
+       MYSQLND_CONN_DATA * data;
+       zend_bool persistent;
+};
+
+
 struct mysqlnd_field_hash_key
 {
        zend_bool               is_numeric;
@@ -921,7 +931,7 @@ struct st_mysqlnd_unbuffered_result
 
 struct st_mysqlnd_res
 {
-       MYSQLND                                 *conn;
+       MYSQLND_CONN_DATA               *conn;
        enum_mysqlnd_res_type   type;
        unsigned int                    field_count;
 
@@ -963,7 +973,7 @@ struct st_mysqlnd_result_bind
 
 struct st_mysqlnd_stmt_data
 {
-       MYSQLND                                         *conn;
+       MYSQLND_CONN_DATA                       *conn;
        unsigned long                           stmt_id;
        unsigned long                           flags;/* cursor is set here */
        enum_mysqlnd_stmt_state         state;
@@ -1047,7 +1057,7 @@ struct st_mysqlnd_authentication_plugin;
 
 typedef zend_uchar * (*func_auth_plugin__get_auth_data)(struct st_mysqlnd_authentication_plugin * self,
                                                                                                                size_t * auth_data_len,
-                                                                                                               MYSQLND * conn, const char * const user, const char * const passwd,
+                                                                                                               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, unsigned long mysql_flags
                                                                                                                TSRMLS_DC);
index c6935fc4d2ad20ffee2c9836672d7839537491fe..613514ff651a092ec92e3ddba69fdd8727beb6d9 100644 (file)
@@ -301,7 +301,7 @@ mysqlnd_read_header(MYSQLND_NET * net, MYSQLND_PACKET_HEADER * header,
 
 /* {{{ php_mysqlnd_greet_read */
 static enum_func_status
-php_mysqlnd_greet_read(void * _packet, MYSQLND * conn TSRMLS_DC)
+php_mysqlnd_greet_read(void * _packet, MYSQLND_CONN_DATA * conn TSRMLS_DC)
 {
        zend_uchar buf[2048];
        zend_uchar *p = buf;
@@ -463,7 +463,7 @@ void php_mysqlnd_greet_free_mem(void * _packet, zend_bool stack_allocation TSRML
 
 /* {{{ php_mysqlnd_auth_write */
 static
-size_t php_mysqlnd_auth_write(void * _packet, MYSQLND * conn TSRMLS_DC)
+size_t php_mysqlnd_auth_write(void * _packet, MYSQLND_CONN_DATA * conn TSRMLS_DC)
 {
        zend_uchar buffer[AUTH_WRITE_BUFFER_LEN];
        zend_uchar *p = buffer + MYSQLND_HEADER_SIZE; /* start after the header */
@@ -567,7 +567,7 @@ void php_mysqlnd_auth_free_mem(void * _packet, zend_bool stack_allocation TSRMLS
 
 /* {{{ php_mysqlnd_auth_response_read */
 static enum_func_status
-php_mysqlnd_auth_response_read(void * _packet, MYSQLND * conn TSRMLS_DC)
+php_mysqlnd_auth_response_read(void * _packet, MYSQLND_CONN_DATA * conn TSRMLS_DC)
 {
        zend_uchar local_buf[AUTH_RESP_BUFFER_SIZE];
        size_t buf_len = conn->net->cmd_buffer.buffer? conn->net->cmd_buffer.length: AUTH_RESP_BUFFER_SIZE;
@@ -687,7 +687,7 @@ php_mysqlnd_auth_response_free_mem(void * _packet, zend_bool stack_allocation TS
 
 /* {{{ php_mysqlnd_change_auth_response_write */
 static size_t
-php_mysqlnd_change_auth_response_write(void * _packet, MYSQLND * conn TSRMLS_DC)
+php_mysqlnd_change_auth_response_write(void * _packet, MYSQLND_CONN_DATA * conn TSRMLS_DC)
 {
        MYSQLND_PACKET_CHANGE_AUTH_RESPONSE *packet= (MYSQLND_PACKET_CHANGE_AUTH_RESPONSE *) _packet;
        zend_uchar * buffer = conn->net->cmd_buffer.length >= packet->auth_data_len? conn->net->cmd_buffer.buffer : mnd_emalloc(packet->auth_data_len);
@@ -730,7 +730,7 @@ php_mysqlnd_change_auth_response_free_mem(void * _packet, zend_bool stack_alloca
 
 /* {{{ php_mysqlnd_ok_read */
 static enum_func_status
-php_mysqlnd_ok_read(void * _packet, MYSQLND * conn TSRMLS_DC)
+php_mysqlnd_ok_read(void * _packet, MYSQLND_CONN_DATA * conn TSRMLS_DC)
 {
        zend_uchar local_buf[OK_BUFFER_SIZE];
        size_t buf_len = conn->net->cmd_buffer.buffer? conn->net->cmd_buffer.length : OK_BUFFER_SIZE;
@@ -815,7 +815,7 @@ php_mysqlnd_ok_free_mem(void * _packet, zend_bool stack_allocation TSRMLS_DC)
 
 /* {{{ php_mysqlnd_eof_read */
 static enum_func_status
-php_mysqlnd_eof_read(void * _packet, MYSQLND * conn TSRMLS_DC)
+php_mysqlnd_eof_read(void * _packet, MYSQLND_CONN_DATA * conn TSRMLS_DC)
 {
        /*
          EOF packet is since 4.1 five bytes long,
@@ -892,7 +892,7 @@ void php_mysqlnd_eof_free_mem(void * _packet, zend_bool stack_allocation TSRMLS_
 
 
 /* {{{ php_mysqlnd_cmd_write */
-size_t php_mysqlnd_cmd_write(void * _packet, MYSQLND * conn TSRMLS_DC)
+size_t php_mysqlnd_cmd_write(void * _packet, MYSQLND_CONN_DATA * conn TSRMLS_DC)
 {
        /* Let's have some space, which we can use, if not enough, we will allocate new buffer */
        MYSQLND_PACKET_COMMAND * packet= (MYSQLND_PACKET_COMMAND *) _packet;
@@ -970,7 +970,7 @@ void php_mysqlnd_cmd_free_mem(void * _packet, zend_bool stack_allocation TSRMLS_
 
 /* {{{ php_mysqlnd_rset_header_read */
 static enum_func_status
-php_mysqlnd_rset_header_read(void * _packet, MYSQLND * conn TSRMLS_DC)
+php_mysqlnd_rset_header_read(void * _packet, MYSQLND_CONN_DATA * conn TSRMLS_DC)
 {
        enum_func_status ret = PASS;
        size_t buf_len = conn->net->cmd_buffer.length;
@@ -1108,7 +1108,7 @@ static size_t rset_field_offsets[] =
 
 /* {{{ php_mysqlnd_rset_field_read */
 static enum_func_status
-php_mysqlnd_rset_field_read(void * _packet, MYSQLND * conn TSRMLS_DC)
+php_mysqlnd_rset_field_read(void * _packet, MYSQLND_CONN_DATA * conn TSRMLS_DC)
 {
        /* Should be enough for the metadata of a single row */
        MYSQLND_PACKET_RES_FIELD *packet= (MYSQLND_PACKET_RES_FIELD *) _packet;
@@ -1314,7 +1314,7 @@ void php_mysqlnd_rset_field_free_mem(void * _packet, zend_bool stack_allocation
 
 /* {{{ php_mysqlnd_read_row_ex */
 static enum_func_status
-php_mysqlnd_read_row_ex(MYSQLND * conn, MYSQLND_MEMORY_POOL * result_set_memory_pool,
+php_mysqlnd_read_row_ex(MYSQLND_CONN_DATA * conn, MYSQLND_MEMORY_POOL * result_set_memory_pool,
                                                MYSQLND_MEMORY_POOL_CHUNK ** buffer,
                                                size_t * data_size, zend_bool persistent_alloc,
                                                unsigned int prealloc_more_bytes TSRMLS_DC)
@@ -1730,7 +1730,7 @@ php_mysqlnd_rowp_read_text_protocol(MYSQLND_MEMORY_POOL_CHUNK * row_buffer, zval
   if PS => packet->fields is passed from outside
 */
 static enum_func_status
-php_mysqlnd_rowp_read(void * _packet, MYSQLND * conn TSRMLS_DC)
+php_mysqlnd_rowp_read(void * _packet, MYSQLND_CONN_DATA * conn TSRMLS_DC)
 {
        MYSQLND_NET * net = conn->net;
        zend_uchar *p;
@@ -1853,7 +1853,7 @@ php_mysqlnd_rowp_free_mem(void * _packet, zend_bool stack_allocation TSRMLS_DC)
 
 /* {{{ php_mysqlnd_stats_read */
 static enum_func_status
-php_mysqlnd_stats_read(void * _packet, MYSQLND * conn TSRMLS_DC)
+php_mysqlnd_stats_read(void * _packet, MYSQLND_CONN_DATA * conn TSRMLS_DC)
 {
        MYSQLND_PACKET_STATS *packet= (MYSQLND_PACKET_STATS *) _packet;
        size_t buf_len = conn->net->cmd_buffer.length;
@@ -1895,7 +1895,7 @@ void php_mysqlnd_stats_free_mem(void * _packet, zend_bool stack_allocation TSRML
 
 /* {{{ php_mysqlnd_prepare_read */
 static enum_func_status
-php_mysqlnd_prepare_read(void * _packet, MYSQLND * conn TSRMLS_DC)
+php_mysqlnd_prepare_read(void * _packet, MYSQLND_CONN_DATA * conn TSRMLS_DC)
 {
        /* In case of an error, we should have place to put it */
        size_t buf_len = conn->net->cmd_buffer.length;
@@ -1983,7 +1983,7 @@ php_mysqlnd_prepare_free_mem(void * _packet, zend_bool stack_allocation TSRMLS_D
 
 /* {{{ php_mysqlnd_chg_user_read */
 static enum_func_status
-php_mysqlnd_chg_user_read(void * _packet, MYSQLND * conn TSRMLS_DC)
+php_mysqlnd_chg_user_read(void * _packet, MYSQLND_CONN_DATA * conn TSRMLS_DC)
 {
        /* There could be an error message */
        size_t buf_len = conn->net->cmd_buffer.length;
index 4f97711adf6f27ab68005e718b4193fe946ac2e1..e4218211eefc5c6c6ef7fbee9c4f580867855986 100644 (file)
@@ -51,8 +51,8 @@ PHPAPI extern const char * const mysqlnd_command_to_text[COM_END];
 /* Low-level extraction functionality */
 typedef struct st_mysqlnd_packet_methods {
        size_t                          struct_size;
-       enum_func_status        (*read_from_net)(void *packet, MYSQLND *conn TSRMLS_DC);
-       size_t                          (*write_to_net)(void *packet, MYSQLND *conn TSRMLS_DC);
+       enum_func_status        (*read_from_net)(void * packet, MYSQLND_CONN_DATA * conn TSRMLS_DC);
+       size_t                          (*write_to_net)(void * packet, MYSQLND_CONN_DATA * conn TSRMLS_DC);
        void                            (*free_mem)(void *packet, zend_bool stack_allocation TSRMLS_DC);
 } mysqlnd_packet_methods;