mysqli_driver.c 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185
  1. /*
  2. +----------------------------------------------------------------------+
  3. | PHP Version 5 |
  4. +----------------------------------------------------------------------+
  5. | Copyright (c) 1997-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. | 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 int name(mysqli_object *obj, zval **retval TSRMLS_DC) \
  30. { \
  31. MAKE_STD_ZVAL(*retval); \
  32. ZVAL_BOOL(*retval, MyG(value)); \
  33. return SUCCESS; \
  34. } \
  35. #define MAP_PROPERTY_MYG_BOOL_WRITE(name, value) \
  36. static int name(mysqli_object *obj, zval *value TSRMLS_DC) \
  37. { \
  38. MyG(value) = Z_LVAL_P(value) > 0; \
  39. return SUCCESS; \
  40. } \
  41. #define MAP_PROPERTY_MYG_LONG_READ(name, value) \
  42. static int name(mysqli_object *obj, zval **retval TSRMLS_DC) \
  43. { \
  44. MAKE_STD_ZVAL(*retval); \
  45. ZVAL_LONG(*retval, MyG(value)); \
  46. return SUCCESS; \
  47. } \
  48. #define MAP_PROPERTY_MYG_LONG_WRITE(name, value) \
  49. static int name(mysqli_object *obj, zval *value TSRMLS_DC) \
  50. { \
  51. MyG(value) = Z_LVAL_P(value); \
  52. return SUCCESS; \
  53. } \
  54. #define MAP_PROPERTY_MYG_STRING_READ(name, value) \
  55. static int name(mysqli_object *obj, zval **retval TSRMLS_DC) \
  56. { \
  57. MAKE_STD_ZVAL(*retval); \
  58. ZVAL_STRING(*retval, MyG(value), 1); \
  59. return SUCCESS; \
  60. } \
  61. #define MAP_PROPERTY_MYG_STRING_WRITE(name, value) \
  62. static int name(mysqli_object *obj, zval *value TSRMLS_DC) \
  63. { \
  64. MyG(value) = Z_STRVAL_P(value); \
  65. return SUCCESS; \
  66. } \
  67. /* {{{ property driver_report_write */
  68. static int driver_report_write(mysqli_object *obj, zval *value TSRMLS_DC)
  69. {
  70. MyG(report_mode) = Z_LVAL_P(value);
  71. /*FIXME*/
  72. /* zend_replace_error_handling(MyG(report_mode) & MYSQLI_REPORT_STRICT ? EH_THROW : EH_NORMAL, NULL, NULL TSRMLS_CC); */
  73. return SUCCESS;
  74. }
  75. /* }}} */
  76. /* {{{ property driver_embedded_read */
  77. static int driver_embedded_read(mysqli_object *obj, zval **retval TSRMLS_DC)
  78. {
  79. MAKE_STD_ZVAL(*retval);
  80. #ifdef HAVE_EMBEDDED_MYSQLI
  81. ZVAL_BOOL(*retval, 1);
  82. #else
  83. ZVAL_BOOL(*retval, 0);
  84. #endif
  85. return SUCCESS;
  86. }
  87. /* }}} */
  88. /* {{{ property driver_client_version_read */
  89. static int driver_client_version_read(mysqli_object *obj, zval **retval TSRMLS_DC)
  90. {
  91. MAKE_STD_ZVAL(*retval);
  92. ZVAL_LONG(*retval, MYSQL_VERSION_ID);
  93. return SUCCESS;
  94. }
  95. /* }}} */
  96. /* {{{ property driver_client_info_read */
  97. static int driver_client_info_read(mysqli_object *obj, zval **retval TSRMLS_DC)
  98. {
  99. MAKE_STD_ZVAL(*retval);
  100. ZVAL_STRING(*retval, (char *)mysql_get_client_info(), 1);
  101. return SUCCESS;
  102. }
  103. /* }}} */
  104. /* {{{ property driver_driver_version_read */
  105. static int driver_driver_version_read(mysqli_object *obj, zval **retval TSRMLS_DC)
  106. {
  107. MAKE_STD_ZVAL(*retval);
  108. ZVAL_LONG(*retval, MYSQLI_VERSION_ID);
  109. return SUCCESS;
  110. }
  111. /* }}} */
  112. MAP_PROPERTY_MYG_BOOL_READ(driver_reconnect_read, reconnect)
  113. MAP_PROPERTY_MYG_BOOL_WRITE(driver_reconnect_write, reconnect)
  114. MAP_PROPERTY_MYG_LONG_READ(driver_report_read, report_mode)
  115. ZEND_FUNCTION(mysqli_driver_construct)
  116. {
  117. #if G0
  118. MYSQLI_RESOURCE *mysqli_resource;
  119. mysqli_resource = (MYSQLI_RESOURCE *)ecalloc (1, sizeof(MYSQLI_RESOURCE));
  120. mysqli_resource->ptr = 1;
  121. mysqli_resource->status = (ZEND_NUM_ARGS() == 1) ? MYSQLI_STATUS_INITIALIZED : MYSQLI_STATUS_VALID;
  122. ((mysqli_object *) zend_object_store_get_object(getThis() TSRMLS_CC))->ptr = mysqli_resource;
  123. #endif
  124. }
  125. const mysqli_property_entry mysqli_driver_property_entries[] = {
  126. {"client_info", sizeof("client_info") - 1, driver_client_info_read, NULL},
  127. {"client_version", sizeof("client_version") - 1, driver_client_version_read, NULL},
  128. {"driver_version", sizeof("driver_version") - 1, driver_driver_version_read, NULL},
  129. {"embedded", sizeof("embedded") - 1, driver_embedded_read, NULL},
  130. {"reconnect", sizeof("reconnect") - 1, driver_reconnect_read, driver_reconnect_write},
  131. {"report_mode", sizeof("report_mode") - 1, driver_report_read, driver_report_write},
  132. {NULL, 0, NULL, NULL}
  133. };
  134. /* {{{ mysqli_warning_property_info_entries */
  135. const zend_property_info mysqli_driver_property_info_entries[] = {
  136. {ZEND_ACC_PUBLIC, "client_info", sizeof("client_info") - 1, -1, 0, NULL, 0, NULL},
  137. {ZEND_ACC_PUBLIC, "client_version", sizeof("client_version") - 1, -1, 0, NULL, 0, NULL},
  138. {ZEND_ACC_PUBLIC, "driver_version", sizeof("driver_version") - 1, -1, 0, NULL, 0, NULL},
  139. {ZEND_ACC_PUBLIC, "embedded", sizeof("embedded") - 1, -1, 0, NULL, 0, NULL},
  140. {ZEND_ACC_PUBLIC, "reconnect", sizeof("reconnect") - 1, -1, 0, NULL, 0, NULL},
  141. {ZEND_ACC_PUBLIC, "report_mode", sizeof("report_mode") - 1, -1, 0, NULL, 0, NULL},
  142. {0, NULL, 0, -1, 0, NULL, 0, NULL},
  143. };
  144. /* }}} */
  145. /* {{{ mysqli_driver_methods[]
  146. */
  147. const zend_function_entry mysqli_driver_methods[] = {
  148. #if defined(HAVE_EMBEDDED_MYSQLI)
  149. PHP_FALIAS(embedded_server_start, mysqli_embedded_server_start, NULL)
  150. PHP_FALIAS(embedded_server_end, mysqli_embedded_server_end, NULL)
  151. #endif
  152. {NULL, NULL, NULL}
  153. };
  154. /* }}} */
  155. /*
  156. * Local variables:
  157. * tab-width: 4
  158. * c-basic-offset: 4
  159. * indent-tabs-mode: t
  160. * End:
  161. * vim600: noet sw=4 ts=4 fdm=marker
  162. * vim<600: noet sw=4 ts=4
  163. */