diff options
author | Xinchen Hui <laruence@php.net> | 2014-05-11 14:53:18 +0800 |
---|---|---|
committer | Xinchen Hui <laruence@php.net> | 2014-05-11 14:53:18 +0800 |
commit | 2402d6cbbc5e04362b23b183f9129a8db230bcce (patch) | |
tree | ee740b34929b74cc39a095c4a47b8c860b062703 /ext/mysqli/php_mysqli_structs.h | |
parent | e9274de503d3e7c75214913cfe4a0e1b9a8b857b (diff) | |
download | php-git-2402d6cbbc5e04362b23b183f9129a8db230bcce.tar.gz |
Refactor MySQLi (incompleted, only compilable now)
Diffstat (limited to 'ext/mysqli/php_mysqli_structs.h')
-rw-r--r-- | ext/mysqli/php_mysqli_structs.h | 57 |
1 files changed, 29 insertions, 28 deletions
diff --git a/ext/mysqli/php_mysqli_structs.h b/ext/mysqli/php_mysqli_structs.h index 0f3eb64d3b..8fea060f08 100644 --- a/ext/mysqli/php_mysqli_structs.h +++ b/ext/mysqli/php_mysqli_structs.h @@ -107,7 +107,7 @@ typedef struct { typedef struct { unsigned int var_cnt; VAR_BUFFER *buf; - zval **vars; + zval *vars; char *is_null; } BIND_BUFFER; @@ -118,14 +118,14 @@ typedef struct { char *query; #ifndef MYSQLI_USE_MYSQLND /* used to manage refcount with libmysql (already implement in mysqlnd) */ - zend_object_handle link_handle; + zval link_handle; #endif } MY_STMT; typedef struct { MYSQL *mysql; - char *hash_key; - zval *li_read; + zend_string *hash_key; + zval li_read; php_stream *li_stream; unsigned int multi_query; zend_bool persistent; @@ -141,11 +141,17 @@ typedef struct { } MYSQLI_RESOURCE; typedef struct _mysqli_object { - zend_object zo; void *ptr; HashTable *prop_handler; + zend_object zo; } mysqli_object; /* extends zend_object */ +static inline mysqli_object *php_mysqli_fetch_object(zend_object *obj) { + return (mysqli_object *)((char*)(obj) - XtOffsetOf(mysqli_object, zo)); +} + +#define Z_MYSQLI_P(zv) php_mysqli_fetch_object(Z_OBJ_P((zv))) + typedef struct st_mysqli_warning MYSQLI_WARNING; struct st_mysqli_warning { @@ -158,11 +164,10 @@ struct st_mysqli_warning { typedef struct _mysqli_property_entry { const char *pname; size_t pname_length; - int (*r_func)(mysqli_object *obj, zval **retval TSRMLS_DC); + zval *(*r_func)(mysqli_object *obj, zval *retval TSRMLS_DC); int (*w_func)(mysqli_object *obj, zval *value TSRMLS_DC); } mysqli_property_entry; - typedef struct { zend_ptr_stack free_links; } mysqli_plist_entry; @@ -233,35 +238,33 @@ extern PHPAPI zend_class_entry *spl_ce_RuntimeException; } \ #define MYSQLI_REGISTER_RESOURCE_EX(__ptr, __zval) \ - ((mysqli_object *) zend_object_store_get_object(__zval TSRMLS_CC))->ptr = __ptr; + (Z_MYSQLI_P(__zval))->ptr = __ptr; #define MYSQLI_RETURN_RESOURCE(__ptr, __ce) \ - Z_TYPE_P(return_value) = IS_OBJECT; \ - (return_value)->value.obj = mysqli_objects_new(__ce TSRMLS_CC); \ + RETVAL_OBJ(mysqli_objects_new(__ce TSRMLS_CC)); \ MYSQLI_REGISTER_RESOURCE_EX(__ptr, return_value) #define MYSQLI_REGISTER_RESOURCE(__ptr, __ce) \ {\ - zval *object = getThis();\ - if (!object || !instanceof_function(Z_OBJCE_P(object), mysqli_link_class_entry TSRMLS_CC)) {\ - object = return_value;\ - Z_TYPE_P(object) = IS_OBJECT;\ - (object)->value.obj = mysqli_objects_new(__ce TSRMLS_CC);\ - }\ + zval *object = getThis(); \ + if (!object || !instanceof_function(Z_OBJCE_P(object), mysqli_link_class_entry TSRMLS_CC)) { \ + object = return_value; \ + ZVAL_OBJ(object, mysqli_objects_new(__ce TSRMLS_CC)); \ + } \ MYSQLI_REGISTER_RESOURCE_EX(__ptr, object)\ } #define MYSQLI_FETCH_RESOURCE(__ptr, __type, __id, __name, __check) \ { \ MYSQLI_RESOURCE *my_res; \ - mysqli_object *intern = (mysqli_object *)zend_object_store_get_object(*(__id) TSRMLS_CC);\ + mysqli_object *intern = Z_MYSQLI_P(__id); \ if (!(my_res = (MYSQLI_RESOURCE *)intern->ptr)) {\ php_error_docref(NULL TSRMLS_CC, E_WARNING, "Couldn't fetch %s", intern->zo.ce->name);\ RETURN_NULL();\ }\ __ptr = (__type)my_res->ptr; \ if (__check && my_res->status < __check) { \ - php_error_docref(NULL TSRMLS_CC, E_WARNING, "invalid object or resource %s\n", intern->zo.ce->name); \ + php_error_docref(NULL TSRMLS_CC, E_WARNING, "invalid object or resource %s\n", intern->zo.ce->name->val); \ RETURN_NULL();\ }\ } @@ -270,24 +273,23 @@ extern PHPAPI zend_class_entry *spl_ce_RuntimeException; { \ MYSQLI_RESOURCE *my_res; \ if (!(my_res = (MYSQLI_RESOURCE *)(__obj->ptr))) {\ - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Couldn't fetch %s", intern->zo.ce->name);\ + php_error_docref(NULL TSRMLS_CC, E_WARNING, "Couldn't fetch %s", intern->zo.ce->name->val);\ return;\ }\ __ptr = (__type)my_res->ptr; \ if (__check && my_res->status < __check) { \ - php_error_docref(NULL TSRMLS_CC, E_WARNING, "invalid object or resource %s\n", intern->zo.ce->name); \ + php_error_docref(NULL TSRMLS_CC, E_WARNING, "invalid object or resource %s\n", intern->zo.ce->name->val); \ return;\ }\ } - #define MYSQLI_FETCH_RESOURCE_CONN(__ptr, __id, __check) \ { \ MYSQLI_FETCH_RESOURCE((__ptr), MY_MYSQL *, (__id), "mysqli_link", (__check)); \ if (!(__ptr)->mysql) { \ - mysqli_object *intern = (mysqli_object *)zend_object_store_get_object(*(__id) TSRMLS_CC);\ - php_error_docref(NULL TSRMLS_CC, E_WARNING, "invalid object or resource %s\n", intern->zo.ce->name); \ - RETURN_NULL();\ + mysqli_object *intern = Z_MYSQLI_P(__id); \ + php_error_docref(NULL TSRMLS_CC, E_WARNING, "invalid object or resource %s\n", intern->zo.ce->name->val); \ + RETURN_NULL(); \ } \ } @@ -295,22 +297,21 @@ extern PHPAPI zend_class_entry *spl_ce_RuntimeException; { \ MYSQLI_FETCH_RESOURCE((__ptr), MY_STMT *, (__id), "mysqli_stmt", (__check)); \ if (!(__ptr)->stmt) { \ - mysqli_object *intern = (mysqli_object *)zend_object_store_get_object(*(__id) TSRMLS_CC);\ + mysqli_object *intern = Z_MYSQLI_P(__id); \ php_error_docref(NULL TSRMLS_CC, E_WARNING, "invalid object or resource %s\n", intern->zo.ce->name); \ RETURN_NULL();\ } \ } - #define MYSQLI_SET_STATUS(__id, __value) \ { \ - mysqli_object *intern = (mysqli_object *)zend_object_store_get_object(*(__id) TSRMLS_CC);\ + mysqli_object *intern = Z_MYSQLI_P(__id); \ ((MYSQLI_RESOURCE *)intern->ptr)->status = __value; \ } \ #define MYSQLI_CLEAR_RESOURCE(__id) \ { \ - mysqli_object *intern = (mysqli_object *)zend_object_store_get_object(*(__id) TSRMLS_CC);\ + mysqli_object *intern = Z_MYSQLI_P(__id); \ efree(intern->ptr); \ intern->ptr = NULL; \ } |