Return to mysqlnd_statistics.h CVS log | Up to [ELWIX - Embedded LightWeight unIX -] / embedaddon / php / ext / mysqlnd |
1.1 ! misho 1: /* ! 2: +----------------------------------------------------------------------+ ! 3: | PHP Version 5 | ! 4: +----------------------------------------------------------------------+ ! 5: | Copyright (c) 2006-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: | Authors: Georg Richter <georg@mysql.com> | ! 16: | Andrey Hristov <andrey@mysql.com> | ! 17: | Ulf Wendel <uwendel@mysql.com> | ! 18: +----------------------------------------------------------------------+ ! 19: */ ! 20: ! 21: /* $Id: mysqlnd_statistics.h 321634 2012-01-01 13:15:04Z felipe $ */ ! 22: ! 23: #ifndef MYSQLND_STATISTICS_H ! 24: #define MYSQLND_STATISTICS_H ! 25: ! 26: ! 27: PHPAPI extern MYSQLND_STATS * mysqlnd_global_stats; ! 28: ! 29: typedef struct st_mysqlnd_string ! 30: { ! 31: char *s; ! 32: size_t l; ! 33: } MYSQLND_STRING; ! 34: ! 35: extern const MYSQLND_STRING mysqlnd_stats_values_names[]; ! 36: ! 37: #ifdef ZTS ! 38: #define MYSQLND_STATS_LOCK(stats) tsrm_mutex_lock((stats)->LOCK_access) ! 39: #define MYSQLND_STATS_UNLOCK(stats) tsrm_mutex_unlock((stats)->LOCK_access) ! 40: #else ! 41: #define MYSQLND_STATS_LOCK(stats) ! 42: #define MYSQLND_STATS_UNLOCK(stats) ! 43: #endif ! 44: ! 45: #ifndef MYSQLND_CORE_STATISTICS_TRIGGERS_DISABLED ! 46: #define MYSQLND_STAT_CALL_TRIGGER(s_array, statistic, val) \ ! 47: if ((s_array)->triggers[(statistic)] && (s_array)->in_trigger == FALSE) { \ ! 48: (s_array)->in_trigger = TRUE; \ ! 49: MYSQLND_STATS_UNLOCK((s_array)); \ ! 50: \ ! 51: (s_array)->triggers[(statistic)]((s_array), (statistic), (val) TSRMLS_CC); \ ! 52: \ ! 53: MYSQLND_STATS_LOCK((s_array)); \ ! 54: (s_array)->in_trigger = FALSE; \ ! 55: } ! 56: #else ! 57: #define MYSQLND_STAT_CALL_TRIGGER(s_array, statistic, val) ! 58: #endif /* MYSQLND_CORE_STATISTICS_TRIGGERS_DISABLED */ ! 59: ! 60: #define MYSQLND_UPDATE_VALUE_AND_CALL_TRIGGER(stats, statistic, value) \ ! 61: { \ ! 62: MYSQLND_STATS_LOCK(stats); \ ! 63: (stats)->values[(statistic)] += (value); \ ! 64: MYSQLND_STAT_CALL_TRIGGER((stats), (statistic), (value)); \ ! 65: MYSQLND_STATS_UNLOCK(_p_s); \ ! 66: } ! 67: ! 68: #define MYSQLND_DEC_STATISTIC(enabler, stats, statistic) \ ! 69: { \ ! 70: enum_mysqlnd_collected_stats _s = (statistic);\ ! 71: MYSQLND_STATS * _p_s = (MYSQLND_STATS *) (stats); \ ! 72: if ((enabler) && _p_s && _s != _p_s->count) { \ ! 73: MYSQLND_UPDATE_VALUE_AND_CALL_TRIGGER(_p_s, _s, -1); \ ! 74: }\ ! 75: } ! 76: ! 77: #define MYSQLND_INC_STATISTIC(enabler, stats, statistic) \ ! 78: { \ ! 79: enum_mysqlnd_collected_stats _s = (statistic);\ ! 80: MYSQLND_STATS * _p_s = (MYSQLND_STATS *) (stats); \ ! 81: if ((enabler) && _p_s && _s != _p_s->count) { \ ! 82: MYSQLND_UPDATE_VALUE_AND_CALL_TRIGGER(_p_s, _s, 1); \ ! 83: }\ ! 84: } ! 85: ! 86: #define MYSQLND_INC_STATISTIC_W_VALUE(enabler, stats, statistic, value) \ ! 87: { \ ! 88: enum_mysqlnd_collected_stats _s = (statistic);\ ! 89: MYSQLND_STATS * _p_s = (MYSQLND_STATS *) (stats); \ ! 90: if ((enabler) && _p_s && _s != _p_s->count) { \ ! 91: uint64_t v = (uint64_t) (value); \ ! 92: MYSQLND_UPDATE_VALUE_AND_CALL_TRIGGER(_p_s, _s, v); \ ! 93: }\ ! 94: } ! 95: ! 96: #define MYSQLND_INC_STATISTIC_W_VALUE2(enabler, stats, statistic1, value1, statistic2, value2) \ ! 97: { \ ! 98: MYSQLND_STATS * _p_s = (MYSQLND_STATS *) (stats); \ ! 99: if ((enabler) && _p_s) { \ ! 100: uint64_t v1 = (uint64_t) (value1); \ ! 101: uint64_t v2 = (uint64_t) (value2); \ ! 102: enum_mysqlnd_collected_stats _s1 = (statistic1);\ ! 103: enum_mysqlnd_collected_stats _s2 = (statistic2);\ ! 104: if (_s1 != _p_s->count) MYSQLND_UPDATE_VALUE_AND_CALL_TRIGGER(_p_s, _s1, v1); \ ! 105: if (_s2 != _p_s->count) MYSQLND_UPDATE_VALUE_AND_CALL_TRIGGER(_p_s, _s2, v2); \ ! 106: }\ ! 107: } ! 108: ! 109: #define MYSQLND_INC_STATISTIC_W_VALUE3(enabler, stats, statistic1, value1, statistic2, value2, statistic3, value3) \ ! 110: { \ ! 111: MYSQLND_STATS * _p_s = (MYSQLND_STATS *) (stats); \ ! 112: if ((enabler) && _p_s) { \ ! 113: uint64_t v1 = (uint64_t) (value1); \ ! 114: uint64_t v2 = (uint64_t) (value2); \ ! 115: uint64_t v3 = (uint64_t) (value3); \ ! 116: enum_mysqlnd_collected_stats _s1 = (statistic1);\ ! 117: enum_mysqlnd_collected_stats _s2 = (statistic2);\ ! 118: enum_mysqlnd_collected_stats _s3 = (statistic3);\ ! 119: if (_s1 != _p_s->count) MYSQLND_UPDATE_VALUE_AND_CALL_TRIGGER(_p_s, _s1, v1); \ ! 120: if (_s2 != _p_s->count) MYSQLND_UPDATE_VALUE_AND_CALL_TRIGGER(_p_s, _s2, v2); \ ! 121: if (_s3 != _p_s->count) MYSQLND_UPDATE_VALUE_AND_CALL_TRIGGER(_p_s, _s3, v3); \ ! 122: }\ ! 123: } ! 124: ! 125: ! 126: ! 127: #ifndef MYSQLND_CORE_STATISTICS_DISABLED ! 128: ! 129: #define MYSQLND_INC_GLOBAL_STATISTIC(statistic) \ ! 130: MYSQLND_INC_STATISTIC(MYSQLND_G(collect_statistics), mysqlnd_global_stats, (statistic)) ! 131: ! 132: #define MYSQLND_DEC_CONN_STATISTIC(conn_stats, statistic) \ ! 133: MYSQLND_DEC_STATISTIC(MYSQLND_G(collect_statistics), mysqlnd_global_stats, (statistic)) ! 134: ! 135: #define MYSQLND_INC_GLOBAL_STATISTIC_W_VALUE2(statistic1, value1, statistic2, value2) \ ! 136: MYSQLND_INC_STATISTIC_W_VALUE2(MYSQLND_G(collect_statistics), mysqlnd_global_stats, (statistic1), (value1), (statistic2), (value2)) ! 137: ! 138: #define MYSQLND_INC_CONN_STATISTIC(conn_stats, statistic) \ ! 139: MYSQLND_INC_STATISTIC(MYSQLND_G(collect_statistics), mysqlnd_global_stats, (statistic)); \ ! 140: MYSQLND_INC_STATISTIC(MYSQLND_G(collect_statistics), (conn_stats), (statistic)); ! 141: ! 142: #define MYSQLND_INC_CONN_STATISTIC_W_VALUE(conn_stats, statistic, value) \ ! 143: MYSQLND_INC_STATISTIC_W_VALUE(MYSQLND_G(collect_statistics), mysqlnd_global_stats, (statistic), (value)); \ ! 144: MYSQLND_INC_STATISTIC_W_VALUE(MYSQLND_G(collect_statistics), (conn_stats), (statistic), (value)); ! 145: ! 146: #define MYSQLND_INC_CONN_STATISTIC_W_VALUE2(conn_stats, statistic1, value1, statistic2, value2) \ ! 147: MYSQLND_INC_STATISTIC_W_VALUE2(MYSQLND_G(collect_statistics), mysqlnd_global_stats, (statistic1), (value1), (statistic2), (value2)); \ ! 148: MYSQLND_INC_STATISTIC_W_VALUE2(MYSQLND_G(collect_statistics), (conn_stats), (statistic1), (value1), (statistic2), (value2)); ! 149: ! 150: #define MYSQLND_INC_CONN_STATISTIC_W_VALUE3(conn_stats, statistic1, value1, statistic2, value2, statistic3, value3) \ ! 151: MYSQLND_INC_STATISTIC_W_VALUE3(MYSQLND_G(collect_statistics), mysqlnd_global_stats, (statistic1), (value1), (statistic2), (value2), (statistic3), (value3)); \ ! 152: MYSQLND_INC_STATISTIC_W_VALUE3(MYSQLND_G(collect_statistics), (conn_stats), (statistic1), (value1), (statistic2), (value2), (statistic3), (value3)); ! 153: ! 154: #else ! 155: ! 156: #define MYSQLND_INC_GLOBAL_STATISTIC(statistic) ! 157: #define MYSQLND_DEC_CONN_STATISTIC(conn_stats, statistic) ! 158: #define MYSQLND_INC_GLOBAL_STATISTIC_W_VALUE2(statistic1, value1, statistic2, value2) ! 159: #define MYSQLND_INC_CONN_STATISTIC(conn_stats, statistic) ! 160: #define MYSQLND_INC_CONN_STATISTIC_W_VALUE(conn_stats, statistic, value) ! 161: #define MYSQLND_INC_CONN_STATISTIC_W_VALUE2(conn_stats, statistic1, value1, statistic2, value2) ! 162: #define MYSQLND_INC_CONN_STATISTIC_W_VALUE3(conn_stats, statistic1, value1, statistic2, value2, statistic3, value3) ! 163: ! 164: #endif /* MYSQLND_CORE_STATISTICS_DISABLED */ ! 165: ! 166: PHPAPI void mysqlnd_fill_stats_hash(const MYSQLND_STATS * const stats, const MYSQLND_STRING * names, zval *return_value TSRMLS_DC ZEND_FILE_LINE_DC); ! 167: ! 168: PHPAPI void mysqlnd_stats_init(MYSQLND_STATS ** stats, size_t statistic_count); ! 169: PHPAPI void mysqlnd_stats_end(MYSQLND_STATS * stats); ! 170: ! 171: PHPAPI mysqlnd_stat_trigger mysqlnd_stats_set_trigger(MYSQLND_STATS * const stats, enum_mysqlnd_collected_stats stat, mysqlnd_stat_trigger trigger TSRMLS_DC); ! 172: PHPAPI mysqlnd_stat_trigger mysqlnd_stats_reset_triggers(MYSQLND_STATS * const stats TSRMLS_DC); ! 173: ! 174: #endif /* MYSQLND_STATISTICS_H */ ! 175: ! 176: /* ! 177: * Local variables: ! 178: * tab-width: 4 ! 179: * c-basic-offset: 4 ! 180: * End: ! 181: * vim600: noet sw=4 ts=4 fdm=marker ! 182: * vim<600: noet sw=4 ts=4 ! 183: */