summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ext/mysqlnd/mysqlnd.c93
-rw-r--r--ext/mysqlnd/mysqlnd.h21
-rw-r--r--ext/mysqlnd/mysqlnd_portability.h8
-rw-r--r--ext/mysqlnd/mysqlnd_priv.h4
-rw-r--r--ext/mysqlnd/mysqlnd_ps.c2
-rw-r--r--ext/mysqlnd/mysqlnd_ps_codec.c13
-rw-r--r--ext/mysqlnd/mysqlnd_result.c2
-rw-r--r--ext/mysqlnd/mysqlnd_result_meta.c14
-rw-r--r--ext/mysqlnd/mysqlnd_statistics.h116
-rw-r--r--ext/mysqlnd/mysqlnd_wireprotocol.c7
-rw-r--r--ext/mysqlnd/mysqlnd_wireprotocol.h2
11 files changed, 176 insertions, 106 deletions
diff --git a/ext/mysqlnd/mysqlnd.c b/ext/mysqlnd/mysqlnd.c
index b776339219..51abeafbb3 100644
--- a/ext/mysqlnd/mysqlnd.c
+++ b/ext/mysqlnd/mysqlnd.c
@@ -67,31 +67,37 @@ const char * mysqlnd_out_of_sync = "Commands out of sync; you can't run this com
MYSQLND_STATS *mysqlnd_global_stats = NULL;
static zend_bool mysqlnd_library_initted = FALSE;
-
/* {{{ mysqlnd_library_init */
-PHPAPI void mysqlnd_library_init()
+static
+void mysqlnd_library_init(zend_bool collect_statistics)
{
if (mysqlnd_library_initted == FALSE) {
mysqlnd_library_initted = TRUE;
_mysqlnd_init_ps_subsystem();
- mysqlnd_global_stats = calloc(1, sizeof(MYSQLND_STATS));
+ if (collect_statistics) {
+ mysqlnd_global_stats = calloc(1, sizeof(MYSQLND_STATS));
+
#ifdef ZTS
- mysqlnd_global_stats->LOCK_access = tsrm_mutex_alloc();
+ mysqlnd_global_stats->LOCK_access = tsrm_mutex_alloc();
#endif
+ }
}
}
/* }}} */
/* {{{ mysqlnd_library_end */
-PHPAPI void mysqlnd_library_end()
+static
+void mysqlnd_library_end()
{
if (mysqlnd_library_initted == TRUE) {
+ if (mysqlnd_global_stats) {
#ifdef ZTS
- tsrm_mutex_free(mysqlnd_global_stats->LOCK_access);
+ tsrm_mutex_free(mysqlnd_global_stats->LOCK_access);
#endif
- free(mysqlnd_global_stats);
- mysqlnd_global_stats = NULL;
+ free(mysqlnd_global_stats);
+ mysqlnd_global_stats = NULL;
+ }
mysqlnd_library_initted = FALSE;
}
}
@@ -1554,26 +1560,6 @@ static zend_function_entry mysqlnd_functions[] = {
/* }}} */
-/* {{{ PHP_MINIT_FUNCTION
- */
-PHP_MINIT_FUNCTION(mysqlnd)
-{
- mysqlnd_library_init();
- return SUCCESS;
-}
-/* }}} */
-
-
-/* {{{ PHP_MSHUTDOWN_FUNCTION
- */
-PHP_MSHUTDOWN_FUNCTION(mysqlnd)
-{
- mysqlnd_library_end();
- return SUCCESS;
-}
-/* }}} */
-
-
/* {{{ mysqlnd_minfo_print_hash */
#if PHP_MAJOR_VERSION >= 6
PHPAPI void mysqlnd_minfo_print_hash(zval *values)
@@ -1654,10 +1640,53 @@ PHP_MINFO_FUNCTION(mysqlnd)
/* }}} */
+ZEND_DECLARE_MODULE_GLOBALS(mysqlnd)
+
+/* {{{ PHP_GINIT_FUNCTION
+ */
+static PHP_GINIT_FUNCTION(mysqlnd)
+{
+ mysqlnd_globals->collect_statistics = FALSE;
+}
+/* }}} */
+
+
+/* {{{ PHP_INI_BEGIN
+*/
+PHP_INI_BEGIN()
+ STD_PHP_INI_BOOLEAN("mysqlnd.collect_statistics", "1", PHP_INI_SYSTEM, OnUpdateBool, collect_statistics, zend_mysqlnd_globals, mysqlnd_globals)
+PHP_INI_END()
+/* }}} */
+
+
+/* {{{ PHP_MINIT_FUNCTION
+ */
+PHP_MINIT_FUNCTION(mysqlnd)
+{
+ REGISTER_INI_ENTRIES();
+
+ mysqlnd_library_init(MYSQLND_G(collect_statistics));
+ return SUCCESS;
+}
+/* }}} */
+
+
+/* {{{ PHP_MSHUTDOWN_FUNCTION
+ */
+PHP_MSHUTDOWN_FUNCTION(mysqlnd)
+{
+ mysqlnd_library_end();
+
+ UNREGISTER_INI_ENTRIES();
+ return SUCCESS;
+}
+/* }}} */
+
+
/* {{{ mysqlnd_module_entry
*/
zend_module_entry mysqlnd_module_entry = {
- STANDARD_MODULE_HEADER,
+ STANDARD_MODULE_HEADER,
"mysqlnd",
mysqlnd_functions,
PHP_MINIT(mysqlnd),
@@ -1666,7 +1695,11 @@ zend_module_entry mysqlnd_module_entry = {
NULL,
PHP_MINFO(mysqlnd),
MYSQLND_VERSION,
- STANDARD_MODULE_PROPERTIES
+ PHP_MODULE_GLOBALS(mysqlnd),
+ PHP_GINIT(mysqlnd),
+ NULL,
+ NULL,
+ STANDARD_MODULE_PROPERTIES_EX
};
/* }}} */
diff --git a/ext/mysqlnd/mysqlnd.h b/ext/mysqlnd/mysqlnd.h
index df75c62190..b6ca05454b 100644
--- a/ext/mysqlnd/mysqlnd.h
+++ b/ext/mysqlnd/mysqlnd.h
@@ -45,7 +45,9 @@ extern zend_module_entry mysqlnd_module_entry;
on production systems, if of course measured performance degradation is not
minimal.
*/
+#if PHP_DEBUG
#define MYSQLND_DO_WIRE_CHECK_BEFORE_COMMAND 1
+#endif
#include "mysqlnd_portability.h"
@@ -400,6 +402,7 @@ struct st_mysqlnd_res_methods {
struct st_mysqlnd_res_meta_methods {
MYSQLND_FIELD * (*fetch_field)(MYSQLND_RES_METADATA * const meta);
+ MYSQLND_FIELD * (*fetch_field_direct)(const MYSQLND_RES_METADATA * const meta, MYSQLND_FIELD_OFFSET fieldnr);
MYSQLND_FIELD_OFFSET (*field_tell)(const MYSQLND_RES_METADATA * const meta);
enum_func_status (*read_metadata)(MYSQLND_RES_METADATA * const meta, MYSQLND *conn TSRMLS_DC);
MYSQLND_RES_METADATA * (*clone_metadata)(const MYSQLND_RES_METADATA * const meta, zend_bool persistent);
@@ -510,7 +513,7 @@ struct st_mysqlnd_connection {
MYSQLND_THD_ZVAL_PCACHE *zval_cache;
/* qcache */
- MYSQLND_QCACHE *qcache;
+ MYSQLND_QCACHE *qcache;
/* stats */
MYSQLND_STATS stats;
@@ -594,7 +597,6 @@ struct st_mysqlnd_res {
/* zval cache */
MYSQLND_THD_ZVAL_PCACHE *zval_cache;
-
};
@@ -647,8 +649,6 @@ struct st_mysqlnd_stmt {
/* Library related */
-PHPAPI void mysqlnd_library_init();
-PHPAPI void mysqlnd_library_end();
PHPAPI void mysqlnd_restart_psession(MYSQLND *conn);
PHPAPI void mysqlnd_end_psession(MYSQLND *conn);
PHPAPI void mysqlnd_minfo_print_hash(zval *values);
@@ -904,6 +904,19 @@ MYSQLND_RES * mysqlnd_qcache_get(MYSQLND_QCACHE * const cache, const char * qu
void mysqlnd_qcache_put(MYSQLND_QCACHE * const cache, char * query, size_t query_len,
MYSQLND_RES_BUFFERED * const result, MYSQLND_RES_METADATA * const meta);
+
+
+ZEND_BEGIN_MODULE_GLOBALS(mysqlnd)
+ zend_bool collect_statistics;
+ZEND_END_MODULE_GLOBALS(mysqlnd)
+
+#ifdef ZTS
+#define MYSQLND_G(v) TSRMG(mysqlnd_globals_id, zend_mysqlnd_globals *, v)
+#else
+#define MYSQLND_G(v) (mysqlnd_globals.v)
+#endif
+
+
#endif /* MYSQLND_H */
diff --git a/ext/mysqlnd/mysqlnd_portability.h b/ext/mysqlnd/mysqlnd_portability.h
index 42e47897b2..37aeb67e21 100644
--- a/ext/mysqlnd/mysqlnd_portability.h
+++ b/ext/mysqlnd/mysqlnd_portability.h
@@ -153,11 +153,11 @@ typedef long longlong;
(((uint32) (((uchar*) (A))[1])) << 16) +\
(((uint32) (((uchar*) (A))[0])) << 24)))
-#define bit_uint5korr(A) ((ulonglong)(((uint32) ((uchar) (A)[0])) +\
- (((uint32) ((uchar) (A)[1])) << 8) +\
+#define bit_uint5korr(A) ((ulonglong)(((uint32) ((uchar) (A)[4])) +\
+ (((uint32) ((uchar) (A)[3])) << 8) +\
(((uint32) ((uchar) (A)[2])) << 16) +\
- (((uint32) ((uchar) (A)[3])) << 24)) +\
- (((ulonglong) ((uchar) (A)[4])) << 32))
+ (((uint32) ((uchar) (A)[1])) << 24)) +\
+ (((ulonglong) ((uchar) (A)[0])) << 32))
#define bit_uint6korr(A) ((ulonglong)(((uint32) (((uchar*) (A))[5])) +\
(((uint32) (((uchar*) (A))[4])) << 8) +\
diff --git a/ext/mysqlnd/mysqlnd_priv.h b/ext/mysqlnd/mysqlnd_priv.h
index cea3887796..35a2e9b59b 100644
--- a/ext/mysqlnd/mysqlnd_priv.h
+++ b/ext/mysqlnd/mysqlnd_priv.h
@@ -134,7 +134,7 @@
{ \
error_info.error_no = 0; \
error_info.error[0] = '\0'; \
- strcpy(error_info.sqlstate, "00000"); \
+ strncpy(error_info.sqlstate, "00000", sizeof("00000") - 1); \
}
#define SET_CLIENT_ERROR(error_info, a, b, c) \
@@ -176,7 +176,7 @@ void mysqlnd_stmt_execute_store_params(MYSQLND_STMT *stmt, zend_uchar **buf, zen
void ps_fetch_from_1_to_8_bytes(zval *zv, const MYSQLND_FIELD * const field,
uint pack_len, zend_uchar **row, zend_bool as_unicode,
- unsigned int byte_count, zend_bool is_bit TSRMLS_DC);
+ unsigned int byte_count TSRMLS_DC);
diff --git a/ext/mysqlnd/mysqlnd_ps.c b/ext/mysqlnd/mysqlnd_ps.c
index 46d2435831..fad3f9fefe 100644
--- a/ext/mysqlnd/mysqlnd_ps.c
+++ b/ext/mysqlnd/mysqlnd_ps.c
@@ -992,6 +992,7 @@ MYSQLND_METHOD(mysqlnd_stmt, send_long_data)(MYSQLND_STMT * const stmt, unsigned
Maybe we can make it automatic by checking what's the value of
max_allowed_packet_size on the server and resending the data.
*/
+#ifdef MYSQLND_DO_WIRE_CHECK_BEFORE_COMMAND
#if HAVE_USLEEP && !defined(PHP_WIN32)
usleep(120000);
#endif
@@ -1004,6 +1005,7 @@ MYSQLND_METHOD(mysqlnd_stmt, send_long_data)(MYSQLND_STMT * const stmt, unsigned
"Server responded to COM_STMT_SEND_LONG_DATA.");
ret = FAIL;
}
+#endif
}
return ret;
diff --git a/ext/mysqlnd/mysqlnd_ps_codec.c b/ext/mysqlnd/mysqlnd_ps_codec.c
index 85676adbd5..993873f4b2 100644
--- a/ext/mysqlnd/mysqlnd_ps_codec.c
+++ b/ext/mysqlnd/mysqlnd_ps_codec.c
@@ -67,10 +67,11 @@ struct st_mysqlnd_perm_bind mysqlnd_ps_fetch_functions[MYSQL_TYPE_LAST + 1];
/* {{{ ps_fetch_from_1_to_8_bytes */
void ps_fetch_from_1_to_8_bytes(zval *zv, const MYSQLND_FIELD * const field,
uint pack_len, zend_uchar **row, zend_bool as_unicode,
- unsigned int byte_count, zend_bool is_bit TSRMLS_DC)
+ unsigned int byte_count TSRMLS_DC)
{
char tmp[22];
size_t tmp_len = 0;
+ zend_bool is_bit = field->type == MYSQL_TYPE_BIT;
if (field->flags & UNSIGNED_FLAG) {
my_uint64 uval = 0;
@@ -154,7 +155,7 @@ void ps_fetch_int8(zval *zv, const MYSQLND_FIELD * const field,
uint pack_len, zend_uchar **row,
zend_bool as_unicode TSRMLS_DC)
{
- ps_fetch_from_1_to_8_bytes(zv, field, pack_len, row, as_unicode, 1, FALSE TSRMLS_CC);
+ ps_fetch_from_1_to_8_bytes(zv, field, pack_len, row, as_unicode, 1 TSRMLS_CC);
#if 0
if (field->flags & UNSIGNED_FLAG) {
ZVAL_LONG(zv, *(my_uint8*)*row);
@@ -173,7 +174,7 @@ void ps_fetch_int16(zval *zv, const MYSQLND_FIELD * const field,
uint pack_len, zend_uchar **row,
zend_bool as_unicode TSRMLS_DC)
{
- ps_fetch_from_1_to_8_bytes(zv, field, pack_len, row, as_unicode, 2, FALSE TSRMLS_CC);
+ ps_fetch_from_1_to_8_bytes(zv, field, pack_len, row, as_unicode, 2 TSRMLS_CC);
#if 0
if (field->flags & UNSIGNED_FLAG) {
ZVAL_LONG(zv, (my_uint16) sint2korr(*row));
@@ -192,7 +193,7 @@ void ps_fetch_int32(zval *zv, const MYSQLND_FIELD * const field,
uint pack_len, zend_uchar **row,
zend_bool as_unicode TSRMLS_DC)
{
- ps_fetch_from_1_to_8_bytes(zv, field, pack_len, row, as_unicode, 4, FALSE TSRMLS_CC);
+ ps_fetch_from_1_to_8_bytes(zv, field, pack_len, row, as_unicode, 4 TSRMLS_CC);
#if 0
if (field->flags & UNSIGNED_FLAG) {
@@ -241,7 +242,7 @@ void ps_fetch_int64(zval *zv, const MYSQLND_FIELD * const field,
uint pack_len, zend_uchar **row,
zend_bool as_unicode TSRMLS_DC)
{
- ps_fetch_from_1_to_8_bytes(zv, field, pack_len, row, as_unicode, 8, FALSE TSRMLS_CC);
+ ps_fetch_from_1_to_8_bytes(zv, field, pack_len, row, as_unicode, 8 TSRMLS_CC);
#if 0
my_uint64 llval = (my_uint64) sint8korr(*row);
@@ -501,7 +502,7 @@ void ps_fetch_bit(zval *zv, const MYSQLND_FIELD * const field,
zend_bool as_unicode TSRMLS_DC)
{
unsigned long length= php_mysqlnd_net_field_length(row);
- ps_fetch_from_1_to_8_bytes(zv, field, pack_len, row, as_unicode, length, TRUE TSRMLS_CC);
+ ps_fetch_from_1_to_8_bytes(zv, field, pack_len, row, as_unicode, length TSRMLS_CC);
}
/* }}} */
diff --git a/ext/mysqlnd/mysqlnd_result.c b/ext/mysqlnd/mysqlnd_result.c
index e1027e7ae8..d06190b453 100644
--- a/ext/mysqlnd/mysqlnd_result.c
+++ b/ext/mysqlnd/mysqlnd_result.c
@@ -905,7 +905,7 @@ static MYSQLND_FIELD *
MYSQLND_METHOD(mysqlnd_res, fetch_field_direct)(const MYSQLND_RES * const result,
MYSQLND_FIELD_OFFSET fieldnr)
{
- return result->meta? &result->meta->fields[fieldnr]:NULL;
+ return result->meta? result->meta->m->fetch_field_direct(result->meta, fieldnr):NULL;
}
/* }}} */
diff --git a/ext/mysqlnd/mysqlnd_result_meta.c b/ext/mysqlnd/mysqlnd_result_meta.c
index ba0b55a5a3..e434d143ca 100644
--- a/ext/mysqlnd/mysqlnd_result_meta.c
+++ b/ext/mysqlnd/mysqlnd_result_meta.c
@@ -358,7 +358,18 @@ MYSQLND_METHOD(mysqlnd_res_meta, fetch_field)(MYSQLND_RES_METADATA * const meta)
}
/* }}} */
-/* {{{ mysqlnd_res::field_tell */
+
+/* {{{ mysqlnd_res_meta::fetch_field_direct */
+static MYSQLND_FIELD *
+MYSQLND_METHOD(mysqlnd_res_meta, fetch_field_direct)(const MYSQLND_RES_METADATA * const meta,
+ MYSQLND_FIELD_OFFSET fieldnr)
+{
+ return &meta->fields[fieldnr];
+}
+/* }}} */
+
+
+/* {{{ mysqlnd_res_meta::field_tell */
static MYSQLND_FIELD_OFFSET
MYSQLND_METHOD(mysqlnd_res_meta, field_tell)(const MYSQLND_RES_METADATA * const meta)
{
@@ -369,6 +380,7 @@ MYSQLND_METHOD(mysqlnd_res_meta, field_tell)(const MYSQLND_RES_METADATA * const
MYSQLND_CLASS_METHODS_START(mysqlnd_res_meta)
MYSQLND_METHOD(mysqlnd_res_meta, fetch_field),
+ MYSQLND_METHOD(mysqlnd_res_meta, fetch_field_direct),
MYSQLND_METHOD(mysqlnd_res_meta, field_tell),
MYSQLND_METHOD(mysqlnd_res_meta, read_metadata),
MYSQLND_METHOD(mysqlnd_res_meta, clone_metadata),
diff --git a/ext/mysqlnd/mysqlnd_statistics.h b/ext/mysqlnd/mysqlnd_statistics.h
index 08b28f36ed..2ac4f28d9e 100644
--- a/ext/mysqlnd/mysqlnd_statistics.h
+++ b/ext/mysqlnd/mysqlnd_statistics.h
@@ -30,86 +30,92 @@ extern MYSQLND_STATS *mysqlnd_global_stats;
#define MYSQLND_INC_CONN_STATISTIC(conn_stats, statistic) \
{ \
- tsrm_mutex_lock(mysqlnd_global_stats->LOCK_access); \
- mysqlnd_global_stats->values[statistic]++; \
- tsrm_mutex_unlock(mysqlnd_global_stats->LOCK_access); \
- \
- if ((conn_stats)) { \
- ((MYSQLND_STATS *) conn_stats)->values[statistic]++; \
- } \
+ if (mysqlnd_global_stats) { \
+ tsrm_mutex_lock(mysqlnd_global_stats->LOCK_access); \
+ mysqlnd_global_stats->values[statistic]++; \
+ tsrm_mutex_unlock(mysqlnd_global_stats->LOCK_access); \
+ if ((conn_stats)) { \
+ ((MYSQLND_STATS *) conn_stats)->values[statistic]++; \
+ } \
+ }\
}
#define MYSQLND_INC_CONN_STATISTIC_W_VALUE(conn_stats, statistic, value) \
{ \
- my_uint64 v = (value); \
- \
- tsrm_mutex_lock(mysqlnd_global_stats->LOCK_access); \
- mysqlnd_global_stats->values[statistic]+= v; \
- tsrm_mutex_unlock(mysqlnd_global_stats->LOCK_access); \
- \
- if ((conn_stats)) { \
- ((MYSQLND_STATS *) conn_stats)->values[statistic]+= v; \
- } \
- }
+ if (mysqlnd_global_stats) {\
+ my_uint64 v = (value); \
+ \
+ tsrm_mutex_lock(mysqlnd_global_stats->LOCK_access); \
+ mysqlnd_global_stats->values[statistic] += v; \
+ tsrm_mutex_unlock(mysqlnd_global_stats->LOCK_access); \
+ if ((conn_stats)) { \
+ ((MYSQLND_STATS *) conn_stats)->values[statistic]+= v; \
+ } \
+ }\
+ }
#define MYSQLND_INC_CONN_STATISTIC_W_VALUE3(conn_stats, statistic1, value1, statistic2, value2, statistic3, value3) \
{ \
- my_uint64 v1 = (value1); \
- my_uint64 v2 = (value2); \
- my_uint64 v3 = (value3); \
- \
- tsrm_mutex_lock(mysqlnd_global_stats->LOCK_access); \
- mysqlnd_global_stats->values[statistic1]+= v1; \
- mysqlnd_global_stats->values[statistic2]+= v2; \
- mysqlnd_global_stats->values[statistic3]+= v3; \
- tsrm_mutex_unlock(mysqlnd_global_stats->LOCK_access); \
- \
- if ((conn_stats)) { \
- ((MYSQLND_STATS *) conn_stats)->values[statistic1]+= v1; \
- ((MYSQLND_STATS *) conn_stats)->values[statistic2]+= v2; \
- ((MYSQLND_STATS *) conn_stats)->values[statistic3]+= v3; \
+ if (mysqlnd_global_stats) { \
+ my_uint64 v1 = (value1); \
+ my_uint64 v2 = (value2); \
+ my_uint64 v3 = (value3); \
+ \
+ tsrm_mutex_lock(mysqlnd_global_stats->LOCK_access); \
+ mysqlnd_global_stats->values[statistic1]+= v1; \
+ mysqlnd_global_stats->values[statistic2]+= v2; \
+ mysqlnd_global_stats->values[statistic3]+= v3; \
+ tsrm_mutex_unlock(mysqlnd_global_stats->LOCK_access); \
+ if ((conn_stats)) { \
+ ((MYSQLND_STATS *) conn_stats)->values[statistic1]+= v1; \
+ ((MYSQLND_STATS *) conn_stats)->values[statistic2]+= v2; \
+ ((MYSQLND_STATS *) conn_stats)->values[statistic3]+= v3; \
+ } \
} \
- }
+ }
#else /* NON-ZTS */
#define MYSQLND_INC_CONN_STATISTIC(conn_stats, statistic) \
{ \
- mysqlnd_global_stats->values[statistic]++; \
- \
- if ((conn_stats)) { \
- ((MYSQLND_STATS *) conn_stats)->values[statistic]++; \
+ if (mysqlnd_global_stats) { \
+ mysqlnd_global_stats->values[statistic]++; \
+ if ((conn_stats)) { \
+ ((MYSQLND_STATS *) conn_stats)->values[statistic]++; \
+ } \
} \
}
#define MYSQLND_INC_CONN_STATISTIC_W_VALUE(conn_stats, statistic, value) \
{ \
- my_uint64 v = (value); \
+ my_uint64 v = (value); \
\
- mysqlnd_global_stats->values[statistic]+= v; \
- \
- if ((conn_stats)) { \
- ((MYSQLND_STATS *) conn_stats)->values[statistic]+= v; \
+ if (mysqlnd_global_stats) { \
+ mysqlnd_global_stats->values[statistic]+= v; \
+ if ((conn_stats)) { \
+ ((MYSQLND_STATS *) conn_stats)->values[statistic]+= v; \
+ } \
} \
}
#define MYSQLND_INC_CONN_STATISTIC_W_VALUE3(conn_stats, statistic1, value1, statistic2, value2, statistic3, value3) \
- { \
- my_uint64 v1 = (value1); \
- my_uint64 v2 = (value2); \
- my_uint64 v3 = (value3); \
- \
- mysqlnd_global_stats->values[statistic1]+= v1; \
- mysqlnd_global_stats->values[statistic2]+= v2; \
- mysqlnd_global_stats->values[statistic3]+= v3; \
- \
- if ((conn_stats)) { \
- ((MYSQLND_STATS *) conn_stats)->values[statistic1]+= v1; \
- ((MYSQLND_STATS *) conn_stats)->values[statistic2]+= v2; \
- ((MYSQLND_STATS *) conn_stats)->values[statistic3]+= v3; \
+ { \ \
+ if (mysqlnd_global_stats) { \
+ my_uint64 v1 = (value1); \
+ my_uint64 v2 = (value2); \
+ my_uint64 v3 = (value3); \
+ \
+ mysqlnd_global_stats->values[statistic1]+= v1; \
+ mysqlnd_global_stats->values[statistic2]+= v2; \
+ mysqlnd_global_stats->values[statistic3]+= v3; \
+ if ((conn_stats)) { \
+ ((MYSQLND_STATS *) conn_stats)->values[statistic1]+= v1; \
+ ((MYSQLND_STATS *) conn_stats)->values[statistic2]+= v2; \
+ ((MYSQLND_STATS *) conn_stats)->values[statistic3]+= v3; \
+ } \
} \
- }
+ }
#endif
diff --git a/ext/mysqlnd/mysqlnd_wireprotocol.c b/ext/mysqlnd/mysqlnd_wireprotocol.c
index 77f757e6c9..cdc029ab23 100644
--- a/ext/mysqlnd/mysqlnd_wireprotocol.c
+++ b/ext/mysqlnd/mysqlnd_wireprotocol.c
@@ -164,6 +164,7 @@ zend_uchar *php_mysqlnd_net_store_length(zend_uchar *packet, mynd_ulonglong leng
/* {{{ php_mysqlnd_consume_uneaten_data */
+#ifdef MYSQLND_DO_WIRE_CHECK_BEFORE_COMMAND
size_t php_mysqlnd_consume_uneaten_data(MYSQLND * const conn, enum php_mysqlnd_server_command cmd TSRMLS_DC)
{
@@ -202,9 +203,9 @@ size_t php_mysqlnd_consume_uneaten_data(MYSQLND * const conn, enum php_mysqlnd_s
return skipped_bytes;
}
+#endif
/* }}} */
-
/* {{{ php_mysqlnd_read_error_from_line */
static
enum_func_status php_mysqlnd_read_error_from_line(zend_uchar *buf, size_t buf_len,
@@ -826,7 +827,7 @@ size_t php_mysqlnd_cmd_write(void *_packet, MYSQLND *conn TSRMLS_DC)
*/
net->packet_no = 0;
-#if MYSQLND_DO_WIRE_CHECK_BEFORE_COMMAND
+#ifdef MYSQLND_DO_WIRE_CHECK_BEFORE_COMMAND
php_mysqlnd_consume_uneaten_data(conn, packet->command TSRMLS_CC);
#endif
@@ -1352,7 +1353,7 @@ void php_mysqlnd_rowp_read_text_protocol(php_mysql_packet_row *packet, MYSQLND *
*/
zend_uchar *start = bit_area;
ps_fetch_from_1_to_8_bytes(*current_field, &(packet->fields_metadata[i]),
- 0, &p, as_unicode, len, TRUE TSRMLS_CC);
+ 0, &p, as_unicode, len TSRMLS_CC);
/*
We have advanced in ps_fetch_from_1_to_8_bytes. We should go back because
later in this function there will be an advancement.
diff --git a/ext/mysqlnd/mysqlnd_wireprotocol.h b/ext/mysqlnd/mysqlnd_wireprotocol.h
index 4c3f80caaa..83411246c9 100644
--- a/ext/mysqlnd/mysqlnd_wireprotocol.h
+++ b/ext/mysqlnd/mysqlnd_wireprotocol.h
@@ -307,7 +307,9 @@ typedef struct st_php_mysql_packet_chg_user_resp {
size_t mysqlnd_stream_write(MYSQLND * const conn, char * const buf, size_t count TSRMLS_DC);
size_t mysqlnd_stream_write_w_header(MYSQLND * const conn, char * const buf, size_t count TSRMLS_DC);
+#ifdef MYSQLND_DO_WIRE_CHECK_BEFORE_COMMAND
size_t php_mysqlnd_consume_uneaten_data(MYSQLND * const conn, enum php_mysqlnd_server_command cmd TSRMLS_DC);
+#endif
void php_mysqlnd_scramble(zend_uchar * const buffer, const zend_uchar * const scramble, const zend_uchar * const pass);