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