DBG_INF_FMT("size=%lu ptr=%p", size, ret);
if (MYSQLND_G(collect_memory_statistics)) {
- MYSQLND_INC_GLOBAL_STATISTIC2_W_VALUE(STAT_MEM_EMALLOC_COUNT, 1, STAT_MEM_EMALLOC_AMMOUNT, size);
+ MYSQLND_INC_GLOBAL_STATISTIC_W_VALUE2(STAT_MEM_EMALLOC_COUNT, 1, STAT_MEM_EMALLOC_AMMOUNT, size);
}
DBG_RETURN(ret);
}
if (MYSQLND_G(collect_memory_statistics)) {
enum mysqlnd_collected_stats s1 = persistent? STAT_MEM_MALLOC_COUNT:STAT_MEM_EMALLOC_COUNT;
enum mysqlnd_collected_stats s2 = persistent? STAT_MEM_MALLOC_AMMOUNT:STAT_MEM_EMALLOC_AMMOUNT;
- MYSQLND_INC_GLOBAL_STATISTIC2_W_VALUE(s1, 1, s2, size);
+ MYSQLND_INC_GLOBAL_STATISTIC_W_VALUE2(s1, 1, s2, size);
}
DBG_RETURN(ret);
DBG_INF_FMT("after : %lu", zend_memory_usage(FALSE TSRMLS_CC));
DBG_INF_FMT("size=%lu ptr=%p", size, ret);
if (MYSQLND_G(collect_memory_statistics)) {
- MYSQLND_INC_GLOBAL_STATISTIC2_W_VALUE(STAT_MEM_ECALLOC_COUNT, 1, STAT_MEM_ECALLOC_AMMOUNT, size);
+ MYSQLND_INC_GLOBAL_STATISTIC_W_VALUE2(STAT_MEM_ECALLOC_COUNT, 1, STAT_MEM_ECALLOC_AMMOUNT, size);
}
DBG_RETURN(ret);
}
if (MYSQLND_G(collect_memory_statistics)) {
enum mysqlnd_collected_stats s1 = persistent? STAT_MEM_CALLOC_COUNT:STAT_MEM_ECALLOC_COUNT;
enum mysqlnd_collected_stats s2 = persistent? STAT_MEM_CALLOC_AMMOUNT:STAT_MEM_ECALLOC_AMMOUNT;
- MYSQLND_INC_GLOBAL_STATISTIC2_W_VALUE(s1, 1, s2, size);
+ MYSQLND_INC_GLOBAL_STATISTIC_W_VALUE2(s1, 1, s2, size);
}
DBG_RETURN(ret);
DBG_INF_FMT("after : %lu", zend_memory_usage(FALSE TSRMLS_CC));
DBG_INF_FMT("new_ptr=%p", ret);
if (MYSQLND_G(collect_memory_statistics)) {
- MYSQLND_INC_GLOBAL_STATISTIC2_W_VALUE(STAT_MEM_EREALLOC_COUNT, 1, STAT_MEM_EREALLOC_AMMOUNT, new_size);
+ MYSQLND_INC_GLOBAL_STATISTIC_W_VALUE2(STAT_MEM_EREALLOC_COUNT, 1, STAT_MEM_EREALLOC_AMMOUNT, new_size);
}
DBG_RETURN(ret);
}
if (MYSQLND_G(collect_memory_statistics)) {
enum mysqlnd_collected_stats s1 = persistent? STAT_MEM_REALLOC_COUNT:STAT_MEM_EREALLOC_COUNT;
enum mysqlnd_collected_stats s2 = persistent? STAT_MEM_REALLOC_AMMOUNT:STAT_MEM_EREALLOC_AMMOUNT;
- MYSQLND_INC_GLOBAL_STATISTIC2_W_VALUE(s1, 1, s2, new_size);
+ MYSQLND_INC_GLOBAL_STATISTIC_W_VALUE2(s1, 1, s2, new_size);
}
DBG_RETURN(ret);
}
DBG_INF_FMT("size=%lu ptr=%p", size, ret);
if (MYSQLND_G(collect_memory_statistics)) {
- MYSQLND_INC_GLOBAL_STATISTIC2_W_VALUE(STAT_MEM_MALLOC_COUNT, 1, STAT_MEM_MALLOC_AMMOUNT, size);
+ MYSQLND_INC_GLOBAL_STATISTIC_W_VALUE2(STAT_MEM_MALLOC_COUNT, 1, STAT_MEM_MALLOC_AMMOUNT, size);
}
DBG_RETURN(ret);
}
DBG_INF_FMT("size=%lu ptr=%p", size, ret);
if (MYSQLND_G(collect_memory_statistics)) {
- MYSQLND_INC_GLOBAL_STATISTIC2_W_VALUE(STAT_MEM_CALLOC_COUNT, 1, STAT_MEM_CALLOC_AMMOUNT, size);
+ MYSQLND_INC_GLOBAL_STATISTIC_W_VALUE2(STAT_MEM_CALLOC_COUNT, 1, STAT_MEM_CALLOC_AMMOUNT, size);
}
DBG_RETURN(ret);
}
DBG_INF_FMT("new_ptr=%p", ret);
if (MYSQLND_G(collect_memory_statistics)) {
- MYSQLND_INC_GLOBAL_STATISTIC2_W_VALUE(STAT_MEM_REALLOC_COUNT, 1, STAT_MEM_REALLOC_AMMOUNT, new_size);
+ MYSQLND_INC_GLOBAL_STATISTIC_W_VALUE2(STAT_MEM_REALLOC_COUNT, 1, STAT_MEM_REALLOC_AMMOUNT, new_size);
}
DBG_RETURN(ret);
}
MYSQLND_CLOSE_LAST /* for checking, should always be last */
} enum_connection_close_type;
+
typedef enum mysqlnd_collected_stats
{
STAT_BYTES_SENT,
STAT_PACKETS_RECEIVED,
STAT_PROTOCOL_OVERHEAD_IN,
STAT_PROTOCOL_OVERHEAD_OUT,
+ STAT_BYTES_RECEIVED_OK,
+ STAT_BYTES_RECEIVED_EOF,
+ STAT_BYTES_RECEIVED_RSET_HEADER,
+ STAT_BYTES_RECEIVED_RSET_FIELD_META,
+ STAT_BYTES_RECEIVED_RSET_ROW,
+ STAT_BYTES_RECEIVED_PREPARE_RESPONSE,
+ STAT_BYTES_RECEIVED_CHANGE_USER,
+ STAT_PACKETS_SENT_CMD,
+ STAT_PACKETS_RECEIVED_OK,
+ STAT_PACKETS_RECEIVED_EOF,
+ STAT_PACKETS_RECEIVED_RSET_HEADER,
+ STAT_PACKETS_RECEIVED_RSET_FIELD_META,
+ STAT_PACKETS_RECEIVED_RSET_ROW,
+ STAT_PACKETS_RECEIVED_PREPARE_RESPONSE,
+ STAT_PACKETS_RECEIVED_CHANGE_USER,
STAT_RSET_QUERY,
STAT_NON_RSET_QUERY,
STAT_NO_INDEX_USED,
STAT_MEM_REALLOC_COUNT,
STAT_MEM_REALLOC_AMMOUNT,
STAT_MEM_FREE_COUNT,
+ STAT_TEXT_TYPE_FETCHED_NULL,
+ STAT_TEXT_TYPE_FETCHED_BIT,
+ STAT_TEXT_TYPE_FETCHED_INT8,
+ STAT_TEXT_TYPE_FETCHED_INT16,
+ STAT_TEXT_TYPE_FETCHED_INT24,
+ STAT_TEXT_TYPE_FETCHED_INT32,
+ STAT_TEXT_TYPE_FETCHED_INT64,
+ STAT_TEXT_TYPE_FETCHED_DECIMAL,
+ STAT_TEXT_TYPE_FETCHED_FLOAT,
+ STAT_TEXT_TYPE_FETCHED_DOUBLE,
+ STAT_TEXT_TYPE_FETCHED_DATE,
+ STAT_TEXT_TYPE_FETCHED_YEAR,
+ STAT_TEXT_TYPE_FETCHED_TIME,
+ STAT_TEXT_TYPE_FETCHED_DATETIME,
+ STAT_TEXT_TYPE_FETCHED_TIMESTAMP,
+ STAT_TEXT_TYPE_FETCHED_STRING,
+ STAT_TEXT_TYPE_FETCHED_BLOB,
+ STAT_TEXT_TYPE_FETCHED_ENUM,
+ STAT_TEXT_TYPE_FETCHED_SET,
+ STAT_TEXT_TYPE_FETCHED_GEOMETRY,
+ STAT_TEXT_TYPE_FETCHED_OTHER,
+ STAT_BINARY_TYPE_FETCHED_NULL,
+ STAT_BINARY_TYPE_FETCHED_BIT,
+ STAT_BINARY_TYPE_FETCHED_INT8,
+ STAT_BINARY_TYPE_FETCHED_INT16,
+ STAT_BINARY_TYPE_FETCHED_INT24,
+ STAT_BINARY_TYPE_FETCHED_INT32,
+ STAT_BINARY_TYPE_FETCHED_INT64,
+ STAT_BINARY_TYPE_FETCHED_DECIMAL,
+ STAT_BINARY_TYPE_FETCHED_FLOAT,
+ STAT_BINARY_TYPE_FETCHED_DOUBLE,
+ STAT_BINARY_TYPE_FETCHED_DATE,
+ STAT_BINARY_TYPE_FETCHED_YEAR,
+ STAT_BINARY_TYPE_FETCHED_TIME,
+ STAT_BINARY_TYPE_FETCHED_DATETIME,
+ STAT_BINARY_TYPE_FETCHED_TIMESTAMP,
+ STAT_BINARY_TYPE_FETCHED_STRING,
+ STAT_BINARY_TYPE_FETCHED_BLOB,
+ STAT_BINARY_TYPE_FETCHED_ENUM,
+ STAT_BINARY_TYPE_FETCHED_SET,
+ STAT_BINARY_TYPE_FETCHED_GEOMETRY,
+ STAT_BINARY_TYPE_FETCHED_OTHER,
STAT_LAST /* Should be always the last */
} enum_mysqlnd_collected_stats;
DBG_INF("skipping result");
stmt->result->m.skip_result(stmt->result TSRMLS_CC);
}
- } while (mysqlnd_stmt_more_results(stmt) && mysqlnd_stmt_next_result(stmt));
+ } while (mysqlnd_stmt_more_results(stmt) && mysqlnd_stmt_next_result(stmt) == PASS);
/*
After this point we are allowed to free the result set,
as we have cleaned the line
/* {{{ mysqlnd_stats_values_names
*/
+
const MYSQLND_STRING mysqlnd_stats_values_names[STAT_LAST] =
{
{ STR_W_LEN("bytes_sent") },
{ STR_W_LEN("packets_received") },
{ STR_W_LEN("protocol_overhead_in") },
{ STR_W_LEN("protocol_overhead_out") },
+ { STR_W_LEN("bytes_received_ok_packet") },
+ { STR_W_LEN("bytes_received_eof_packet") },
+ { STR_W_LEN("bytes_received_rset_header_packet") },
+ { STR_W_LEN("bytes_received_rset_field_meta_packet") },
+ { STR_W_LEN("bytes_received_rset_row_packet") },
+ { STR_W_LEN("bytes_received_prepare_response_packet") },
+ { STR_W_LEN("bytes_received_change_user_packet") },
+ { STR_W_LEN("packets_sent_command") },
+ { STR_W_LEN("packets_received_ok") },
+ { STR_W_LEN("packets_received_eof") },
+ { STR_W_LEN("packets_received_rset_header") },
+ { STR_W_LEN("packets_received_rset_field_meta") },
+ { STR_W_LEN("packets_received_rset_row") },
+ { STR_W_LEN("packets_received_prepare_response") },
+ { STR_W_LEN("packets_received_change_user") },
{ STR_W_LEN("result_set_queries") },
{ STR_W_LEN("non_result_set_queries") },
{ STR_W_LEN("no_index_used") },
{ STR_W_LEN("mem_calloc_ammount") },
{ STR_W_LEN("mem_realloc_calloc") },
{ STR_W_LEN("mem_realloc_ammount") },
- { STR_W_LEN("mem_free_count") }
+ { STR_W_LEN("mem_free_count") },
+ { STR_W_LEN("proto_text_fetched_null") },
+ { STR_W_LEN("proto_text_fetched_bit") },
+ { STR_W_LEN("proto_text_fetched_tinyint") },
+ { STR_W_LEN("proto_text_fetched_short") },
+ { STR_W_LEN("proto_text_fetched_int24") },
+ { STR_W_LEN("proto_text_fetched_int") },
+ { STR_W_LEN("proto_text_fetched_bigint") },
+ { STR_W_LEN("proto_text_fetched_decimal") },
+ { STR_W_LEN("proto_text_fetched_float") },
+ { STR_W_LEN("proto_text_fetched_double") },
+ { STR_W_LEN("proto_text_fetched_date") },
+ { STR_W_LEN("proto_text_fetched_year") },
+ { STR_W_LEN("proto_text_fetched_time") },
+ { STR_W_LEN("proto_text_fetched_datetime") },
+ { STR_W_LEN("proto_text_fetched_timestamp") },
+ { STR_W_LEN("proto_text_fetched_string") },
+ { STR_W_LEN("proto_text_fetched_blob") },
+ { STR_W_LEN("proto_text_fetched_enum") },
+ { STR_W_LEN("proto_text_fetched_set") },
+ { STR_W_LEN("proto_text_fetched_geometry") },
+ { STR_W_LEN("proto_text_fetched_other") },
+ { STR_W_LEN("proto_binary_fetched_null") },
+ { STR_W_LEN("proto_binary_fetched_bit") },
+ { STR_W_LEN("proto_binary_fetched_tinyint") },
+ { STR_W_LEN("proto_binary_fetched_short") },
+ { STR_W_LEN("proto_binary_fetched_int24") },
+ { STR_W_LEN("proto_binary_fetched_int") },
+ { STR_W_LEN("proto_binary_fetched_bigint") },
+ { STR_W_LEN("proto_binary_fetched_decimal") },
+ { STR_W_LEN("proto_binary_fetched_float") },
+ { STR_W_LEN("proto_binary_fetched_double") },
+ { STR_W_LEN("proto_binary_fetched_date") },
+ { STR_W_LEN("proto_binary_fetched_year") },
+ { STR_W_LEN("proto_binary_fetched_time") },
+ { STR_W_LEN("proto_binary_fetched_datetime") },
+ { STR_W_LEN("proto_binary_fetched_timestamp") },
+ { STR_W_LEN("proto_binary_fetched_string") },
+ { STR_W_LEN("proto_binary_fetched_blob") },
+ { STR_W_LEN("proto_binary_fetched_enum") },
+ { STR_W_LEN("proto_binary_fetched_set") },
+ { STR_W_LEN("proto_binary_fetched_geometry") },
+ { STR_W_LEN("proto_binary_fetched_other") }
};
/* }}} */
#define MYSQLND_INC_GLOBAL_STATISTIC(statistic) \
{ \
- if (MYSQLND_G(collect_statistics)) { \
+ if (MYSQLND_G(collect_statistics) && statistic != STAT_LAST) { \
DBG_INF_FMT("Global stat increase [%s]", mysqlnd_stats_values_names[statistic]); \
tsrm_mutex_lock(mysqlnd_global_stats->LOCK_access); \
mysqlnd_global_stats->values[(statistic)]++; \
}\
}
-#define MYSQLND_INC_GLOBAL_STATISTIC2_W_VALUE(statistic1, value1, statistic2, value2) \
+#define MYSQLND_DEC_CONN_STATISTIC(conn_stats, statistic) \
{ \
- if (MYSQLND_G(collect_statistics)) { \
- DBG_INF_FMT("Global stats increase w value [%s] [%s]", mysqlnd_stats_values_names[statistic1], mysqlnd_stats_values_names[statistic2]); \
+ if (MYSQLND_G(collect_statistics) && statistic != STAT_LAST) { \
+ DBG_INF_FMT("Global&conn stat decrease [%s]", mysqlnd_stats_values_names[statistic]); \
tsrm_mutex_lock(mysqlnd_global_stats->LOCK_access); \
- mysqlnd_global_stats->values[(statistic1)] += (value1); \
- mysqlnd_global_stats->values[(statistic2)] += (value2); \
+ mysqlnd_global_stats->values[(statistic)]--; \
tsrm_mutex_unlock(mysqlnd_global_stats->LOCK_access); \
+ if ((conn_stats)) { \
+ ((MYSQLND_STATS *) conn_stats)->values[(statistic)]--; \
+ } \
}\
}
-#define MYSQLND_DEC_CONN_STATISTIC(conn_stats, statistic) \
+#define MYSQLND_INC_GLOBAL_STATISTIC_W_VALUE2(statistic1, value1, statistic2, value2) \
{ \
if (MYSQLND_G(collect_statistics)) { \
- DBG_INF_FMT("Global&conn stat decrease [%s]", mysqlnd_stats_values_names[statistic]); \
+ DBG_INF_FMT("Global stat increase [%s] [%s]", mysqlnd_stats_values_names[statistic1], mysqlnd_stats_values_names[statistic2]); \
+ uint64 v1 = (uint64) (value1); \
+ uint64 v2 = (uint64) (value2); \
+ \
tsrm_mutex_lock(mysqlnd_global_stats->LOCK_access); \
- mysqlnd_global_stats->values[(statistic)]--; \
+ if (statistic1 != STAT_LAST) mysqlnd_global_stats->values[(statistic1)]+= v1; \
+ if (statistic2 != STAT_LAST) mysqlnd_global_stats->values[(statistic2)]+= v2; \
tsrm_mutex_unlock(mysqlnd_global_stats->LOCK_access); \
- if ((conn_stats)) { \
- ((MYSQLND_STATS *) conn_stats)->values[(statistic)]--; \
- } \
}\
}
#define MYSQLND_INC_CONN_STATISTIC(conn_stats, statistic) \
{ \
- if (MYSQLND_G(collect_statistics)) { \
+ if (MYSQLND_G(collect_statistics) && statistic != STAT_LAST) { \
DBG_INF_FMT("Global&Conn stat increase [%s]", mysqlnd_stats_values_names[statistic]); \
tsrm_mutex_lock(mysqlnd_global_stats->LOCK_access); \
mysqlnd_global_stats->values[(statistic)]++; \
#define MYSQLND_INC_CONN_STATISTIC_W_VALUE(conn_stats, statistic, value) \
{ \
- if (MYSQLND_G(collect_statistics)) { \
+ if (MYSQLND_G(collect_statistics) && statistic != STAT_LAST) { \
uint64 v = (uint64) (value); \
DBG_INF_FMT("Global&Conn stat increase w value [%s]", mysqlnd_stats_values_names[statistic]); \
tsrm_mutex_lock(mysqlnd_global_stats->LOCK_access); \
}\
}
-#define MYSQLND_INC_CONN_STATISTIC_W_VALUE3(conn_stats, statistic1, value1, statistic2, value2, statistic3, value3) \
+#define MYSQLND_INC_CONN_STATISTIC_W_VALUE2(conn_stats, statistic1, value1, statistic2, value2) \
{ \
if (MYSQLND_G(collect_statistics)) { \
uint64 v1 = (uint64) (value1); \
uint64 v2 = (uint64) (value2); \
- uint64 v3 = (uint64) (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; \
+ if (statistic1 != STAT_LAST) mysqlnd_global_stats->values[(statistic1)]+= v1; \
+ if (statistic2 != STAT_LAST) mysqlnd_global_stats->values[(statistic2)]+= v2; \
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; \
+ } \
+ } \
+ }
+
+
+#define MYSQLND_INC_CONN_STATISTIC_W_VALUE3(conn_stats, statistic1, value1, statistic2, value2, statistic3, value3) \
+ { \
+ if (MYSQLND_G(collect_statistics)) { \
+ uint64 v1 = (uint64) (value1); \
+ uint64 v2 = (uint64) (value2); \
+ uint64 v3 = (uint64) (value3); \
+ \
+ tsrm_mutex_lock(mysqlnd_global_stats->LOCK_access); \
+ if (statistic1 != STAT_LAST) mysqlnd_global_stats->values[(statistic1)]+= v1; \
+ if (statistic2 != STAT_LAST) mysqlnd_global_stats->values[(statistic2)]+= v2; \
+ if (statistic3 != STAT_LAST) mysqlnd_global_stats->values[(statistic3)]+= v3; \
+ tsrm_mutex_unlock(mysqlnd_global_stats->LOCK_access); \
+ if ((conn_stats)) { \
+ if (statistic1 != STAT_LAST) ((MYSQLND_STATS *) conn_stats)->values[(statistic1)]+= v1; \
+ if (statistic2 != STAT_LAST) ((MYSQLND_STATS *) conn_stats)->values[(statistic2)]+= v2; \
+ if (statistic3 != STAT_LAST) ((MYSQLND_STATS *) conn_stats)->values[(statistic3)]+= v3; \
} \
} \
}
#define MYSQLND_INC_GLOBAL_STATISTIC(statistic) \
{ \
- if (MYSQLND_G(collect_statistics)) { \
+ if (MYSQLND_G(collect_statistics) && statistic != STAT_LAST) { \
DBG_INF_FMT("Global stat increase [%s]", mysqlnd_stats_values_names[statistic]); \
mysqlnd_global_stats->values[(statistic)]++; \
} \
}
-#define MYSQLND_INC_GLOBAL_STATISTIC2_W_VALUE(statistic1, value1, statistic2, value2) \
- { \
- if (MYSQLND_G(collect_statistics)) { \
- DBG_INF_FMT("Global stats increase w value [%s] [%s]", \
- mysqlnd_stats_values_names[statistic1], mysqlnd_stats_values_names[statistic2]); \
- mysqlnd_global_stats->values[(statistic1)] += (value1); \
- mysqlnd_global_stats->values[(statistic2)] += (value2); \
- }\
- }
-
#define MYSQLND_DEC_CONN_STATISTIC(conn_stats, statistic) \
{ \
- if (MYSQLND_G(collect_statistics)) { \
+ if (MYSQLND_G(collect_statistics) && statistic != STAT_LAST) { \
DBG_INF_FMT("Global&Conn stat decrease [%s]", mysqlnd_stats_values_names[statistic]); \
mysqlnd_global_stats->values[(statistic)]--; \
if ((conn_stats)) { \
} \
}
-#define MYSQLND_INC_CONN_STATISTIC(conn_stats, statistic) \
+#define MYSQLND_INC_GLOBAL_STATISTIC_W_VALUE2(statistic1, value1, statistic2, value2) \
{ \
if (MYSQLND_G(collect_statistics)) { \
+ DBG_INF_FMT("Global stat increase [%s] [%s]", mysqlnd_stats_values_names[statistic1], mysqlnd_stats_values_names[statistic2]); \
+ uint64 v1 = (uint64) (value1); \
+ uint64 v2 = (uint64) (value2); \
+ \
+ if (statistic1 != STAT_LAST) mysqlnd_global_stats->values[(statistic1)]+= v1; \
+ if (statistic2 != STAT_LAST) mysqlnd_global_stats->values[(statistic2)]+= v2; \
+ }\
+ }
+
+#define MYSQLND_INC_CONN_STATISTIC(conn_stats, statistic) \
+ { \
+ if (MYSQLND_G(collect_statistics) && statistic != STAT_LAST) { \
DBG_INF_FMT("Global&Conn stat increase [%s]", mysqlnd_stats_values_names[statistic]); \
mysqlnd_global_stats->values[(statistic)]++; \
if ((conn_stats)) { \
#define MYSQLND_INC_CONN_STATISTIC_W_VALUE(conn_stats, statistic, value) \
{ \
- uint64 v = (uint64) (value); \
- DBG_INF_FMT("Global&Conn stats increase w value [%s]", mysqlnd_stats_values_names[statistic]); \
- if (MYSQLND_G(collect_statistics)) { \
+ if (MYSQLND_G(collect_statistics) && statistic != STAT_LAST) { \
+ uint64 v = (uint64) (value); \
+ DBG_INF_FMT("Global&Conn stats increase w value [%s]", mysqlnd_stats_values_names[statistic]); \
mysqlnd_global_stats->values[(statistic)] += v; \
if ((conn_stats)) { \
((MYSQLND_STATS *) conn_stats)->values[(statistic)] += v; \
} \
}
+#define MYSQLND_INC_CONN_STATISTIC_W_VALUE2(conn_stats, statistic1, value1, statistic2, value2) \
+ { \
+ if (MYSQLND_G(collect_statistics)) { \
+ uint64 v1 = (uint64) (value1); \
+ uint64 v2 = (uint64) (value2); \
+ \
+ if (statistic1 != STAT_LAST) mysqlnd_global_stats->values[(statistic1)]+= v1; \
+ if (statistic2 != STAT_LAST) mysqlnd_global_stats->values[(statistic2)]+= v2; \
+ if ((conn_stats)) { \
+ ((MYSQLND_STATS *) conn_stats)->values[(statistic1)]+= v1; \
+ ((MYSQLND_STATS *) conn_stats)->values[(statistic2)]+= v2; \
+ } \
+ } \
+ }
+
#define MYSQLND_INC_CONN_STATISTIC_W_VALUE3(conn_stats, statistic1, value1, statistic2, value2, statistic3, value3) \
{ \
if (MYSQLND_G(collect_statistics)) { \
uint64 v2 = (uint64) (value2); \
uint64 v3 = (uint64) (value3); \
\
- mysqlnd_global_stats->values[(statistic1)]+= v1; \
- mysqlnd_global_stats->values[(statistic2)]+= v2; \
- mysqlnd_global_stats->values[(statistic3)]+= v3; \
+ if (statistic1 != STAT_LAST) mysqlnd_global_stats->values[(statistic1)]+= v1; \
+ if (statistic2 != STAT_LAST) mysqlnd_global_stats->values[(statistic2)]+= v2; \
+ if (statistic3 != STAT_LAST) 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 (statistic1 != STAT_LAST) ((MYSQLND_STATS *) conn_stats)->values[(statistic1)]+= v1; \
+ if (statistic2 != STAT_LAST) ((MYSQLND_STATS *) conn_stats)->values[(statistic2)]+= v2; \
+ if (statistic3 != STAT_LAST) ((MYSQLND_STATS *) conn_stats)->values[(statistic3)]+= v3; \
} \
} \
}
#define MYSQLND_DUMP_HEADER_N_BODY_FULL2
-#define PACKET_READ_HEADER_AND_BODY(packet, conn, buf, buf_size, packet_type) \
+#define PACKET_READ_HEADER_AND_BODY(packet, conn, buf, buf_size, packet_type_as_text, packet_type) \
{ \
if (FAIL == mysqlnd_read_header((conn), &((packet)->header) TSRMLS_CC)) {\
CONN_SET_STATE(conn, CONN_QUIT_SENT); \
SET_CLIENT_ERROR(conn->error_info, CR_SERVER_GONE_ERROR, UNKNOWN_SQLSTATE, mysqlnd_server_gone);\
php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", mysqlnd_server_gone); \
- DBG_ERR_FMT("Can't read %s's header", (packet_type)); \
+ DBG_ERR_FMT("Can't read %s's header", (packet_type_as_text)); \
DBG_RETURN(FAIL);\
}\
if ((buf_size) < (packet)->header.size) { \
CONN_SET_STATE(conn, CONN_QUIT_SENT); \
SET_CLIENT_ERROR(conn->error_info, CR_SERVER_GONE_ERROR, UNKNOWN_SQLSTATE, mysqlnd_server_gone);\
php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", mysqlnd_server_gone); \
- DBG_ERR_FMT("Empty %s packet body", (packet_type)); \
+ DBG_ERR_FMT("Empty %s packet body", (packet_type_as_text)); \
DBG_RETURN(FAIL);\
} \
+ MYSQLND_INC_CONN_STATISTIC_W_VALUE2(&conn->stats, packet_type_to_statistic_byte_count[packet_type], \
+ MYSQLND_HEADER_SIZE + (packet)->header.size, \
+ packet_type_to_statistic_packet_count[packet_type], \
+ 1); \
}
/* Used in mysqlnd_debug.c */
char * mysqlnd_read_header_name = "mysqlnd_read_header";
-char * mysqlnd_read_body_name = "mysqlnd_read_body";
+char * mysqlnd_read_body_name = "mysqlnd_read_body";
/* {{{ mysqlnd_command_to_text
/* }}} */
+
+static enum_mysqlnd_collected_stats packet_type_to_statistic_byte_count[PROT_LAST] =
+{
+ STAT_LAST,
+ STAT_LAST,
+ STAT_BYTES_RECEIVED_OK,
+ STAT_BYTES_RECEIVED_EOF,
+ STAT_LAST,
+ STAT_BYTES_RECEIVED_RSET_HEADER,
+ STAT_BYTES_RECEIVED_RSET_FIELD_META,
+ STAT_BYTES_RECEIVED_RSET_ROW,
+ STAT_BYTES_RECEIVED_PREPARE_RESPONSE,
+ STAT_BYTES_RECEIVED_CHANGE_USER,
+};
+
+static enum_mysqlnd_collected_stats packet_type_to_statistic_packet_count[PROT_LAST] =
+{
+ STAT_LAST,
+ STAT_LAST,
+ STAT_PACKETS_RECEIVED_OK,
+ STAT_PACKETS_RECEIVED_EOF,
+ STAT_LAST,
+ STAT_PACKETS_RECEIVED_RSET_HEADER,
+ STAT_PACKETS_RECEIVED_RSET_FIELD_META,
+ STAT_PACKETS_RECEIVED_RSET_ROW,
+ STAT_PACKETS_RECEIVED_PREPARE_RESPONSE,
+ STAT_PACKETS_RECEIVED_CHANGE_USER,
+};
+
+
/* {{{ php_mysqlnd_net_field_length
Get next field's length */
unsigned long php_mysqlnd_net_field_length(zend_uchar **packet)
while (left > MYSQLND_MAX_PACKET_SIZE) {
STORE_HEADER_SIZE(safe_storage, p);
int3store(p, MYSQLND_MAX_PACKET_SIZE);
- int1store(p + 3, net->packet_no);
+ int1store(p + 3, net->packet_no);
net->packet_no++;
ret = php_stream_write(net->stream, (char *)p, MYSQLND_MAX_PACKET_SIZE + MYSQLND_HEADER_SIZE);
RESTORE_HEADER_SIZE(p, safe_storage);
/* Even for zero size payload we have to send a packet */
STORE_HEADER_SIZE(safe_storage, p);
int3store(p, left);
- int1store(p + 3, net->packet_no);
+ int1store(p + 3, net->packet_no);
net->packet_no++;
ret = php_stream_write(net->stream, (char *)p, left + MYSQLND_HEADER_SIZE);
RESTORE_HEADER_SIZE(p, safe_storage);
DBG_ERR_FMT("Can't %u send bytes", count);
conn->state = CONN_QUIT_SENT;
SET_CLIENT_ERROR(conn->error_info, CR_SERVER_GONE_ERROR, UNKNOWN_SQLSTATE, mysqlnd_server_gone);
- }
+ }
MYSQLND_INC_CONN_STATISTIC_W_VALUE3(&conn->stats,
STAT_BYTES_SENT, count + packets_sent * MYSQLND_HEADER_SIZE,
setsockopt(((php_netstream_data_t*)net->stream->abstract)->socket,
IPPROTO_TCP, TCP_CORK, &corked, sizeof(corked));
- int1store(safe_storage + MYSQLND_HEADER_SIZE, command);
+ int1store(safe_storage + MYSQLND_HEADER_SIZE, command);
while (left > MYSQLND_MAX_PACKET_SIZE) {
size_t body_size = MYSQLND_MAX_PACKET_SIZE;
int3store(safe_storage, MYSQLND_MAX_PACKET_SIZE);
- int1store(safe_storage + 3, net->packet_no);
+ int1store(safe_storage + 3, net->packet_no);
net->packet_no++;
ret = php_stream_write(net->stream, (char *)safe_storage, header_len);
DBG_ENTER("php_mysqlnd_greet_read");
- PACKET_READ_HEADER_AND_BODY(packet, conn, buf, sizeof(buf), "greeting");
+ PACKET_READ_HEADER_AND_BODY(packet, conn, buf, sizeof(buf), "greeting", PROT_GREET_PACKET);
packet->protocol_version = uint1korr(p);
p++;
*/
if (packet->error_no == 1040) {
memcpy(packet->sqlstate, "08004", MYSQLND_SQLSTATE_LENGTH);
- }
+ }
DBG_RETURN(PASS);
}
if (p - buf < packet->header.size) {
/* scramble_buf is split into two parts */
memcpy(packet->scramble_buf + SCRAMBLE_LENGTH_323,
- p, SCRAMBLE_LENGTH - SCRAMBLE_LENGTH_323);
+ p, SCRAMBLE_LENGTH - SCRAMBLE_LENGTH_323);
} else {
packet->pre41 = TRUE;
}
DBG_ENTER("php_mysqlnd_ok_read");
- PACKET_READ_HEADER_AND_BODY(packet, conn, buf, sizeof(buf), "OK");
+ PACKET_READ_HEADER_AND_BODY(packet, conn, buf, sizeof(buf), "OK", PROT_OK_PACKET);
/* Should be always 0x0 or 0xFF for error */
packet->field_count = uint1korr(p);
DBG_ENTER("php_mysqlnd_eof_read");
- PACKET_READ_HEADER_AND_BODY(packet, conn, buf, sizeof(buf), "EOF");
+ PACKET_READ_HEADER_AND_BODY(packet, conn, buf, sizeof(buf), "EOF", PROT_EOF_PACKET);
/* Should be always 0xFE */
packet->field_count = uint1korr(p);
if (error_reporting) {
EG(error_reporting) = 0;
}
+
+ MYSQLND_INC_CONN_STATISTIC(&conn->stats, STAT_PACKETS_SENT_CMD);
#ifdef MYSQLND_DO_WIRE_CHECK_BEFORE_COMMAND
php_mysqlnd_consume_uneaten_data(conn, packet->command TSRMLS_CC);
DBG_ENTER("php_mysqlnd_rset_header_read");
- PACKET_READ_HEADER_AND_BODY(packet, conn, buf, sizeof(buf), "resultset header");
+ PACKET_READ_HEADER_AND_BODY(packet, conn, buf, sizeof(buf), "resultset header", PROT_RSET_HEADER_PACKET);
/*
Don't increment. First byte is 0xFF on error, but otherwise is starting byte
DBG_ENTER("php_mysqlnd_rset_field_read");
- PACKET_READ_HEADER_AND_BODY(packet, conn, buf, buf_len, "field");
+ PACKET_READ_HEADER_AND_BODY(packet, conn, buf, buf_len, "field", PROT_RSET_FLD_PACKET);
if (packet->skip_parsing) {
DBG_RETURN(PASS);
if (*null_ptr & bit) {
DBG_INF("It's null");
ZVAL_NULL(*current_field);
+ MYSQLND_INC_CONN_STATISTIC(&conn->stats, STAT_BINARY_TYPE_FETCHED_NULL);
} else {
enum_mysqlnd_field_types type = fields_metadata[i].type;
mysqlnd_ps_fetch_functions[type].func(*current_field, &fields_metadata[i],
0, &p, as_unicode TSRMLS_CC);
+
+ if (MYSQLND_G(collect_statistics)) {
+ enum_mysqlnd_collected_stats statistic;
+ switch (fields_metadata[i].type) {
+ case MYSQL_TYPE_DECIMAL: statistic = STAT_BINARY_TYPE_FETCHED_DECIMAL; break;
+ case MYSQL_TYPE_TINY: statistic = STAT_BINARY_TYPE_FETCHED_INT8; break;
+ case MYSQL_TYPE_SHORT: statistic = STAT_BINARY_TYPE_FETCHED_INT16; break;
+ case MYSQL_TYPE_LONG: statistic = STAT_BINARY_TYPE_FETCHED_INT32; break;
+ case MYSQL_TYPE_FLOAT: statistic = STAT_BINARY_TYPE_FETCHED_FLOAT; break;
+ case MYSQL_TYPE_DOUBLE: statistic = STAT_BINARY_TYPE_FETCHED_DOUBLE; break;
+ case MYSQL_TYPE_NULL: statistic = STAT_BINARY_TYPE_FETCHED_NULL; break;
+ case MYSQL_TYPE_TIMESTAMP: statistic = STAT_BINARY_TYPE_FETCHED_TIMESTAMP; break;
+ case MYSQL_TYPE_LONGLONG: statistic = STAT_BINARY_TYPE_FETCHED_INT64; break;
+ case MYSQL_TYPE_INT24: statistic = STAT_BINARY_TYPE_FETCHED_INT24; break;
+ case MYSQL_TYPE_DATE: statistic = STAT_BINARY_TYPE_FETCHED_DATE; break;
+ case MYSQL_TYPE_TIME: statistic = STAT_BINARY_TYPE_FETCHED_TIME; break;
+ case MYSQL_TYPE_DATETIME: statistic = STAT_BINARY_TYPE_FETCHED_DATETIME; break;
+ case MYSQL_TYPE_YEAR: statistic = STAT_BINARY_TYPE_FETCHED_YEAR; break;
+ case MYSQL_TYPE_NEWDATE: statistic = STAT_BINARY_TYPE_FETCHED_DATE; break;
+ case MYSQL_TYPE_VARCHAR: statistic = STAT_BINARY_TYPE_FETCHED_STRING; break;
+ case MYSQL_TYPE_BIT: statistic = STAT_BINARY_TYPE_FETCHED_BIT; break;
+ case MYSQL_TYPE_NEWDECIMAL: statistic = STAT_BINARY_TYPE_FETCHED_DECIMAL; break;
+ case MYSQL_TYPE_ENUM: statistic = STAT_BINARY_TYPE_FETCHED_ENUM; break;
+ case MYSQL_TYPE_SET: statistic = STAT_BINARY_TYPE_FETCHED_SET; break;
+ case MYSQL_TYPE_TINY_BLOB: statistic = STAT_BINARY_TYPE_FETCHED_BLOB; break;
+ case MYSQL_TYPE_MEDIUM_BLOB:statistic = STAT_BINARY_TYPE_FETCHED_BLOB; break;
+ case MYSQL_TYPE_LONG_BLOB: statistic = STAT_BINARY_TYPE_FETCHED_BLOB; break;
+ case MYSQL_TYPE_BLOB: statistic = STAT_BINARY_TYPE_FETCHED_BLOB; break;
+ case MYSQL_TYPE_VAR_STRING: statistic = STAT_BINARY_TYPE_FETCHED_STRING; break;
+ case MYSQL_TYPE_STRING: statistic = STAT_BINARY_TYPE_FETCHED_STRING; break;
+ case MYSQL_TYPE_GEOMETRY: statistic = STAT_BINARY_TYPE_FETCHED_GEOMETRY; break;
+ default: statistic = STAT_BINARY_TYPE_FETCHED_OTHER; break;
+ }
+ MYSQLND_INC_CONN_STATISTIC(&conn->stats, statistic);
+ }
}
if (!((bit<<=1) & 255)) {
bit = 1; /* to the following byte */
struct st_mysqlnd_perm_bind perm_bind =
mysqlnd_ps_fetch_functions[fields_metadata[i].type];
#endif
+ if (MYSQLND_G(collect_statistics)) {
+ enum_mysqlnd_collected_stats statistic;
+ switch (fields_metadata[i].type) {
+ case MYSQL_TYPE_DECIMAL: statistic = STAT_TEXT_TYPE_FETCHED_DECIMAL; break;
+ case MYSQL_TYPE_TINY: statistic = STAT_TEXT_TYPE_FETCHED_INT8; break;
+ case MYSQL_TYPE_SHORT: statistic = STAT_TEXT_TYPE_FETCHED_INT16; break;
+ case MYSQL_TYPE_LONG: statistic = STAT_TEXT_TYPE_FETCHED_INT32; break;
+ case MYSQL_TYPE_FLOAT: statistic = STAT_TEXT_TYPE_FETCHED_FLOAT; break;
+ case MYSQL_TYPE_DOUBLE: statistic = STAT_TEXT_TYPE_FETCHED_DOUBLE; break;
+ case MYSQL_TYPE_NULL: statistic = STAT_TEXT_TYPE_FETCHED_NULL; break;
+ case MYSQL_TYPE_TIMESTAMP: statistic = STAT_TEXT_TYPE_FETCHED_TIMESTAMP; break;
+ case MYSQL_TYPE_LONGLONG: statistic = STAT_TEXT_TYPE_FETCHED_INT64; break;
+ case MYSQL_TYPE_INT24: statistic = STAT_TEXT_TYPE_FETCHED_INT24; break;
+ case MYSQL_TYPE_DATE: statistic = STAT_TEXT_TYPE_FETCHED_DATE; break;
+ case MYSQL_TYPE_TIME: statistic = STAT_TEXT_TYPE_FETCHED_TIME; break;
+ case MYSQL_TYPE_DATETIME: statistic = STAT_TEXT_TYPE_FETCHED_DATETIME; break;
+ case MYSQL_TYPE_YEAR: statistic = STAT_TEXT_TYPE_FETCHED_YEAR; break;
+ case MYSQL_TYPE_NEWDATE: statistic = STAT_TEXT_TYPE_FETCHED_DATE; break;
+ case MYSQL_TYPE_VARCHAR: statistic = STAT_TEXT_TYPE_FETCHED_STRING; break;
+ case MYSQL_TYPE_BIT: statistic = STAT_TEXT_TYPE_FETCHED_BIT; break;
+ case MYSQL_TYPE_NEWDECIMAL: statistic = STAT_TEXT_TYPE_FETCHED_DECIMAL; break;
+ case MYSQL_TYPE_ENUM: statistic = STAT_TEXT_TYPE_FETCHED_ENUM; break;
+ case MYSQL_TYPE_SET: statistic = STAT_TEXT_TYPE_FETCHED_SET; break;
+ case MYSQL_TYPE_TINY_BLOB: statistic = STAT_TEXT_TYPE_FETCHED_BLOB; break;
+ case MYSQL_TYPE_MEDIUM_BLOB:statistic = STAT_TEXT_TYPE_FETCHED_BLOB; break;
+ case MYSQL_TYPE_LONG_BLOB: statistic = STAT_TEXT_TYPE_FETCHED_BLOB; break;
+ case MYSQL_TYPE_BLOB: statistic = STAT_TEXT_TYPE_FETCHED_BLOB; break;
+ case MYSQL_TYPE_VAR_STRING: statistic = STAT_TEXT_TYPE_FETCHED_STRING; break;
+ case MYSQL_TYPE_STRING: statistic = STAT_TEXT_TYPE_FETCHED_STRING; break;
+ case MYSQL_TYPE_GEOMETRY: statistic = STAT_TEXT_TYPE_FETCHED_GEOMETRY; break;
+ default: statistic = STAT_TEXT_TYPE_FETCHED_OTHER; break;
+ }
+ MYSQLND_INC_CONN_STATISTIC(&conn->stats, statistic);
+ }
#ifdef MYSQLND_STRING_TO_INT_CONVERSION
if (as_int && perm_bind.php_type == IS_LONG &&
if (Z_TYPE_P(*current_field) == IS_STRING) {
((mysqlnd_zval *) obj)->point_type = MYSQLND_POINTS_INT_BUFFER;
} else {
- ((mysqlnd_zval *) obj)->point_type = MYSQLND_POINTS_EXT_BUFFER;
+ ((mysqlnd_zval *) obj)->point_type = MYSQLND_POINTS_EXT_BUFFER;
}
}
#endif
if (FAIL == ret) {
goto end;
}
+ MYSQLND_INC_CONN_STATISTIC_W_VALUE2(&conn->stats, packet_type_to_statistic_byte_count[PROT_ROW_PACKET],
+ MYSQLND_HEADER_SIZE + packet->header.size,
+ packet_type_to_statistic_packet_count[PROT_ROW_PACKET],
+ 1);
/* packet->row_buffer->ptr is of size 'data_size + 1' */
packet->header.size = data_size;
DBG_ENTER("php_mysqlnd_stats_read");
- PACKET_READ_HEADER_AND_BODY(packet, conn, buf, sizeof(buf), "statistics");
+ PACKET_READ_HEADER_AND_BODY(packet, conn, buf, sizeof(buf), "statistics", PROT_STATS_PACKET);
packet->message = mnd_pemalloc(packet->header.size + 1, conn->persistent);
memcpy(packet->message, buf, packet->header.size);
DBG_ENTER("php_mysqlnd_prepare_read");
- PACKET_READ_HEADER_AND_BODY(packet, conn, buf, sizeof(buf), "prepare");
+ PACKET_READ_HEADER_AND_BODY(packet, conn, buf, sizeof(buf), "prepare", PROT_PREPARE_RESP_PACKET);
data_size = packet->header.size;
packet->error_code = uint1korr(p);
DBG_ENTER("php_mysqlnd_chg_user_read");
- PACKET_READ_HEADER_AND_BODY(packet, conn, buf, sizeof(buf), "change user response ");
+ PACKET_READ_HEADER_AND_BODY(packet, conn, buf, sizeof(buf), "change user response", PROT_CHG_USER_PACKET);
/*
Don't increment. First byte is 0xFF on error, but otherwise is starting byte