summaryrefslogtreecommitdiff
path: root/ext/mysqlnd/mysqlnd_driver.c
diff options
context:
space:
mode:
authorAndrey Hristov <andrey@php.net>2011-10-31 11:46:24 +0000
committerAndrey Hristov <andrey@php.net>2011-10-31 11:46:24 +0000
commit8fb6bdd5b82fbfeb295f9a3d181a29606f7f670d (patch)
tree73a7516959ea1b8d464c7b816d407cff91d1ba16 /ext/mysqlnd/mysqlnd_driver.c
parent63812d1849fed668b773b781c957144221019033 (diff)
downloadphp-git-8fb6bdd5b82fbfeb295f9a3d181a29606f7f670d.tar.gz
Split struct MYSQLND in struct MYSQLND and struct MYSQLD_CONN_DATA.
A step in the direction of keeping internal data private
Diffstat (limited to 'ext/mysqlnd/mysqlnd_driver.c')
-rw-r--r--ext/mysqlnd/mysqlnd_driver.c48
1 files changed, 29 insertions, 19 deletions
diff --git a/ext/mysqlnd/mysqlnd_driver.c b/ext/mysqlnd/mysqlnd_driver.c
index e74a71fab4..1f33df1768 100644
--- a/ext/mysqlnd/mysqlnd_driver.c
+++ b/ext/mysqlnd/mysqlnd_driver.c
@@ -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);