Annotation of embedaddon/php/ext/mysqli/php_mysqli_structs.h, revision 1.1.1.1

1.1       misho       1: /*
                      2:   +----------------------------------------------------------------------+
                      3:   | PHP Version 5                                                        |
                      4:   +----------------------------------------------------------------------+
                      5:   | Copyright (c) 1997-2012 The PHP Group                                |
                      6:   +----------------------------------------------------------------------+
                      7:   | This source file is subject to version 3.01 of the PHP license,      |
                      8:   | that is bundled with this package in the file LICENSE, and is        |
                      9:   | available through the world-wide-web at the following url:           |
                     10:   | http://www.php.net/license/3_01.txt                                  |
                     11:   | If you did not receive a copy of the PHP license and are unable to   |
                     12:   | obtain it through the world-wide-web, please send a note to          |
                     13:   | license@php.net so we can mail you a copy immediately.               |
                     14:   +----------------------------------------------------------------------+
                     15:   | Author: Georg Richter <georg@php.net>                                |
                     16:   +----------------------------------------------------------------------+
                     17: 
                     18:   $Id: php_mysqli_structs.h 321634 2012-01-01 13:15:04Z felipe $
                     19: */
                     20: 
                     21: #ifndef PHP_MYSQLI_STRUCTS_H
                     22: #define PHP_MYSQLI_STRUCTS_H
                     23: 
                     24: /* A little hack to prevent build break, when mysql is used together with
                     25:  * c-client, which also defines LIST.
                     26:  */
                     27: #ifdef LIST
                     28: #undef LIST
                     29: #endif
                     30: 
                     31: #ifndef TRUE
                     32: #define TRUE 1
                     33: #endif
                     34: 
                     35: #ifndef FALSE
                     36: #define FALSE 0
                     37: #endif
                     38: 
                     39: #ifdef MYSQLI_USE_MYSQLND
                     40: #include "ext/mysqlnd/mysqlnd.h"
                     41: #include "mysqli_mysqlnd.h"
                     42: #else
                     43: 
                     44: /*
                     45:   The libmysql headers (a PITA) also define it and there will be an warning.
                     46:   Undef it and later we might need to define it again.
                     47: */
                     48: #ifdef HAVE_MBRLEN
                     49: #undef HAVE_MBRLEN
                     50: #define WE_HAD_MBRLEN
                     51: #endif
                     52: #ifdef HAVE_MBSTATE_T
                     53: #undef HAVE_MBSTATE_T
                     54: #define WE_HAD_MBSTATE_T
                     55: #endif
                     56: 
                     57: #if defined(ulong) && !defined(HAVE_ULONG)
                     58: #define HAVE_ULONG
                     59: #endif
                     60: 
                     61: #include <my_global.h>
                     62: 
                     63: #if !defined(HAVE_MBRLEN) && defined(WE_HAD_MBRLEN)
                     64: #define HAVE_MBRLEN 1
                     65: #endif
                     66: 
                     67: #if !defined(HAVE_MBSTATE_T) && defined(WE_HAD_MBSTATE_T)
                     68: #define HAVE_MBSTATE_T 1
                     69: #endif
                     70: 
                     71: /*
                     72:   We need more than mysql.h because we need CHARSET_INFO in one place.
                     73:   This order has been borrowed from the ODBC driver. Nothing can be removed
                     74:   from the list of headers :(
                     75: */
                     76: 
                     77: #include <my_sys.h>
                     78: #include <mysql.h>
                     79: #include <errmsg.h>
                     80: #include <my_list.h>
                     81: #include <m_string.h>
                     82: #include <mysqld_error.h>
                     83: #include <my_list.h>
                     84: #include <m_ctype.h>
                     85: #include "mysqli_libmysql.h"
                     86: #endif /* MYSQLI_USE_MYSQLND */
                     87: 
                     88: 
                     89: #define MYSQLI_VERSION_ID              101009
                     90: 
                     91: enum mysqli_status {
                     92:        MYSQLI_STATUS_UNKNOWN=0,
                     93:        MYSQLI_STATUS_CLEARED,
                     94:        MYSQLI_STATUS_INITIALIZED,
                     95:        MYSQLI_STATUS_VALID
                     96: };
                     97: 
                     98: typedef struct {
                     99:        char            *val;
                    100:        ulong           buflen;
                    101:        ulong           output_len;
                    102:        ulong           type;
                    103: } VAR_BUFFER;
                    104: 
                    105: typedef struct {
                    106:        unsigned int    var_cnt;
                    107:        VAR_BUFFER              *buf;
                    108:        zval                    **vars;
                    109:        char                    *is_null;
                    110: } BIND_BUFFER;
                    111: 
                    112: typedef struct {
                    113:        MYSQL_STMT      *stmt;
                    114:        BIND_BUFFER     param;
                    115:        BIND_BUFFER     result;
                    116:        char            *query;
                    117: } MY_STMT;
                    118: 
                    119: typedef struct {
                    120:        MYSQL                   *mysql;
                    121:        char                    *hash_key;
                    122:        zval                    *li_read;
                    123:        php_stream              *li_stream;
                    124:        unsigned int    multi_query;
                    125:        zend_bool               persistent;
                    126: #if defined(MYSQLI_USE_MYSQLND)
                    127:        int                             async_result_fetch_type;
                    128: #endif
                    129: } MY_MYSQL;
                    130: 
                    131: typedef struct {
                    132:        int                     mode;
                    133:        int                     socket;
                    134:        FILE            *fp;
                    135: } PROFILER;
                    136: 
                    137: typedef struct {
                    138:        void                            *ptr;           /* resource: (mysql, result, stmt)   */
                    139:        void                            *info;          /* additional buffer                             */
                    140:        enum mysqli_status      status;         /* object status */
                    141: } MYSQLI_RESOURCE;
                    142: 
                    143: typedef struct _mysqli_object {
                    144:        zend_object             zo;
                    145:        void                            *ptr;
                    146:        HashTable                       *prop_handler;
                    147: } mysqli_object; /* extends zend_object */
                    148: 
                    149: typedef struct st_mysqli_warning MYSQLI_WARNING;
                    150: 
                    151: struct st_mysqli_warning {
                    152:        zval    reason;
                    153:        zval    sqlstate;
                    154:        int             errorno;
                    155:        MYSQLI_WARNING  *next;
                    156: };
                    157: 
                    158: typedef struct _mysqli_property_entry {
                    159:        const char *pname;
                    160:        size_t pname_length;
                    161:        int (*r_func)(mysqli_object *obj, zval **retval TSRMLS_DC);
                    162:        int (*w_func)(mysqli_object *obj, zval *value TSRMLS_DC);
                    163: } mysqli_property_entry;
                    164: 
                    165: #if !defined(MYSQLI_USE_MYSQLND)
                    166: typedef struct {
                    167:        char    error_msg[LOCAL_INFILE_ERROR_LEN];
                    168:        void    *userdata;
                    169: } mysqli_local_infile;
                    170: #endif
                    171: 
                    172: typedef struct {
                    173:        zend_ptr_stack free_links;
                    174: } mysqli_plist_entry;
                    175: 
                    176: #ifdef PHP_WIN32
                    177: #define PHP_MYSQLI_API __declspec(dllexport)
                    178: #define MYSQLI_LLU_SPEC "%I64u"
                    179: #define MYSQLI_LL_SPEC "%I64d"
                    180: #ifndef L64
                    181: #define L64(x) x##i64
                    182: #endif
                    183: typedef __int64 my_longlong;
                    184: #else
                    185: # if defined(__GNUC__) && __GNUC__ >= 4
                    186: #  define PHP_MYSQLI_API __attribute__ ((visibility("default")))
                    187: # else
                    188: #  define PHP_MYSQLI_API
                    189: # endif
                    190: /* we need this for PRIu64 and PRId64 */
                    191: #include <inttypes.h>
                    192: #define MYSQLI_LLU_SPEC "%" PRIu64
                    193: #define MYSQLI_LL_SPEC "%" PRId64
                    194: #ifndef L64
                    195: #define L64(x) x##LL
                    196: #endif
                    197: typedef int64_t my_longlong;
                    198: #endif
                    199: 
                    200: #ifdef ZTS
                    201: #include "TSRM.h"
                    202: #endif
                    203: 
                    204: extern zend_class_entry *mysqli_link_class_entry;
                    205: extern zend_class_entry *mysqli_stmt_class_entry;
                    206: extern zend_class_entry *mysqli_result_class_entry;
                    207: extern zend_class_entry *mysqli_driver_class_entry;
                    208: extern zend_class_entry *mysqli_warning_class_entry;
                    209: extern zend_class_entry *mysqli_exception_class_entry;
                    210: 
                    211: #define MYSQLI_REGISTER_RESOURCE_EX(__ptr, __zval)  \
                    212:        ((mysqli_object *) zend_object_store_get_object(__zval TSRMLS_CC))->ptr = __ptr;
                    213: 
                    214: #define MYSQLI_RETURN_RESOURCE(__ptr, __ce) \
                    215:        Z_TYPE_P(return_value) = IS_OBJECT; \
                    216:        (return_value)->value.obj = mysqli_objects_new(__ce TSRMLS_CC); \
                    217:        MYSQLI_REGISTER_RESOURCE_EX(__ptr, return_value)
                    218: 
                    219: #define MYSQLI_REGISTER_RESOURCE(__ptr, __ce) \
                    220: {\
                    221:        zval *object = getThis();\
                    222:        if (!object || !instanceof_function(Z_OBJCE_P(object), mysqli_link_class_entry TSRMLS_CC)) {\
                    223:                object = return_value;\
                    224:                Z_TYPE_P(object) = IS_OBJECT;\
                    225:                (object)->value.obj = mysqli_objects_new(__ce TSRMLS_CC);\
                    226:        }\
                    227:        MYSQLI_REGISTER_RESOURCE_EX(__ptr, object)\
                    228: }
                    229: 
                    230: #define MYSQLI_FETCH_RESOURCE(__ptr, __type, __id, __name, __check) \
                    231: { \
                    232:        MYSQLI_RESOURCE *my_res; \
                    233:        mysqli_object *intern = (mysqli_object *)zend_object_store_get_object(*(__id) TSRMLS_CC);\
                    234:        if (!(my_res = (MYSQLI_RESOURCE *)intern->ptr)) {\
                    235:                php_error_docref(NULL TSRMLS_CC, E_WARNING, "Couldn't fetch %s", intern->zo.ce->name);\
                    236:                RETURN_NULL();\
                    237:        }\
                    238:        __ptr = (__type)my_res->ptr; \
                    239:        if (__check && my_res->status < __check) { \
                    240:                php_error_docref(NULL TSRMLS_CC, E_WARNING, "invalid object or resource %s\n", intern->zo.ce->name); \
                    241:                RETURN_NULL();\
                    242:        }\
                    243: }
                    244: 
                    245: #define MYSQLI_FETCH_RESOURCE_CONN(__ptr, __id, __check) \
                    246: { \
                    247:        MYSQLI_FETCH_RESOURCE((__ptr), MY_MYSQL *, (__id), "mysqli_link", (__check)); \
                    248:        if (!(__ptr)->mysql) { \
                    249:                mysqli_object *intern = (mysqli_object *)zend_object_store_get_object(*(__id) TSRMLS_CC);\
                    250:                php_error_docref(NULL TSRMLS_CC, E_WARNING, "invalid object or resource %s\n", intern->zo.ce->name); \
                    251:                RETURN_NULL();\
                    252:        } \
                    253: }
                    254: 
                    255: #define MYSQLI_FETCH_RESOURCE_STMT(__ptr, __id, __check) \
                    256: { \
                    257:        MYSQLI_FETCH_RESOURCE((__ptr), MY_STMT *, (__id), "mysqli_stmt", (__check)); \
                    258:        if (!(__ptr)->stmt) { \
                    259:                mysqli_object *intern = (mysqli_object *)zend_object_store_get_object(*(__id) TSRMLS_CC);\
                    260:                php_error_docref(NULL TSRMLS_CC, E_WARNING, "invalid object or resource %s\n", intern->zo.ce->name); \
                    261:                RETURN_NULL();\
                    262:        } \
                    263: }
                    264: 
                    265: 
                    266: #define MYSQLI_SET_STATUS(__id, __value) \
                    267: { \
                    268:        mysqli_object *intern = (mysqli_object *)zend_object_store_get_object(*(__id) TSRMLS_CC);\
                    269:        ((MYSQLI_RESOURCE *)intern->ptr)->status = __value; \
                    270: } \
                    271: 
                    272: #define MYSQLI_CLEAR_RESOURCE(__id) \
                    273: { \
                    274:        mysqli_object *intern = (mysqli_object *)zend_object_store_get_object(*(__id) TSRMLS_CC);\
                    275:        efree(intern->ptr); \
                    276:        intern->ptr = NULL; \
                    277: }
                    278: 
                    279: 
                    280: ZEND_BEGIN_MODULE_GLOBALS(mysqli)
                    281:        long                    default_link;
                    282:        long                    num_links;
                    283:        long                    max_links;
                    284:        long                    num_active_persistent;
                    285:        long                    num_inactive_persistent;
                    286:        long                    max_persistent;
                    287:        long                    allow_persistent;
                    288:        long                    cache_size;
                    289:        unsigned long   default_port;
                    290:        char                    *default_host;
                    291:        char                    *default_user;
                    292:        char                    *default_socket;
                    293:        char                    *default_pw;
                    294:        long                    reconnect;
                    295:        long                    allow_local_infile;
                    296:        long                    strict;
                    297:        long                    error_no;
                    298:        char                    *error_msg;
                    299:        long                    report_mode;
                    300:        HashTable               *report_ht;
                    301:        unsigned long   multi_query;
                    302:        unsigned long   embedded;
                    303: ZEND_END_MODULE_GLOBALS(mysqli)
                    304: 
                    305: 
                    306: #ifdef ZTS
                    307: #define MyG(v) TSRMG(mysqli_globals_id, zend_mysqli_globals *, v)
                    308: #else
                    309: #define MyG(v) (mysqli_globals.v)
                    310: #endif
                    311: 
                    312: #define my_estrdup(x) (x) ? estrdup(x) : NULL
                    313: #define my_efree(x) if (x) efree(x)
                    314: 
                    315: ZEND_EXTERN_MODULE_GLOBALS(mysqli)
                    316: 
                    317: #endif /* PHP_MYSQLI_STRUCTS.H */
                    318: 
                    319: 
                    320: /*
                    321:  * Local variables:
                    322:  * tab-width: 4
                    323:  * c-basic-offset: 4
                    324:  * indent-tabs-mode: t
                    325:  * End:
                    326:  * vim600: noet sw=4 ts=4 fdm=marker
                    327:  * vim<600: noet sw=4 ts=4
                    328:  */

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>