mysqlnd_statistics.h 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  1. /*
  2. +----------------------------------------------------------------------+
  3. | PHP Version 7 |
  4. +----------------------------------------------------------------------+
  5. | Copyright (c) 2006-2018 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@php.net> |
  16. | Ulf Wendel <uw@php.net> |
  17. +----------------------------------------------------------------------+
  18. */
  19. #ifndef MYSQLND_STATISTICS_H
  20. #define MYSQLND_STATISTICS_H
  21. #ifdef ZTS
  22. #define MYSQLND_STATS_LOCK(stats) tsrm_mutex_lock((stats)->LOCK_access)
  23. #define MYSQLND_STATS_UNLOCK(stats) tsrm_mutex_unlock((stats)->LOCK_access)
  24. #else
  25. #define MYSQLND_STATS_LOCK(stats)
  26. #define MYSQLND_STATS_UNLOCK(stats)
  27. #endif
  28. #ifndef MYSQLND_CORE_STATISTICS_TRIGGERS_DISABLED
  29. #define MYSQLND_STAT_CALL_TRIGGER(s_array, statistic, val) \
  30. if ((s_array)->triggers[(statistic)] && (s_array)->in_trigger == FALSE) { \
  31. (s_array)->in_trigger = TRUE; \
  32. MYSQLND_STATS_UNLOCK((s_array)); \
  33. \
  34. (s_array)->triggers[(statistic)]((s_array), (statistic), (val)); \
  35. \
  36. MYSQLND_STATS_LOCK((s_array)); \
  37. (s_array)->in_trigger = FALSE; \
  38. }
  39. #else
  40. #define MYSQLND_STAT_CALL_TRIGGER(s_array, statistic, val)
  41. #endif /* MYSQLND_CORE_STATISTICS_TRIGGERS_DISABLED */
  42. #define MYSQLND_UPDATE_VALUE_AND_CALL_TRIGGER(stats, statistic, value) \
  43. { \
  44. MYSQLND_STATS_LOCK(stats); \
  45. (stats)->values[(statistic)] += (value); \
  46. MYSQLND_STAT_CALL_TRIGGER((stats), (statistic), (value)); \
  47. MYSQLND_STATS_UNLOCK(_p_s); \
  48. }
  49. #define MYSQLND_DEC_STATISTIC(enabler, stats, statistic) \
  50. { \
  51. enum_mysqlnd_collected_stats _s = (statistic);\
  52. MYSQLND_STATS * _p_s = (MYSQLND_STATS *) (stats); \
  53. if ((enabler) && _p_s && _s != _p_s->count) { \
  54. MYSQLND_UPDATE_VALUE_AND_CALL_TRIGGER(_p_s, _s, -1); \
  55. }\
  56. }
  57. #define MYSQLND_INC_STATISTIC(enabler, stats, statistic) \
  58. { \
  59. enum_mysqlnd_collected_stats _s = (statistic);\
  60. MYSQLND_STATS * _p_s = (MYSQLND_STATS *) (stats); \
  61. if ((enabler) && _p_s && _s != _p_s->count) { \
  62. MYSQLND_UPDATE_VALUE_AND_CALL_TRIGGER(_p_s, _s, 1); \
  63. }\
  64. }
  65. #define MYSQLND_INC_STATISTIC_W_VALUE(enabler, stats, statistic, value) \
  66. { \
  67. enum_mysqlnd_collected_stats _s = (statistic);\
  68. MYSQLND_STATS * _p_s = (MYSQLND_STATS *) (stats); \
  69. if ((enabler) && _p_s && _s != _p_s->count) { \
  70. uint64_t v = (uint64_t) (value); \
  71. MYSQLND_UPDATE_VALUE_AND_CALL_TRIGGER(_p_s, _s, v); \
  72. }\
  73. }
  74. #define MYSQLND_INC_STATISTIC_W_VALUE2(enabler, stats, statistic1, value1, statistic2, value2) \
  75. { \
  76. MYSQLND_STATS * _p_s = (MYSQLND_STATS *) (stats); \
  77. if ((enabler) && _p_s) { \
  78. uint64_t v1 = (uint64_t) (value1); \
  79. uint64_t v2 = (uint64_t) (value2); \
  80. enum_mysqlnd_collected_stats _s1 = (statistic1);\
  81. enum_mysqlnd_collected_stats _s2 = (statistic2);\
  82. if (_s1 != _p_s->count) MYSQLND_UPDATE_VALUE_AND_CALL_TRIGGER(_p_s, _s1, v1); \
  83. if (_s2 != _p_s->count) MYSQLND_UPDATE_VALUE_AND_CALL_TRIGGER(_p_s, _s2, v2); \
  84. }\
  85. }
  86. #define MYSQLND_INC_STATISTIC_W_VALUE3(enabler, stats, statistic1, value1, statistic2, value2, statistic3, value3) \
  87. { \
  88. MYSQLND_STATS * _p_s = (MYSQLND_STATS *) (stats); \
  89. if ((enabler) && _p_s) { \
  90. uint64_t v1 = (uint64_t) (value1); \
  91. uint64_t v2 = (uint64_t) (value2); \
  92. uint64_t v3 = (uint64_t) (value3); \
  93. enum_mysqlnd_collected_stats _s1 = (statistic1);\
  94. enum_mysqlnd_collected_stats _s2 = (statistic2);\
  95. enum_mysqlnd_collected_stats _s3 = (statistic3);\
  96. if (_s1 != _p_s->count) MYSQLND_UPDATE_VALUE_AND_CALL_TRIGGER(_p_s, _s1, v1); \
  97. if (_s2 != _p_s->count) MYSQLND_UPDATE_VALUE_AND_CALL_TRIGGER(_p_s, _s2, v2); \
  98. if (_s3 != _p_s->count) MYSQLND_UPDATE_VALUE_AND_CALL_TRIGGER(_p_s, _s3, v3); \
  99. }\
  100. }
  101. PHPAPI void mysqlnd_stats_init(MYSQLND_STATS ** stats, const size_t statistic_count, const zend_bool persistent);
  102. PHPAPI void mysqlnd_stats_end(MYSQLND_STATS * stats, const zend_bool persistent);
  103. PHPAPI void mysqlnd_fill_stats_hash(const MYSQLND_STATS * const stats, const MYSQLND_STRING * names, zval *return_value ZEND_FILE_LINE_DC);
  104. PHPAPI mysqlnd_stat_trigger mysqlnd_stats_set_trigger(MYSQLND_STATS * const stats, enum_mysqlnd_collected_stats stat, mysqlnd_stat_trigger trigger);
  105. PHPAPI mysqlnd_stat_trigger mysqlnd_stats_reset_triggers(MYSQLND_STATS * const stats);
  106. #endif /* MYSQLND_STATISTICS_H */
  107. /*
  108. * Local variables:
  109. * tab-width: 4
  110. * c-basic-offset: 4
  111. * End:
  112. * vim600: noet sw=4 ts=4 fdm=marker
  113. * vim<600: noet sw=4 ts=4
  114. */