root/ext/mysqlnd/mysqlnd.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


   1 /*
   2   +----------------------------------------------------------------------+
   3   | PHP Version 5                                                        |
   4   +----------------------------------------------------------------------+
   5   | Copyright (c) 2006-2016 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   | Authors: Andrey Hristov <andrey@mysql.com>                           |
  16   |          Ulf Wendel <uwendel@mysql.com>                              |
  17   |          Georg Richter <georg@mysql.com>                             |
  18   +----------------------------------------------------------------------+
  19 */
  20 /* $Id: 76b08b24596e12d4553bd41fc93cccd5bac2fe7a $ */
  21 
  22 #ifndef MYSQLND_H
  23 #define MYSQLND_H
  24 
  25 #define MYSQLND_VERSION "mysqlnd 5.0.11-dev - 20120503 - $Id: 76b08b24596e12d4553bd41fc93cccd5bac2fe7a $"
  26 #define MYSQLND_VERSION_ID 50011
  27 
  28 #define MYSQLND_PLUGIN_API_VERSION 2
  29 
  30 #define MYSQLND_STRING_TO_INT_CONVERSION
  31 /*
  32   This force mysqlnd to do a single (or more depending on ammount of data)
  33   non-blocking read() calls before sending a command to the server. Useful
  34   for debugging, if previous function hasn't consumed all the output sent
  35   to it - like stmt_send_long_data() error because the data was larger that
  36   max_allowed_packet_size, and COM_STMT_SEND_LONG_DATA by protocol doesn't
  37   use response packets, thus letting the next command to fail miserably, if
  38   the connector implementor is not aware of this deficiency. Should be off
  39   on production systems, if of course measured performance degradation is not
  40   minimal.
  41 */
  42 #if A0 && PHP_DEBUG
  43 #define MYSQLND_DO_WIRE_CHECK_BEFORE_COMMAND 1
  44 #endif
  45 
  46 #if PHP_DEBUG
  47 #define MYSQLND_DBG_ENABLED 1
  48 #else
  49 #define MYSQLND_DBG_ENABLED 0
  50 #endif
  51 
  52 #if defined(MYSQLND_COMPRESSION_WANTED) && defined(HAVE_ZLIB)
  53 #define MYSQLND_COMPRESSION_ENABLED 1
  54 #endif
  55 
  56 #ifdef ZTS
  57 #include "TSRM.h"
  58 #endif
  59 
  60 #include "mysqlnd_portability.h"
  61 #include "mysqlnd_enum_n_def.h"
  62 #include "mysqlnd_structs.h"
  63 
  64 
  65 /* Library related */
  66 PHPAPI void mysqlnd_library_init(TSRMLS_D);
  67 PHPAPI void mysqlnd_library_end(TSRMLS_D);
  68 
  69 PHPAPI unsigned int mysqlnd_plugin_register();
  70 PHPAPI unsigned int mysqlnd_plugin_register_ex(struct st_mysqlnd_plugin_header * plugin TSRMLS_DC);
  71 PHPAPI unsigned int mysqlnd_plugin_count();
  72 PHPAPI void * _mysqlnd_plugin_find(const char * const name TSRMLS_DC);
  73 #define mysqlnd_plugin_find(name) _mysqlnd_plugin_find((name) TSRMLS_CC);
  74 
  75 PHPAPI void _mysqlnd_plugin_apply_with_argument(apply_func_arg_t apply_func, void * argument TSRMLS_DC);
  76 #define mysqlnd_plugin_apply_with_argument(func, argument) _mysqlnd_plugin_apply_with_argument((func), (argument) TSRMLS_CC);
  77 
  78 #define mysqlnd_restart_psession(conn)  ((conn)->data)->m->restart_psession((conn)->data TSRMLS_CC)
  79 #define mysqlnd_end_psession(conn)              ((conn)->data)->m->end_psession((conn)->data TSRMLS_CC)
  80 PHPAPI void mysqlnd_minfo_print_hash(zval *values);
  81 #define mysqlnd_thread_safe()   TRUE
  82 
  83 PHPAPI const MYSQLND_CHARSET * mysqlnd_find_charset_nr(unsigned int charsetno);
  84 PHPAPI const MYSQLND_CHARSET * mysqlnd_find_charset_name(const char * const charsetname);
  85 
  86 
  87 /* Connect */
  88 #define mysqlnd_init(client_flags, persistent) _mysqlnd_init((client_flags), (persistent) TSRMLS_CC)
  89 PHPAPI MYSQLND * _mysqlnd_init(unsigned int client_flags, zend_bool persistent TSRMLS_DC);
  90 PHPAPI MYSQLND * mysqlnd_connect(MYSQLND * conn,
  91                                                   const char * host, const char * user,
  92                                                   const char * passwd, unsigned int passwd_len,
  93                                                   const char * db, unsigned int db_len,
  94                                                   unsigned int port,
  95                                                   const char * socket_or_pipe,
  96                                                   unsigned int mysql_flags,
  97                                                   unsigned int client_api_flags
  98                                                   TSRMLS_DC);
  99 
 100 #define mysqlnd_change_user(conn, user, passwd, db, silent)             ((conn)->data)->m->change_user((conn)->data, (user), (passwd), (db), (silent), strlen((passwd)) TSRMLS_CC)
 101 #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)
 102 
 103 #define mysqlnd_debug(x)                                                                _mysqlnd_debug((x) TSRMLS_CC)
 104 PHPAPI void _mysqlnd_debug(const char *mode TSRMLS_DC);
 105 
 106 /* Query */
 107 #define mysqlnd_fetch_into(result, flags, ret_val, ext) (result)->m.fetch_into((result), (flags), (ret_val), (ext) TSRMLS_CC ZEND_FILE_LINE_CC)
 108 #define mysqlnd_fetch_row_c(result)                                             (result)->m.fetch_row_c((result) TSRMLS_CC)
 109 #define mysqlnd_fetch_all(result, flags, return_value)  (result)->m.fetch_all((result), (flags), (return_value) TSRMLS_CC ZEND_FILE_LINE_CC)
 110 #define mysqlnd_result_fetch_field_data(res,offset,ret) (res)->m.fetch_field_data((res), (offset), (ret) TSRMLS_CC)
 111 #define mysqlnd_get_connection_stats(conn, values)              ((conn)->data)->m->get_statistics((conn)->data,  (values) TSRMLS_CC ZEND_FILE_LINE_CC)
 112 #define mysqlnd_get_client_stats(values)                                _mysqlnd_get_client_stats((values) TSRMLS_CC ZEND_FILE_LINE_CC)
 113 
 114 #define mysqlnd_close(conn,is_forced)                                   (conn)->m->close((conn), (is_forced) TSRMLS_CC)
 115 #define mysqlnd_query(conn, query_str, query_len)               ((conn)->data)->m->query((conn)->data, (query_str), (query_len) TSRMLS_CC)
 116 #define mysqlnd_async_query(conn, query_str, query_len) ((conn)->data)->m->send_query((conn)->data, (query_str), (query_len) TSRMLS_CC)
 117 #define mysqlnd_poll(r, err, d_pull,sec,usec,desc_num)  _mysqlnd_poll((r), (err), (d_pull), (sec), (usec), (desc_num) TSRMLS_CC)
 118 #define mysqlnd_reap_async_query(conn)                                  ((conn)->data)->m->reap_query((conn)->data TSRMLS_CC)
 119 #define mysqlnd_unbuffered_skip_result(result)                  (result)->m.skip_result((result) TSRMLS_CC)
 120 
 121 PHPAPI enum_func_status _mysqlnd_poll(MYSQLND **r_array, MYSQLND **e_array, MYSQLND ***dont_poll, long sec, long usec, int * desc_num TSRMLS_DC);
 122 
 123 #define mysqlnd_use_result(conn)                ((conn)->data)->m->use_result((conn)->data, 0 TSRMLS_CC)
 124 #define mysqlnd_store_result(conn)              ((conn)->data)->m->store_result((conn)->data, MYSQLND_STORE_NO_COPY TSRMLS_CC)
 125 #define mysqlnd_store_result_ofs(conn)  ((conn)->data)->m->store_result((conn)->data, MYSQLND_STORE_COPY TSRMLS_CC)
 126 #define mysqlnd_next_result(conn)               ((conn)->data)->m->next_result((conn)->data TSRMLS_CC)
 127 #define mysqlnd_more_results(conn)              ((conn)->data)->m->more_results((conn)->data TSRMLS_CC)
 128 #define mysqlnd_free_result(r,e_or_i)   ((MYSQLND_RES*)r)->m.free_result(((MYSQLND_RES*)(r)), (e_or_i) TSRMLS_CC)
 129 #define mysqlnd_data_seek(result, row)  (result)->m.seek_data((result), (row) TSRMLS_CC)
 130 
 131 /* Errors */
 132 #define mysqlnd_errno(conn)                             ((conn)->data)->m->get_error_no((conn)->data TSRMLS_CC)
 133 #define mysqlnd_error(conn)                             ((conn)->data)->m->get_error_str((conn)->data TSRMLS_CC)
 134 #define mysqlnd_sqlstate(conn)                  ((conn)->data)->m->get_sqlstate((conn)->data TSRMLS_CC)
 135 
 136 /* Charset */
 137 #define mysqlnd_character_set_name(conn) ((conn)->data)->m->charset_name((conn)->data TSRMLS_CC)
 138 
 139 /* Simple metadata */
 140 #define mysqlnd_field_count(conn)               ((conn)->data)->m->get_field_count((conn)->data TSRMLS_CC)
 141 #define mysqlnd_insert_id(conn)                 ((conn)->data)->m->get_last_insert_id((conn)->data TSRMLS_CC)
 142 #define mysqlnd_affected_rows(conn)             ((conn)->data)->m->get_affected_rows((conn)->data TSRMLS_CC)
 143 #define mysqlnd_warning_count(conn)             ((conn)->data)->m->get_warning_count((conn)->data TSRMLS_CC)
 144 #define mysqlnd_info(conn)                              ((conn)->data)->m->get_last_message((conn)->data TSRMLS_CC)
 145 #define mysqlnd_get_server_info(conn)   ((conn)->data)->m->get_server_information((conn)->data TSRMLS_CC)
 146 #define mysqlnd_get_server_version(conn) ((conn)->data)->m->get_server_version((conn)->data TSRMLS_CC)
 147 #define mysqlnd_get_host_info(conn)             ((conn)->data)->m->get_host_information((conn)->data TSRMLS_CC)
 148 #define mysqlnd_get_proto_info(conn)    ((conn)->data)->m->get_protocol_information((conn)->data TSRMLS_CC)
 149 #define mysqlnd_thread_id(conn)                 ((conn)->data)->m->get_thread_id((conn)->data TSRMLS_CC)
 150 #define mysqlnd_get_server_status(conn) ((conn)->data)->m->get_server_status((conn)->data TSRMLS_CC)
 151 
 152 #define mysqlnd_num_rows(result)                (result)->m.num_rows((result) TSRMLS_CC)
 153 #define mysqlnd_num_fields(result)              (result)->m.num_fields((result) TSRMLS_CC)
 154 
 155 #define mysqlnd_fetch_lengths(result)   (result)->m.fetch_lengths((result) TSRMLS_CC)
 156 
 157 #define mysqlnd_field_seek(result, ofs)                 (result)->m.seek_field((result), (ofs) TSRMLS_CC)
 158 #define mysqlnd_field_tell(result)                              (result)->m.field_tell((result) TSRMLS_CC)
 159 #define mysqlnd_fetch_field(result)                             (result)->m.fetch_field((result) TSRMLS_CC)
 160 #define mysqlnd_fetch_field_direct(result,fnr)  (result)->m.fetch_field_direct((result), (fnr) TSRMLS_CC)
 161 #define mysqlnd_fetch_fields(result)                    (result)->m.fetch_fields((result) TSRMLS_CC)
 162 
 163 /* mysqlnd metadata */
 164 PHPAPI const char *     mysqlnd_get_client_info();
 165 PHPAPI unsigned int     mysqlnd_get_client_version();
 166 
 167 #define mysqlnd_ssl_set(conn, key, cert, ca, capath, cipher) ((conn)->data)->m->ssl_set((conn)->data, (key), (cert), (ca), (capath), (cipher) TSRMLS_CC)
 168 
 169 /* PS */
 170 #define mysqlnd_stmt_insert_id(stmt)            (stmt)->m->get_last_insert_id((stmt) TSRMLS_CC)
 171 #define mysqlnd_stmt_affected_rows(stmt)        (stmt)->m->get_affected_rows((stmt) TSRMLS_CC)
 172 #define mysqlnd_stmt_num_rows(stmt)                     (stmt)->m->get_num_rows((stmt) TSRMLS_CC)
 173 #define mysqlnd_stmt_param_count(stmt)          (stmt)->m->get_param_count((stmt) TSRMLS_CC)
 174 #define mysqlnd_stmt_field_count(stmt)          (stmt)->m->get_field_count((stmt) TSRMLS_CC)
 175 #define mysqlnd_stmt_warning_count(stmt)        (stmt)->m->get_warning_count((stmt) TSRMLS_CC)
 176 #define mysqlnd_stmt_server_status(stmt)        (stmt)->m->get_server_status((stmt) TSRMLS_CC)
 177 #define mysqlnd_stmt_errno(stmt)                        (stmt)->m->get_error_no((stmt) TSRMLS_CC)
 178 #define mysqlnd_stmt_error(stmt)                        (stmt)->m->get_error_str((stmt) TSRMLS_CC)
 179 #define mysqlnd_stmt_sqlstate(stmt)                     (stmt)->m->get_sqlstate((stmt) TSRMLS_CC)
 180 
 181 
 182 PHPAPI void mysqlnd_efree_param_bind_dtor(MYSQLND_PARAM_BIND * param_bind TSRMLS_DC);
 183 PHPAPI void mysqlnd_efree_result_bind_dtor(MYSQLND_RESULT_BIND * result_bind TSRMLS_DC);
 184 PHPAPI void mysqlnd_free_param_bind_dtor(MYSQLND_PARAM_BIND * param_bind TSRMLS_DC);
 185 PHPAPI void mysqlnd_free_result_bind_dtor(MYSQLND_RESULT_BIND * result_bind TSRMLS_DC);
 186 
 187 
 188 PHPAPI const char * mysqlnd_field_type_name(enum mysqlnd_field_types field_type);
 189 
 190 /* LOAD DATA LOCAL */
 191 PHPAPI void mysqlnd_local_infile_default(MYSQLND_CONN_DATA * conn);
 192 PHPAPI void mysqlnd_set_local_infile_handler(MYSQLND_CONN_DATA * const conn, const char * const funcname);
 193 
 194 /* Simple commands */
 195 #define mysqlnd_autocommit(conn, mode)          ((conn)->data)->m->set_autocommit((conn)->data, (mode) TSRMLS_CC)
 196 #define mysqlnd_begin_transaction(conn,flags,name) ((conn)->data)->m->tx_begin((conn)->data, (flags), (name) TSRMLS_CC)
 197 #define mysqlnd_commit(conn, flags, name)       ((conn)->data)->m->tx_commit_or_rollback((conn)->data, TRUE, (flags), (name) TSRMLS_CC)
 198 #define mysqlnd_rollback(conn, flags, name)     ((conn)->data)->m->tx_commit_or_rollback((conn)->data, FALSE, (flags), (name) TSRMLS_CC)
 199 #define mysqlnd_savepoint(conn, name)           ((conn)->data)->m->tx_savepoint((conn)->data, (name) TSRMLS_CC)
 200 #define mysqlnd_release_savepoint(conn, name) ((conn)->data)->m->tx_savepoint_release((conn)->data, (name) TSRMLS_CC)
 201 #define mysqlnd_list_dbs(conn, wild)            ((conn)->data)->m->list_method((conn)->data, wild? "SHOW DATABASES LIKE %s":"SHOW DATABASES", (wild), NULL TSRMLS_CC)
 202 #define mysqlnd_list_fields(conn, tab,wild)     ((conn)->data)->m->list_fields((conn)->data, (tab), (wild) TSRMLS_CC)
 203 #define mysqlnd_list_processes(conn)            ((conn)->data)->m->list_method((conn)->data, "SHOW PROCESSLIST", NULL, NULL TSRMLS_CC)
 204 #define mysqlnd_list_tables(conn, wild)         ((conn)->data)->m->list_method((conn)->data, wild? "SHOW TABLES LIKE %s":"SHOW TABLES", (wild), NULL TSRMLS_CC)
 205 #define mysqlnd_dump_debug_info(conn)           ((conn)->data)->m->server_dump_debug_information((conn)->data TSRMLS_CC)
 206 #define mysqlnd_select_db(conn, db, db_len)     ((conn)->data)->m->select_db((conn)->data, (db), (db_len) TSRMLS_CC)
 207 #define mysqlnd_ping(conn)                                      ((conn)->data)->m->ping((conn)->data TSRMLS_CC)
 208 #define mysqlnd_kill(conn, pid)                         ((conn)->data)->m->kill_connection((conn)->data, (pid) TSRMLS_CC)
 209 #define mysqlnd_refresh(conn, options)          ((conn)->data)->m->refresh_server((conn)->data, (options) TSRMLS_CC)
 210 #define mysqlnd_shutdown(conn, level)           ((conn)->data)->m->shutdown_server((conn)->data, (level) TSRMLS_CC)
 211 #define mysqlnd_set_character_set(conn, cs)     ((conn)->data)->m->set_charset((conn)->data, (cs) TSRMLS_CC)
 212 #define mysqlnd_stat(conn, msg, msg_len)        ((conn)->data)->m->get_server_statistics(((conn)->data), (msg), (msg_len) TSRMLS_CC)
 213 #define mysqlnd_options(conn, opt, value)       ((conn)->data)->m->set_client_option((conn)->data, (opt), (value) TSRMLS_CC)
 214 #define mysqlnd_options4(conn, opt, k, v)       ((conn)->data)->m->set_client_option_2d((conn)->data, (opt), (k), (v) TSRMLS_CC)
 215 #define mysqlnd_set_server_option(conn, op)     ((conn)->data)->m->set_server_option((conn)->data, (op) TSRMLS_CC)
 216 
 217 /* Escaping */
 218 #define mysqlnd_real_escape_string(conn, newstr, escapestr, escapestr_len) \
 219                 ((conn)->data)->m->escape_string((conn)->data, (newstr), (escapestr), (escapestr_len) TSRMLS_CC)
 220 #define mysqlnd_escape_string(newstr, escapestr, escapestr_len) \
 221                 mysqlnd_old_escape_string((newstr), (escapestr), (escapestr_len) TSRMLS_CC)
 222 
 223 PHPAPI ulong mysqlnd_old_escape_string(char * newstr, const char * escapestr, size_t escapestr_len TSRMLS_DC);
 224 
 225 
 226 /* PS */
 227 #define mysqlnd_stmt_init(conn)                         ((conn)->data)->m->stmt_init(((conn)->data) TSRMLS_CC)
 228 #define mysqlnd_stmt_store_result(stmt)         (!mysqlnd_stmt_field_count((stmt)) ? PASS:((stmt)->m->store_result((stmt) TSRMLS_CC)? PASS:FAIL))
 229 #define mysqlnd_stmt_get_result(stmt)           (stmt)->m->get_result((stmt) TSRMLS_CC)
 230 #define mysqlnd_stmt_more_results(stmt)         (stmt)->m->more_results((stmt) TSRMLS_CC)
 231 #define mysqlnd_stmt_next_result(stmt)          (stmt)->m->next_result((stmt) TSRMLS_CC)
 232 #define mysqlnd_stmt_data_seek(stmt, row)       (stmt)->m->seek_data((stmt), (row) TSRMLS_CC)
 233 #define mysqlnd_stmt_prepare(stmt, q, qlen)     (stmt)->m->prepare((stmt), (q), (qlen) TSRMLS_CC)
 234 #define mysqlnd_stmt_execute(stmt)                      (stmt)->m->execute((stmt) TSRMLS_CC)
 235 #define mysqlnd_stmt_send_long_data(stmt,p,d,l)         (stmt)->m->send_long_data((stmt), (p), (d), (l) TSRMLS_CC)
 236 #define mysqlnd_stmt_alloc_param_bind(stmt)                     (stmt)->m->alloc_parameter_bind((stmt) TSRMLS_CC)
 237 #define mysqlnd_stmt_free_param_bind(stmt,bind)         (stmt)->m->free_parameter_bind((stmt), (bind) TSRMLS_CC)
 238 #define mysqlnd_stmt_bind_param(stmt,bind)                      (stmt)->m->bind_parameters((stmt), (bind) TSRMLS_CC)
 239 #define mysqlnd_stmt_bind_one_param(stmt,n,z,t)         (stmt)->m->bind_one_parameter((stmt), (n), (z), (t) TSRMLS_CC)
 240 #define mysqlnd_stmt_refresh_bind_param(s)                      (s)->m->refresh_bind_param((s) TSRMLS_CC)
 241 #define mysqlnd_stmt_alloc_result_bind(stmt)            (stmt)->m->alloc_result_bind((stmt) TSRMLS_CC)
 242 #define mysqlnd_stmt_free_result_bind(stmt,bind)        (stmt)->m->free_result_bind((stmt), (bind) TSRMLS_CC)
 243 #define mysqlnd_stmt_bind_result(stmt,bind)                     (stmt)->m->bind_result((stmt), (bind) TSRMLS_CC)
 244 #define mysqlnd_stmt_bind_one_result(s,no)                      (s)->m->bind_one_result((s), (no) TSRMLS_CC)
 245 #define mysqlnd_stmt_param_metadata(stmt)                       (stmt)->m->get_parameter_metadata((stmt))
 246 #define mysqlnd_stmt_result_metadata(stmt)                      (stmt)->m->get_result_metadata((stmt) TSRMLS_CC)
 247 
 248 #define mysqlnd_stmt_free_result(stmt)          (stmt)->m->free_result((stmt) TSRMLS_CC)
 249 #define mysqlnd_stmt_close(stmt, implicit)      (stmt)->m->dtor((stmt), (implicit) TSRMLS_CC)
 250 #define mysqlnd_stmt_reset(stmt)                        (stmt)->m->reset((stmt) TSRMLS_CC)
 251 #define mysqlnd_stmt_flush(stmt)                        (stmt)->m->flush((stmt) TSRMLS_CC)
 252 
 253 
 254 #define mysqlnd_stmt_attr_get(stmt, attr, value)        (stmt)->m->get_attribute((stmt), (attr), (value) TSRMLS_CC)
 255 #define mysqlnd_stmt_attr_set(stmt, attr, value)        (stmt)->m->set_attribute((stmt), (attr), (value) TSRMLS_CC)
 256 
 257 #define mysqlnd_stmt_fetch(stmt, fetched)       (stmt)->m->fetch((stmt), (fetched) TSRMLS_CC)
 258 
 259 
 260 /* Performance statistics */
 261 PHPAPI void                     _mysqlnd_get_client_stats(zval *return_value TSRMLS_DC ZEND_FILE_LINE_DC);
 262 
 263 /* double check the class name to avoid naming conflicts when using these: */
 264 #define MYSQLND_METHOD(class, method) php_##class##_##method##_pub
 265 #define MYSQLND_METHOD_PRIVATE(class, method) php_##class##_##method##_priv
 266 
 267 ZEND_BEGIN_MODULE_GLOBALS(mysqlnd)
 268         zend_bool               collect_statistics;
 269         zend_bool               collect_memory_statistics;
 270         char *                  debug;  /* The actual string */
 271         char *                  trace_alloc_settings;   /* The actual string */
 272         MYSQLND_DEBUG * dbg;    /* The DBG object for standard tracing */
 273         MYSQLND_DEBUG * trace_alloc;    /* The DBG object for allocation tracing */
 274         long                    net_cmd_buffer_size;
 275         long                    net_read_buffer_size;
 276         long                    log_mask;
 277         long                    net_read_timeout;
 278         long                    mempool_default_size;
 279         long                    debug_emalloc_fail_threshold;
 280         long                    debug_ecalloc_fail_threshold;
 281         long                    debug_erealloc_fail_threshold;
 282         long                    debug_malloc_fail_threshold;
 283         long                    debug_calloc_fail_threshold;
 284         long                    debug_realloc_fail_threshold;
 285         char *                  sha256_server_public_key;
 286         zend_bool               fetch_data_copy;
 287 ZEND_END_MODULE_GLOBALS(mysqlnd)
 288 
 289 PHPAPI ZEND_EXTERN_MODULE_GLOBALS(mysqlnd)
 290 
 291 #ifdef ZTS
 292 #define MYSQLND_G(v) TSRMG(mysqlnd_globals_id, zend_mysqlnd_globals *, v)
 293 #else
 294 #define MYSQLND_G(v) (mysqlnd_globals.v)
 295 #endif
 296 
 297 
 298 PHPAPI void mysqlnd_minfo_print_hash(zval *values);
 299 
 300 #endif  /* MYSQLND_H */
 301 
 302 
 303 /*
 304  * Local variables:
 305  * tab-width: 4
 306  * c-basic-offset: 4
 307  * End:
 308  * vim600: noet sw=4 ts=4 fdm=marker
 309  * vim<600: noet sw=4 ts=4
 310  */

/* [<][>][^][v][top][bottom][index][help] */