19#ifndef PHP_MYSQLI_STRUCTS_H
20#define PHP_MYSQLI_STRUCTS_H
33#define MYSQLI_VERSION_ID 101009
88#define Z_MYSQLI_P(zv) php_mysqli_fetch_object(Z_OBJ_P((zv)))
111#define PHP_MYSQLI_API __declspec(dllexport)
117# if defined(__GNUC__) && __GNUC__ >= 4
118# define PHP_MYSQLI_API __attribute__ ((visibility("default")))
120# define PHP_MYSQLI_API
130#define MYSQLI_LLU_SPEC "%" PRIu64
131#define MYSQLI_LL_SPEC "%" PRId64
153#define MYSQLI_DISABLE_MQ if (mysql->multi_query) { \
154 mysql_set_server_option(mysql->mysql, MYSQL_OPTION_MULTI_STATEMENTS_OFF); \
155 mysql->multi_query = 0; \
158#define MYSQLI_ENABLE_MQ if (!mysql->multi_query) { \
159 mysql_set_server_option(mysql->mysql, MYSQL_OPTION_MULTI_STATEMENTS_ON); \
160 mysql->multi_query = 1; \
163#define MYSQLI_REGISTER_RESOURCE_EX(__ptr, __zval) \
164 (Z_MYSQLI_P(__zval))->ptr = __ptr;
166#define MYSQLI_RETVAL_RESOURCE(__ptr, __ce) \
167 RETVAL_OBJ(mysqli_objects_new(__ce)); \
168 MYSQLI_REGISTER_RESOURCE_EX(__ptr, return_value)
170#define MYSQLI_REGISTER_RESOURCE(__ptr, __ce) \
172 zval *object = getThis(); \
173 if (!object || !instanceof_function(Z_OBJCE_P(object), mysqli_link_class_entry)) { \
174 object = return_value; \
175 ZVAL_OBJ(object, mysqli_objects_new(__ce)); \
177 MYSQLI_REGISTER_RESOURCE_EX(__ptr, object)\
180#define MYSQLI_FETCH_RESOURCE(__ptr, __type, __id, __name, __check) \
182 MYSQLI_RESOURCE *my_res; \
183 mysqli_object *intern = Z_MYSQLI_P(__id); \
184 if (!(my_res = (MYSQLI_RESOURCE *)intern->ptr)) {\
185 zend_throw_error(NULL, "%s object is already closed", ZSTR_VAL(intern->zo.ce->name));\
188 __ptr = (__type)my_res->ptr; \
189 if (my_res->status < __check) { \
190 zend_throw_error(NULL, "%s object is not fully initialized", ZSTR_VAL(intern->zo.ce->name)); \
195#define MYSQLI_FETCH_RESOURCE_BY_OBJ(__ptr, __type, __obj, __name, __check) \
197 MYSQLI_RESOURCE *my_res; \
198 if (!(my_res = (MYSQLI_RESOURCE *)(__obj->ptr))) {\
199 zend_throw_error(NULL, "%s object is already closed", ZSTR_VAL(intern->zo.ce->name));\
202 __ptr = (__type)my_res->ptr; \
203 if (my_res->status < __check) { \
204 zend_throw_error(NULL, "%s object is not fully initialized", ZSTR_VAL(intern->zo.ce->name)); \
209#define MYSQLI_FETCH_RESOURCE_CONN(__ptr, __id, __check) \
211 MYSQLI_FETCH_RESOURCE((__ptr), MY_MYSQL *, (__id), "mysqli_link", (__check)); \
212 if (!(__ptr)->mysql) { \
213 zend_throw_error(NULL, "%s object is not fully initialized", ZSTR_VAL(Z_OBJCE_P(__id)->name)); \
218#define MYSQLI_FETCH_RESOURCE_STMT(__ptr, __id, __check) \
220 MYSQLI_FETCH_RESOURCE((__ptr), MY_STMT *, (__id), "mysqli_stmt", (__check)); \
221 ZEND_ASSERT((__ptr)->stmt && "Missing statement?"); \
224#define MYSQLI_SET_STATUS(__id, __value) \
226 mysqli_object *intern = Z_MYSQLI_P(__id); \
227 ((MYSQLI_RESOURCE *)intern->ptr)->status = __value; \
230#define MYSQLI_CLEAR_RESOURCE(__id) \
232 mysqli_object *intern = Z_MYSQLI_P(__id); \
233 efree(intern->ptr); \
234 intern->ptr = NULL; \
258#define MyG(v) ZEND_MODULE_GLOBALS_ACCESSOR(mysqli, v)
260#if defined(ZTS) && defined(COMPILE_DL_MYSQLI)
zend_class_entry * mysqli_result_class_entry
zend_class_entry * mysqli_warning_class_entry
zend_class_entry * mysqli_driver_class_entry
zend_class_entry * mysqli_exception_class_entry
zend_class_entry * mysqli_stmt_class_entry
zend_class_entry * mysqli_link_class_entry
const zend_object_iterator_funcs php_mysqli_result_iterator_funcs
struct st_mysqli_warning MYSQLI_WARNING
zend_object_iterator * php_mysqli_result_get_iterator(zend_class_entry *ce, zval *object, int by_ref)
zend_long num_active_persistent
void php_mysqli_fetch_into_hash_aux(zval *return_value, MYSQL_RES *result, zend_long fetchtype)
zend_long num_inactive_persistent
void php_mysqli_dtor_p_elements(void *data)
struct _mysqli_object mysqli_object
char * local_infile_directory
struct _mysqli_property_entry mysqli_property_entry
void php_mysqli_close(MY_MYSQL *mysql, int close_type, int resource_status)
bool rollback_on_cached_plink
@ MYSQLI_STATUS_INITIALIZED
struct _php_stream php_stream
enum mysqli_status status
int async_result_fetch_type
zend_result(* r_func)(mysqli_object *obj, zval *retval, bool quiet)
zend_result(* w_func)(mysqli_object *obj, zval *value)
zend_ptr_stack free_links
#define ZEND_TSRMLS_CACHE_EXTERN()
#define ZEND_END_MODULE_GLOBALS(module_name)
#define ZEND_EXTERN_MODULE_GLOBALS(module_name)
#define ZEND_BEGIN_MODULE_GLOBALS(module_name)
struct _zend_object_iterator zend_object_iterator
struct _zend_object_iterator_funcs zend_object_iterator_funcs
struct _zend_string zend_string
#define XtOffsetOf(s_type, field)
struct _zend_class_entry zend_class_entry
struct _zend_object zend_object
struct _zend_ptr_stack zend_ptr_stack
struct _zend_array HashTable
ZEND_RESULT_CODE zend_result