mysqlnd_statistics.h 7.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177
  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: Georg Richter <georg@mysql.com> |
  16. | Andrey Hristov <andrey@mysql.com> |
  17. | Ulf Wendel <uwendel@mysql.com> |
  18. +----------------------------------------------------------------------+
  19. */
  20. /* $Id$ */
  21. #ifndef MYSQLND_STATISTICS_H
  22. #define MYSQLND_STATISTICS_H
  23. PHPAPI extern MYSQLND_STATS * mysqlnd_global_stats;
  24. extern const MYSQLND_STRING mysqlnd_stats_values_names[];
  25. #ifdef ZTS
  26. #define MYSQLND_STATS_LOCK(stats) tsrm_mutex_lock((stats)->LOCK_access)
  27. #define MYSQLND_STATS_UNLOCK(stats) tsrm_mutex_unlock((stats)->LOCK_access)
  28. #else
  29. #define MYSQLND_STATS_LOCK(stats)
  30. #define MYSQLND_STATS_UNLOCK(stats)
  31. #endif
  32. #ifndef MYSQLND_CORE_STATISTICS_TRIGGERS_DISABLED
  33. #define MYSQLND_STAT_CALL_TRIGGER(s_array, statistic, val) \
  34. if ((s_array)->triggers[(statistic)] && (s_array)->in_trigger == FALSE) { \
  35. (s_array)->in_trigger = TRUE; \
  36. MYSQLND_STATS_UNLOCK((s_array)); \
  37. \
  38. (s_array)->triggers[(statistic)]((s_array), (statistic), (val) TSRMLS_CC); \
  39. \
  40. MYSQLND_STATS_LOCK((s_array)); \
  41. (s_array)->in_trigger = FALSE; \
  42. }
  43. #else
  44. #define MYSQLND_STAT_CALL_TRIGGER(s_array, statistic, val)
  45. #endif /* MYSQLND_CORE_STATISTICS_TRIGGERS_DISABLED */
  46. #define MYSQLND_UPDATE_VALUE_AND_CALL_TRIGGER(stats, statistic, value) \
  47. { \
  48. MYSQLND_STATS_LOCK(stats); \
  49. (stats)->values[(statistic)] += (value); \
  50. MYSQLND_STAT_CALL_TRIGGER((stats), (statistic), (value)); \
  51. MYSQLND_STATS_UNLOCK(_p_s); \
  52. }
  53. #define MYSQLND_DEC_STATISTIC(enabler, stats, statistic) \
  54. { \
  55. enum_mysqlnd_collected_stats _s = (statistic);\
  56. MYSQLND_STATS * _p_s = (MYSQLND_STATS *) (stats); \
  57. if ((enabler) && _p_s && _s != _p_s->count) { \
  58. MYSQLND_UPDATE_VALUE_AND_CALL_TRIGGER(_p_s, _s, -1); \
  59. }\
  60. }
  61. #define MYSQLND_INC_STATISTIC(enabler, stats, statistic) \
  62. { \
  63. enum_mysqlnd_collected_stats _s = (statistic);\
  64. MYSQLND_STATS * _p_s = (MYSQLND_STATS *) (stats); \
  65. if ((enabler) && _p_s && _s != _p_s->count) { \
  66. MYSQLND_UPDATE_VALUE_AND_CALL_TRIGGER(_p_s, _s, 1); \
  67. }\
  68. }
  69. #define MYSQLND_INC_STATISTIC_W_VALUE(enabler, stats, statistic, value) \
  70. { \
  71. enum_mysqlnd_collected_stats _s = (statistic);\
  72. MYSQLND_STATS * _p_s = (MYSQLND_STATS *) (stats); \
  73. if ((enabler) && _p_s && _s != _p_s->count) { \
  74. uint64_t v = (uint64_t) (value); \
  75. MYSQLND_UPDATE_VALUE_AND_CALL_TRIGGER(_p_s, _s, v); \
  76. }\
  77. }
  78. #define MYSQLND_INC_STATISTIC_W_VALUE2(enabler, stats, statistic1, value1, statistic2, value2) \
  79. { \
  80. MYSQLND_STATS * _p_s = (MYSQLND_STATS *) (stats); \
  81. if ((enabler) && _p_s) { \
  82. uint64_t v1 = (uint64_t) (value1); \
  83. uint64_t v2 = (uint64_t) (value2); \
  84. enum_mysqlnd_collected_stats _s1 = (statistic1);\
  85. enum_mysqlnd_collected_stats _s2 = (statistic2);\
  86. if (_s1 != _p_s->count) MYSQLND_UPDATE_VALUE_AND_CALL_TRIGGER(_p_s, _s1, v1); \
  87. if (_s2 != _p_s->count) MYSQLND_UPDATE_VALUE_AND_CALL_TRIGGER(_p_s, _s2, v2); \
  88. }\
  89. }
  90. #define MYSQLND_INC_STATISTIC_W_VALUE3(enabler, stats, statistic1, value1, statistic2, value2, statistic3, value3) \
  91. { \
  92. MYSQLND_STATS * _p_s = (MYSQLND_STATS *) (stats); \
  93. if ((enabler) && _p_s) { \
  94. uint64_t v1 = (uint64_t) (value1); \
  95. uint64_t v2 = (uint64_t) (value2); \
  96. uint64_t v3 = (uint64_t) (value3); \
  97. enum_mysqlnd_collected_stats _s1 = (statistic1);\
  98. enum_mysqlnd_collected_stats _s2 = (statistic2);\
  99. enum_mysqlnd_collected_stats _s3 = (statistic3);\
  100. if (_s1 != _p_s->count) MYSQLND_UPDATE_VALUE_AND_CALL_TRIGGER(_p_s, _s1, v1); \
  101. if (_s2 != _p_s->count) MYSQLND_UPDATE_VALUE_AND_CALL_TRIGGER(_p_s, _s2, v2); \
  102. if (_s3 != _p_s->count) MYSQLND_UPDATE_VALUE_AND_CALL_TRIGGER(_p_s, _s3, v3); \
  103. }\
  104. }
  105. #ifndef MYSQLND_CORE_STATISTICS_DISABLED
  106. #define MYSQLND_INC_GLOBAL_STATISTIC(statistic) \
  107. MYSQLND_INC_STATISTIC(MYSQLND_G(collect_statistics), mysqlnd_global_stats, (statistic))
  108. #define MYSQLND_DEC_CONN_STATISTIC(conn_stats, statistic) \
  109. MYSQLND_DEC_STATISTIC(MYSQLND_G(collect_statistics), mysqlnd_global_stats, (statistic))
  110. #define MYSQLND_INC_GLOBAL_STATISTIC_W_VALUE2(statistic1, value1, statistic2, value2) \
  111. MYSQLND_INC_STATISTIC_W_VALUE2(MYSQLND_G(collect_statistics), mysqlnd_global_stats, (statistic1), (value1), (statistic2), (value2))
  112. #define MYSQLND_INC_CONN_STATISTIC(conn_stats, statistic) \
  113. MYSQLND_INC_STATISTIC(MYSQLND_G(collect_statistics), mysqlnd_global_stats, (statistic)); \
  114. MYSQLND_INC_STATISTIC(MYSQLND_G(collect_statistics), (conn_stats), (statistic));
  115. #define MYSQLND_INC_CONN_STATISTIC_W_VALUE(conn_stats, statistic, value) \
  116. MYSQLND_INC_STATISTIC_W_VALUE(MYSQLND_G(collect_statistics), mysqlnd_global_stats, (statistic), (value)); \
  117. MYSQLND_INC_STATISTIC_W_VALUE(MYSQLND_G(collect_statistics), (conn_stats), (statistic), (value));
  118. #define MYSQLND_INC_CONN_STATISTIC_W_VALUE2(conn_stats, statistic1, value1, statistic2, value2) \
  119. MYSQLND_INC_STATISTIC_W_VALUE2(MYSQLND_G(collect_statistics), mysqlnd_global_stats, (statistic1), (value1), (statistic2), (value2)); \
  120. MYSQLND_INC_STATISTIC_W_VALUE2(MYSQLND_G(collect_statistics), (conn_stats), (statistic1), (value1), (statistic2), (value2));
  121. #define MYSQLND_INC_CONN_STATISTIC_W_VALUE3(conn_stats, statistic1, value1, statistic2, value2, statistic3, value3) \
  122. MYSQLND_INC_STATISTIC_W_VALUE3(MYSQLND_G(collect_statistics), mysqlnd_global_stats, (statistic1), (value1), (statistic2), (value2), (statistic3), (value3)); \
  123. MYSQLND_INC_STATISTIC_W_VALUE3(MYSQLND_G(collect_statistics), (conn_stats), (statistic1), (value1), (statistic2), (value2), (statistic3), (value3));
  124. #else
  125. #define MYSQLND_INC_GLOBAL_STATISTIC(statistic)
  126. #define MYSQLND_DEC_CONN_STATISTIC(conn_stats, statistic)
  127. #define MYSQLND_INC_GLOBAL_STATISTIC_W_VALUE2(statistic1, value1, statistic2, value2)
  128. #define MYSQLND_INC_CONN_STATISTIC(conn_stats, statistic)
  129. #define MYSQLND_INC_CONN_STATISTIC_W_VALUE(conn_stats, statistic, value)
  130. #define MYSQLND_INC_CONN_STATISTIC_W_VALUE2(conn_stats, statistic1, value1, statistic2, value2)
  131. #define MYSQLND_INC_CONN_STATISTIC_W_VALUE3(conn_stats, statistic1, value1, statistic2, value2, statistic3, value3)
  132. #endif /* MYSQLND_CORE_STATISTICS_DISABLED */
  133. PHPAPI void mysqlnd_fill_stats_hash(const MYSQLND_STATS * const stats, const MYSQLND_STRING * names, zval *return_value TSRMLS_DC ZEND_FILE_LINE_DC);
  134. PHPAPI void mysqlnd_stats_init(MYSQLND_STATS ** stats, size_t statistic_count);
  135. PHPAPI void mysqlnd_stats_end(MYSQLND_STATS * stats);
  136. PHPAPI mysqlnd_stat_trigger mysqlnd_stats_set_trigger(MYSQLND_STATS * const stats, enum_mysqlnd_collected_stats stat, mysqlnd_stat_trigger trigger TSRMLS_DC);
  137. PHPAPI mysqlnd_stat_trigger mysqlnd_stats_reset_triggers(MYSQLND_STATS * const stats TSRMLS_DC);
  138. #endif /* MYSQLND_STATISTICS_H */
  139. /*
  140. * Local variables:
  141. * tab-width: 4
  142. * c-basic-offset: 4
  143. * End:
  144. * vim600: noet sw=4 ts=4 fdm=marker
  145. * vim<600: noet sw=4 ts=4
  146. */