Annotation of embedaddon/php/ext/mysqlnd/mysqlnd_priv.h, revision 1.1.1.1
1.1 misho 1: /*
2: +----------------------------------------------------------------------+
3: | PHP Version 5 |
4: +----------------------------------------------------------------------+
5: | Copyright (c) 2006-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: | Authors: Georg Richter <georg@mysql.com> |
16: | Andrey Hristov <andrey@mysql.com> |
17: | Ulf Wendel <uwendel@mysql.com> |
18: +----------------------------------------------------------------------+
19: */
20:
21: /* $Id: mysqlnd_priv.h 321634 2012-01-01 13:15:04Z felipe $ */
22:
23: #ifndef MYSQLND_PRIV_H
24: #define MYSQLND_PRIV_H
25:
26: #ifndef Z_ADDREF_P
27: /* PHP 5.2, old GC */
28: #define Z_ADDREF_P(pz) (++(pz)->refcount)
29: #define Z_DELREF_P(pz) (--(pz)->refcount)
30: #define Z_REFCOUNT_P(pz) ((pz)->refcount)
31: #define Z_SET_REFCOUNT_P(pz, rc) ((pz)->refcount = rc)
32: #define Z_REFCOUNT_PP(ppz) Z_REFCOUNT_P(*(ppz))
33: #define Z_DELREF_PP(ppz) Z_DELREF_P(*(ppz))
34: #endif
35:
36: #if PHP_MAJOR_VERSION >= 6
37: #define MYSQLND_UNICODE 1
38: #else
39: #define MYSQLND_UNICODE 0
40: #endif
41:
42: #ifdef ZTS
43: #include "TSRM.h"
44: #endif
45:
46: #ifndef pestrndup
47: #define pestrndup(s, length, persistent) ((persistent)?zend_strndup((s),(length)):estrndup((s),(length)))
48: #endif
49:
50: #define MYSQLND_CLASS_METHOD_TABLE_NAME(class) mysqlnd_##class##_methods
51: #define MYSQLND_CLASS_METHODS_START(class) struct st_##class##_methods MYSQLND_CLASS_METHOD_TABLE_NAME(class) = {
52: #define MYSQLND_CLASS_METHODS_END }
53:
54: #if MYSQLND_UNICODE
55: #define mysqlnd_array_init(arg, field_count) \
56: { \
57: ALLOC_HASHTABLE_REL(Z_ARRVAL_P(arg));\
58: zend_u_hash_init(Z_ARRVAL_P(arg), (field_count), NULL, ZVAL_PTR_DTOR, 0, 0);\
59: Z_TYPE_P(arg) = IS_ARRAY;\
60: }
61: #else
62: #define mysqlnd_array_init(arg, field_count) \
63: { \
64: ALLOC_HASHTABLE_REL(Z_ARRVAL_P(arg));\
65: zend_hash_init(Z_ARRVAL_P(arg), (field_count), NULL, ZVAL_PTR_DTOR, 0); \
66: Z_TYPE_P(arg) = IS_ARRAY;\
67: }
68: #endif
69:
70:
71: #define MYSQLND_DEBUG_DUMP_TIME 1
72: #define MYSQLND_DEBUG_DUMP_TRACE 2
73: #define MYSQLND_DEBUG_DUMP_PID 4
74: #define MYSQLND_DEBUG_DUMP_LINE 8
75: #define MYSQLND_DEBUG_DUMP_FILE 16
76: #define MYSQLND_DEBUG_DUMP_LEVEL 32
77: #define MYSQLND_DEBUG_APPEND 64
78: #define MYSQLND_DEBUG_FLUSH 128
79: #define MYSQLND_DEBUG_TRACE_MEMORY_CALLS 256
80: #define MYSQLND_DEBUG_PROFILE_CALLS 512
81:
82:
83: /* Client Error codes */
84: #define CR_UNKNOWN_ERROR 2000
85: #define CR_CONNECTION_ERROR 2002
86: #define CR_SERVER_GONE_ERROR 2006
87: #define CR_OUT_OF_MEMORY 2008
88: #define CR_SERVER_LOST 2013
89: #define CR_COMMANDS_OUT_OF_SYNC 2014
90: #define CR_CANT_FIND_CHARSET 2019
91: #define CR_MALFORMED_PACKET 2027
92: #define CR_NOT_IMPLEMENTED 2054
93: #define CR_NO_PREPARE_STMT 2030
94: #define CR_PARAMS_NOT_BOUND 2031
95: #define CR_INVALID_PARAMETER_NO 2034
96: #define CR_INVALID_BUFFER_USE 2035
97:
98: #define MYSQLND_EE_FILENOTFOUND 7890
99:
100: #define UNKNOWN_SQLSTATE "HY000"
101:
102: #define MAX_CHARSET_LEN 32
103:
104:
105: #define SET_ERROR_AFF_ROWS(s) (s)->upsert_status.affected_rows = (uint64_t) ~0
106:
107: /* Error handling */
108: #define SET_NEW_MESSAGE(buf, buf_len, message, len, persistent) \
109: {\
110: if ((buf)) { \
111: mnd_pefree((buf), (persistent)); \
112: } \
113: if ((message)) { \
114: (buf) = mnd_pestrndup((message), (len), (persistent)); \
115: } else { \
116: (buf) = NULL; \
117: } \
118: (buf_len) = (len); \
119: }
120:
121: #define SET_EMPTY_MESSAGE(buf, buf_len, persistent) \
122: {\
123: if ((buf)) { \
124: mnd_pefree((buf), (persistent)); \
125: (buf) = NULL; \
126: } \
127: (buf_len) = 0; \
128: }
129:
130:
131: #define SET_EMPTY_ERROR(error_info) \
132: { \
133: (error_info).error_no = 0; \
134: (error_info).error[0] = '\0'; \
135: strlcpy((error_info).sqlstate, "00000", sizeof((error_info).sqlstate)); \
136: }
137:
138: #define SET_CLIENT_ERROR(error_info, a, b, c) \
139: { \
140: (error_info).error_no = (a); \
141: strlcpy((error_info).sqlstate, (b), sizeof((error_info).sqlstate)); \
142: strlcpy((error_info).error, (c), sizeof((error_info).error)); \
143: }
144:
145: #define SET_OOM_ERROR(error_info) SET_CLIENT_ERROR((error_info), CR_OUT_OF_MEMORY, UNKNOWN_SQLSTATE, mysqlnd_out_of_memory)
146:
147:
148: #define SET_STMT_ERROR(stmt, a, b, c) SET_CLIENT_ERROR((stmt)->error_info, a, b, c)
149:
150: #define CONN_GET_STATE(c) (c)->m->get_state((c) TSRMLS_CC)
151: #define CONN_SET_STATE(c, s) (c)->m->set_state((c), (s) TSRMLS_CC)
152:
153: /* PS stuff */
154: typedef void (*ps_field_fetch_func)(zval *zv, const MYSQLND_FIELD * const field,
155: unsigned int pack_len, zend_uchar **row,
156: zend_bool everything_as_unicode TSRMLS_DC);
157: struct st_mysqlnd_perm_bind {
158: ps_field_fetch_func func;
159: /* should be signed int */
160: int pack_len;
161: unsigned int php_type;
162: zend_bool is_possibly_blob;
163: zend_bool can_ret_as_str_in_uni;
164: };
165:
166: extern struct st_mysqlnd_perm_bind mysqlnd_ps_fetch_functions[MYSQL_TYPE_LAST + 1];
167:
168: PHPAPI extern const char * const mysqlnd_old_passwd;
169: PHPAPI extern const char * const mysqlnd_out_of_sync;
170: PHPAPI extern const char * const mysqlnd_server_gone;
171: PHPAPI extern const char * const mysqlnd_out_of_memory;
172:
173: enum_func_status mysqlnd_handle_local_infile(MYSQLND *conn, const char *filename, zend_bool *is_warning TSRMLS_DC);
174:
175:
176:
177: void _mysqlnd_init_ps_subsystem();/* This one is private, mysqlnd_library_init() will call it */
178: void _mysqlnd_init_ps_fetch_subsystem();
179:
180: void ps_fetch_from_1_to_8_bytes(zval *zv, const MYSQLND_FIELD * const field,
181: unsigned int pack_len, zend_uchar **row, zend_bool as_unicode,
182: unsigned int byte_count TSRMLS_DC);
183:
184: #endif /* MYSQLND_PRIV_H */
185:
186:
187: /*
188: * Local variables:
189: * tab-width: 4
190: * c-basic-offset: 4
191: * End:
192: * vim600: noet sw=4 ts=4 fdm=marker
193: * vim<600: noet sw=4 ts=4
194: */
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>