mysqli_driver.c 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165
  1. /*
  2. +----------------------------------------------------------------------+
  3. | PHP Version 7 |
  4. +----------------------------------------------------------------------+
  5. | Copyright (c) 1997-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. | Author: Georg Richter <georg@php.net> |
  16. +----------------------------------------------------------------------+
  17. */
  18. #ifdef HAVE_CONFIG_H
  19. #include "config.h"
  20. #endif
  21. #include <signal.h>
  22. #include "php.h"
  23. #include "php_ini.h"
  24. #include "ext/standard/info.h"
  25. #include "php_mysqli_structs.h"
  26. #include "zend_exceptions.h"
  27. #include "mysqli_fe.h"
  28. #define MAP_PROPERTY_MYG_BOOL_READ(name, value) \
  29. static zval *name(mysqli_object *obj, zval *retval) \
  30. { \
  31. ZVAL_BOOL(retval, MyG(value)); \
  32. return retval; \
  33. } \
  34. #define MAP_PROPERTY_MYG_BOOL_WRITE(name, value) \
  35. static int name(mysqli_object *obj, zval *value) \
  36. { \
  37. MyG(value) = Z_LVAL_P(value) > 0; \
  38. return SUCCESS; \
  39. } \
  40. #define MAP_PROPERTY_MYG_LONG_READ(name, value) \
  41. static zval *name(mysqli_object *obj, zval *retval) \
  42. { \
  43. ZVAL_LONG(retval, MyG(value)); \
  44. return retval; \
  45. } \
  46. #define MAP_PROPERTY_MYG_LONG_WRITE(name, value) \
  47. static int name(mysqli_object *obj, zval *value) \
  48. { \
  49. MyG(value) = Z_LVAL_P(value); \
  50. return SUCCESS; \
  51. } \
  52. #define MAP_PROPERTY_MYG_STRING_READ(name, value) \
  53. static zval *name(mysqli_object *obj, zval *retval) \
  54. { \
  55. ZVAL_STRING(retval, MyG(value)); \
  56. return retval; \
  57. } \
  58. #define MAP_PROPERTY_MYG_STRING_WRITE(name, value) \
  59. static int name(mysqli_object *obj, zval *value) \
  60. { \
  61. MyG(value) = Z_STRVAL_P(value); \
  62. return SUCCESS; \
  63. } \
  64. /* {{{ property driver_report_write */
  65. static int driver_report_write(mysqli_object *obj, zval *value)
  66. {
  67. MyG(report_mode) = Z_LVAL_P(value);
  68. /*FIXME*/
  69. /* zend_replace_error_handling(MyG(report_mode) & MYSQLI_REPORT_STRICT ? EH_THROW : EH_NORMAL, NULL, NULL); */
  70. return SUCCESS;
  71. }
  72. /* }}} */
  73. /* {{{ property driver_embedded_read */
  74. static zval *driver_embedded_read(mysqli_object *obj, zval *retval)
  75. {
  76. #ifdef HAVE_EMBEDDED_MYSQLI
  77. ZVAL_TRUE(retval);
  78. #else
  79. ZVAL_FALSE(retval);
  80. #endif
  81. return retval;
  82. }
  83. /* }}} */
  84. /* {{{ property driver_client_version_read */
  85. static zval *driver_client_version_read(mysqli_object *obj, zval *retval)
  86. {
  87. ZVAL_LONG(retval, mysql_get_client_version());
  88. return retval;
  89. }
  90. /* }}} */
  91. /* {{{ property driver_client_info_read */
  92. static zval *driver_client_info_read(mysqli_object *obj, zval *retval)
  93. {
  94. ZVAL_STRING(retval, (char *)mysql_get_client_info());
  95. return retval;
  96. }
  97. /* }}} */
  98. /* {{{ property driver_driver_version_read */
  99. static zval *driver_driver_version_read(mysqli_object *obj, zval *retval)
  100. {
  101. ZVAL_LONG(retval, MYSQLI_VERSION_ID);
  102. return retval;
  103. }
  104. /* }}} */
  105. MAP_PROPERTY_MYG_BOOL_READ(driver_reconnect_read, reconnect)
  106. MAP_PROPERTY_MYG_BOOL_WRITE(driver_reconnect_write, reconnect)
  107. MAP_PROPERTY_MYG_LONG_READ(driver_report_read, report_mode)
  108. ZEND_FUNCTION(mysqli_driver_construct)
  109. {
  110. #if G0
  111. MYSQLI_RESOURCE *mysqli_resource;
  112. mysqli_resource = (MYSQLI_RESOURCE *)ecalloc (1, sizeof(MYSQLI_RESOURCE));
  113. mysqli_resource->ptr = 1;
  114. mysqli_resource->status = (ZEND_NUM_ARGS() == 1) ? MYSQLI_STATUS_INITIALIZED : MYSQLI_STATUS_VALID;
  115. (Z_MYSQLI_P(getThis()))->ptr = mysqli_resource;
  116. #endif
  117. }
  118. const mysqli_property_entry mysqli_driver_property_entries[] = {
  119. {"client_info", sizeof("client_info") - 1, driver_client_info_read, NULL},
  120. {"client_version", sizeof("client_version") - 1, driver_client_version_read, NULL},
  121. {"driver_version", sizeof("driver_version") - 1, driver_driver_version_read, NULL},
  122. {"embedded", sizeof("embedded") - 1, driver_embedded_read, NULL},
  123. {"reconnect", sizeof("reconnect") - 1, driver_reconnect_read, driver_reconnect_write},
  124. {"report_mode", sizeof("report_mode") - 1, driver_report_read, driver_report_write},
  125. {NULL, 0, NULL, NULL}
  126. };
  127. /* {{{ mysqli_driver_methods[]
  128. */
  129. const zend_function_entry mysqli_driver_methods[] = {
  130. #if defined(HAVE_EMBEDDED_MYSQLI)
  131. PHP_FALIAS(embedded_server_start, mysqli_embedded_server_start, NULL)
  132. PHP_FALIAS(embedded_server_end, mysqli_embedded_server_end, NULL)
  133. #endif
  134. PHP_FE_END
  135. };
  136. /* }}} */
  137. /*
  138. * Local variables:
  139. * tab-width: 4
  140. * c-basic-offset: 4
  141. * indent-tabs-mode: t
  142. * End:
  143. * vim600: noet sw=4 ts=4 fdm=marker
  144. * vim<600: noet sw=4 ts=4
  145. */