1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 #ifndef MYSQLND_H
23 #define MYSQLND_H
24
25 #define PHP_MYSQLND_VERSION "mysqlnd 5.0.12-dev - 20150407 - $Id: fd3bfdab644600c96b25beaf69d021447b7b4ec5 $"
26 #define MYSQLND_VERSION_ID 50012
27
28 #define MYSQLND_PLUGIN_API_VERSION 2
29
30 #define MYSQLND_STRING_TO_INT_CONVERSION
31
32
33
34
35
36
37
38
39
40
41
42 #if A0 && PHP_DEBUG
43 #define MYSQLND_DO_WIRE_CHECK_BEFORE_COMMAND 1
44 #endif
45
46 #if PHP_DEBUG
47 #define MYSQLND_DBG_ENABLED 1
48 #else
49 #define MYSQLND_DBG_ENABLED 0
50 #endif
51
52 #if defined(MYSQLND_COMPRESSION_WANTED) && defined(HAVE_ZLIB)
53 #define MYSQLND_COMPRESSION_ENABLED 1
54 #endif
55
56 #ifdef ZTS
57 #include "TSRM.h"
58 #endif
59
60 #include "mysqlnd_portability.h"
61 #include "mysqlnd_enum_n_def.h"
62 #include "mysqlnd_structs.h"
63
64
65
66 PHPAPI void mysqlnd_library_init(void);
67 PHPAPI void mysqlnd_library_end(void);
68
69 PHPAPI unsigned int mysqlnd_plugin_register();
70 PHPAPI unsigned int mysqlnd_plugin_register_ex(struct st_mysqlnd_plugin_header * plugin);
71 PHPAPI unsigned int mysqlnd_plugin_count();
72 PHPAPI void * mysqlnd_plugin_find(const char * const name);
73
74 PHPAPI void mysqlnd_plugin_apply_with_argument(apply_func_arg_t apply_func, void * argument);
75
76 #define mysqlnd_restart_psession(conn) ((conn)->data)->m->restart_psession((conn)->data)
77 #define mysqlnd_end_psession(conn) ((conn)->data)->m->end_psession((conn)->data)
78 PHPAPI void mysqlnd_minfo_print_hash(zval *values);
79 #define mysqlnd_thread_safe() TRUE
80
81 PHPAPI const MYSQLND_CHARSET * mysqlnd_find_charset_nr(unsigned int charsetno);
82 PHPAPI const MYSQLND_CHARSET * mysqlnd_find_charset_name(const char * const charsetname);
83
84
85
86 PHPAPI MYSQLND * mysqlnd_init(unsigned int client_flags, zend_bool persistent);
87 PHPAPI MYSQLND * mysqlnd_connect(MYSQLND * conn,
88 const char * host, const char * user,
89 const char * passwd, unsigned int passwd_len,
90 const char * db, unsigned int db_len,
91 unsigned int port,
92 const char * socket_or_pipe,
93 unsigned int mysql_flags,
94 unsigned int client_api_flags
95 );
96
97 #define mysqlnd_change_user(conn, user, passwd, db, silent) ((conn)->data)->m->change_user((conn)->data, (user), (passwd), (db), (silent), strlen((passwd)))
98 #define mysqlnd_change_user_ex(conn, user, passwd, db, silent, passwd_len) ((conn)->data)->m->change_user((conn)->data, (user), (passwd), (db), (silent), (passwd_len))
99
100 PHPAPI void mysqlnd_debug(const char *mode);
101
102
103 #define mysqlnd_fetch_into(result, flags, ret_val, ext) (result)->m.fetch_into((result), (flags), (ret_val), (ext) ZEND_FILE_LINE_CC)
104 #define mysqlnd_fetch_row_c(result) (result)->m.fetch_row_c((result))
105 #define mysqlnd_fetch_all(result, flags, return_value) (result)->m.fetch_all((result), (flags), (return_value) ZEND_FILE_LINE_CC)
106 #define mysqlnd_result_fetch_field_data(res,offset,ret) (res)->m.fetch_field_data((res), (offset), (ret))
107 #define mysqlnd_get_connection_stats(conn, values) ((conn)->data)->m->get_statistics((conn)->data, (values) ZEND_FILE_LINE_CC)
108 #define mysqlnd_get_client_stats(values) _mysqlnd_get_client_stats((values) ZEND_FILE_LINE_CC)
109
110 #define mysqlnd_close(conn,is_forced) (conn)->m->close((conn), (is_forced))
111 #define mysqlnd_query(conn, query_str, query_len) ((conn)->data)->m->query((conn)->data, (query_str), (query_len))
112 #define mysqlnd_async_query(conn, query_str, query_len) ((conn)->data)->m->send_query((conn)->data, (query_str), (query_len), MYSQLND_SEND_QUERY_EXPLICIT, NULL, NULL)
113 #define mysqlnd_reap_async_query(conn) ((conn)->data)->m->reap_query((conn)->data, MYSQLND_REAP_RESULT_EXPLICIT)
114 #define mysqlnd_unbuffered_skip_result(result) (result)->m.skip_result((result))
115
116 PHPAPI enum_func_status mysqlnd_poll(MYSQLND **r_array, MYSQLND **e_array, MYSQLND ***dont_poll, long sec, long usec, int * desc_num);
117
118 #define mysqlnd_use_result(conn) ((conn)->data)->m->use_result((conn)->data, 0)
119 #define mysqlnd_store_result(conn) ((conn)->data)->m->store_result((conn)->data, MYSQLND_STORE_NO_COPY)
120 #define mysqlnd_store_result_ofs(conn) ((conn)->data)->m->store_result((conn)->data, MYSQLND_STORE_COPY)
121 #define mysqlnd_next_result(conn) ((conn)->data)->m->next_result((conn)->data)
122 #define mysqlnd_more_results(conn) ((conn)->data)->m->more_results((conn)->data)
123 #define mysqlnd_free_result(r,e_or_i) ((MYSQLND_RES*)r)->m.free_result(((MYSQLND_RES*)(r)), (e_or_i))
124 #define mysqlnd_data_seek(result, row) (result)->m.seek_data((result), (row))
125
126
127 #define mysqlnd_errno(conn) ((conn)->data)->m->get_error_no((conn)->data)
128 #define mysqlnd_error(conn) ((conn)->data)->m->get_error_str((conn)->data)
129 #define mysqlnd_sqlstate(conn) ((conn)->data)->m->get_sqlstate((conn)->data)
130
131
132 #define mysqlnd_character_set_name(conn) ((conn)->data)->m->charset_name((conn)->data)
133
134
135 #define mysqlnd_field_count(conn) ((conn)->data)->m->get_field_count((conn)->data)
136 #define mysqlnd_insert_id(conn) ((conn)->data)->m->get_last_insert_id((conn)->data)
137 #define mysqlnd_affected_rows(conn) ((conn)->data)->m->get_affected_rows((conn)->data)
138 #define mysqlnd_warning_count(conn) ((conn)->data)->m->get_warning_count((conn)->data)
139 #define mysqlnd_info(conn) ((conn)->data)->m->get_last_message((conn)->data)
140 #define mysqlnd_get_server_info(conn) ((conn)->data)->m->get_server_information((conn)->data)
141 #define mysqlnd_get_server_version(conn) ((conn)->data)->m->get_server_version((conn)->data)
142 #define mysqlnd_get_host_info(conn) ((conn)->data)->m->get_host_information((conn)->data)
143 #define mysqlnd_get_proto_info(conn) ((conn)->data)->m->get_protocol_information((conn)->data)
144 #define mysqlnd_thread_id(conn) ((conn)->data)->m->get_thread_id((conn)->data)
145 #define mysqlnd_get_server_status(conn) ((conn)->data)->m->get_server_status((conn)->data)
146
147 #define mysqlnd_num_rows(result) (result)->m.num_rows((result))
148 #define mysqlnd_num_fields(result) (result)->m.num_fields((result))
149
150 #define mysqlnd_fetch_lengths(result) (result)->m.fetch_lengths((result))
151
152 #define mysqlnd_field_seek(result, ofs) (result)->m.seek_field((result), (ofs))
153 #define mysqlnd_field_tell(result) (result)->m.field_tell((result))
154 #define mysqlnd_fetch_field(result) (result)->m.fetch_field((result))
155 #define mysqlnd_fetch_field_direct(result,fnr) (result)->m.fetch_field_direct((result), (fnr))
156 #define mysqlnd_fetch_fields(result) (result)->m.fetch_fields((result))
157
158
159 PHPAPI const char * mysqlnd_get_client_info();
160 PHPAPI unsigned int mysqlnd_get_client_version();
161
162 #define mysqlnd_ssl_set(conn, key, cert, ca, capath, cipher) ((conn)->data)->m->ssl_set((conn)->data, (key), (cert), (ca), (capath), (cipher))
163
164
165 #define mysqlnd_stmt_insert_id(stmt) (stmt)->m->get_last_insert_id((stmt))
166 #define mysqlnd_stmt_affected_rows(stmt) (stmt)->m->get_affected_rows((stmt))
167 #define mysqlnd_stmt_num_rows(stmt) (stmt)->m->get_num_rows((stmt))
168 #define mysqlnd_stmt_param_count(stmt) (stmt)->m->get_param_count((stmt))
169 #define mysqlnd_stmt_field_count(stmt) (stmt)->m->get_field_count((stmt))
170 #define mysqlnd_stmt_warning_count(stmt) (stmt)->m->get_warning_count((stmt))
171 #define mysqlnd_stmt_server_status(stmt) (stmt)->m->get_server_status((stmt))
172 #define mysqlnd_stmt_errno(stmt) (stmt)->m->get_error_no((stmt))
173 #define mysqlnd_stmt_error(stmt) (stmt)->m->get_error_str((stmt))
174 #define mysqlnd_stmt_sqlstate(stmt) (stmt)->m->get_sqlstate((stmt))
175
176
177 PHPAPI void mysqlnd_efree_param_bind_dtor(MYSQLND_PARAM_BIND * param_bind);
178 PHPAPI void mysqlnd_efree_result_bind_dtor(MYSQLND_RESULT_BIND * result_bind);
179 PHPAPI void mysqlnd_free_param_bind_dtor(MYSQLND_PARAM_BIND * param_bind);
180 PHPAPI void mysqlnd_free_result_bind_dtor(MYSQLND_RESULT_BIND * result_bind);
181
182
183 PHPAPI const char * mysqlnd_field_type_name(enum mysqlnd_field_types field_type);
184
185
186 void mysqlnd_local_infile_default(MYSQLND_CONN_DATA * conn);
187
188
189 #define mysqlnd_autocommit(conn, mode) ((conn)->data)->m->set_autocommit((conn)->data, (mode))
190 #define mysqlnd_begin_transaction(conn,flags,name) ((conn)->data)->m->tx_begin((conn)->data, (flags), (name))
191 #define mysqlnd_commit(conn, flags, name) ((conn)->data)->m->tx_commit_or_rollback((conn)->data, TRUE, (flags), (name))
192 #define mysqlnd_rollback(conn, flags, name) ((conn)->data)->m->tx_commit_or_rollback((conn)->data, FALSE, (flags), (name))
193 #define mysqlnd_savepoint(conn, name) ((conn)->data)->m->tx_savepoint((conn)->data, (name))
194 #define mysqlnd_release_savepoint(conn, name) ((conn)->data)->m->tx_savepoint_release((conn)->data, (name))
195 #define mysqlnd_list_dbs(conn, wild) ((conn)->data)->m->list_method((conn)->data, wild? "SHOW DATABASES LIKE %s":"SHOW DATABASES", (wild), NULL)
196 #define mysqlnd_list_fields(conn, tab,wild) ((conn)->data)->m->list_fields((conn)->data, (tab), (wild))
197 #define mysqlnd_list_processes(conn) ((conn)->data)->m->list_method((conn)->data, "SHOW PROCESSLIST", NULL, NULL)
198 #define mysqlnd_list_tables(conn, wild) ((conn)->data)->m->list_method((conn)->data, wild? "SHOW TABLES LIKE %s":"SHOW TABLES", (wild), NULL)
199 #define mysqlnd_dump_debug_info(conn) ((conn)->data)->m->server_dump_debug_information((conn)->data)
200 #define mysqlnd_select_db(conn, db, db_len) ((conn)->data)->m->select_db((conn)->data, (db), (db_len))
201 #define mysqlnd_ping(conn) ((conn)->data)->m->ping((conn)->data)
202 #define mysqlnd_kill(conn, pid) ((conn)->data)->m->kill_connection((conn)->data, (pid))
203 #define mysqlnd_refresh(conn, options) ((conn)->data)->m->refresh_server((conn)->data, (options))
204 #define mysqlnd_shutdown(conn, level) ((conn)->data)->m->shutdown_server((conn)->data, (level))
205 #define mysqlnd_set_character_set(conn, cs) ((conn)->data)->m->set_charset((conn)->data, (cs))
206 #define mysqlnd_stat(conn, msg) ((conn)->data)->m->get_server_statistics(((conn)->data), (msg))
207 #define mysqlnd_options(conn, opt, value) ((conn)->data)->m->set_client_option((conn)->data, (opt), (value))
208 #define mysqlnd_options4(conn, opt, k, v) ((conn)->data)->m->set_client_option_2d((conn)->data, (opt), (k), (v))
209 #define mysqlnd_set_server_option(conn, op) ((conn)->data)->m->set_server_option((conn)->data, (op))
210
211
212 #define mysqlnd_real_escape_string(conn, newstr, escapestr, escapestr_len) \
213 ((conn)->data)->m->escape_string((conn)->data, (newstr), (escapestr), (escapestr_len))
214 #define mysqlnd_escape_string(newstr, escapestr, escapestr_len) \
215 mysqlnd_old_escape_string((newstr), (escapestr), (escapestr_len))
216
217 PHPAPI zend_ulong mysqlnd_old_escape_string(char * newstr, const char * escapestr, size_t escapestr_len);
218
219
220
221 #define mysqlnd_stmt_init(conn) ((conn)->data)->m->stmt_init(((conn)->data))
222 #define mysqlnd_stmt_store_result(stmt) (!mysqlnd_stmt_field_count((stmt)) ? PASS:((stmt)->m->store_result((stmt))? PASS:FAIL))
223 #define mysqlnd_stmt_get_result(stmt) (stmt)->m->get_result((stmt))
224 #define mysqlnd_stmt_more_results(stmt) (stmt)->m->more_results((stmt))
225 #define mysqlnd_stmt_next_result(stmt) (stmt)->m->next_result((stmt))
226 #define mysqlnd_stmt_data_seek(stmt, row) (stmt)->m->seek_data((stmt), (row))
227 #define mysqlnd_stmt_prepare(stmt, q, qlen) (stmt)->m->prepare((stmt), (q), (qlen))
228 #define mysqlnd_stmt_execute(stmt) (stmt)->m->execute((stmt))
229 #define mysqlnd_stmt_send_long_data(stmt,p,d,l) (stmt)->m->send_long_data((stmt), (p), (d), (l))
230 #define mysqlnd_stmt_alloc_param_bind(stmt) (stmt)->m->alloc_parameter_bind((stmt))
231 #define mysqlnd_stmt_free_param_bind(stmt,bind) (stmt)->m->free_parameter_bind((stmt), (bind))
232 #define mysqlnd_stmt_bind_param(stmt,bind) (stmt)->m->bind_parameters((stmt), (bind))
233 #define mysqlnd_stmt_bind_one_param(stmt,n,z,t) (stmt)->m->bind_one_parameter((stmt), (n), (z), (t))
234 #define mysqlnd_stmt_refresh_bind_param(s) (s)->m->refresh_bind_param((s))
235 #define mysqlnd_stmt_alloc_result_bind(stmt) (stmt)->m->alloc_result_bind((stmt))
236 #define mysqlnd_stmt_free_result_bind(stmt,bind) (stmt)->m->free_result_bind((stmt), (bind))
237 #define mysqlnd_stmt_bind_result(stmt,bind) (stmt)->m->bind_result((stmt), (bind))
238 #define mysqlnd_stmt_bind_one_result(s,no) (s)->m->bind_one_result((s), (no))
239 #define mysqlnd_stmt_param_metadata(stmt) (stmt)->m->get_parameter_metadata((stmt))
240 #define mysqlnd_stmt_result_metadata(stmt) (stmt)->m->get_result_metadata((stmt))
241
242 #define mysqlnd_stmt_free_result(stmt) (stmt)->m->free_result((stmt))
243 #define mysqlnd_stmt_close(stmt, implicit) (stmt)->m->dtor((stmt), (implicit))
244 #define mysqlnd_stmt_reset(stmt) (stmt)->m->reset((stmt))
245 #define mysqlnd_stmt_flush(stmt) (stmt)->m->flush((stmt))
246
247
248 #define mysqlnd_stmt_attr_get(stmt, attr, value) (stmt)->m->get_attribute((stmt), (attr), (value))
249 #define mysqlnd_stmt_attr_set(stmt, attr, value) (stmt)->m->set_attribute((stmt), (attr), (value))
250
251 #define mysqlnd_stmt_fetch(stmt, fetched) (stmt)->m->fetch((stmt), (fetched))
252
253
254
255 PHPAPI void _mysqlnd_get_client_stats(zval *return_value ZEND_FILE_LINE_DC);
256
257
258 #define MYSQLND_METHOD(class, method) php_##class##_##method##_pub
259 #define MYSQLND_METHOD_PRIVATE(class, method) php_##class##_##method##_priv
260
261 ZEND_BEGIN_MODULE_GLOBALS(mysqlnd)
262 char * debug;
263 char * trace_alloc_settings;
264 MYSQLND_DEBUG * dbg;
265 MYSQLND_DEBUG * trace_alloc;
266 zend_long net_cmd_buffer_size;
267 zend_long net_read_buffer_size;
268 zend_long log_mask;
269 zend_long net_read_timeout;
270 zend_long mempool_default_size;
271 zend_long debug_emalloc_fail_threshold;
272 zend_long debug_ecalloc_fail_threshold;
273 zend_long debug_erealloc_fail_threshold;
274 zend_long debug_malloc_fail_threshold;
275 zend_long debug_calloc_fail_threshold;
276 zend_long debug_realloc_fail_threshold;
277 char * sha256_server_public_key;
278 zend_bool fetch_data_copy;
279 zend_bool collect_statistics;
280 zend_bool collect_memory_statistics;
281 ZEND_END_MODULE_GLOBALS(mysqlnd)
282
283 PHPAPI ZEND_EXTERN_MODULE_GLOBALS(mysqlnd)
284 #define MYSQLND_G(v) ZEND_MODULE_GLOBALS_ACCESSOR(mysqlnd, v)
285
286 #if defined(ZTS) && defined(COMPILE_DL_MYSQLND)
287 ZEND_TSRMLS_CACHE_EXTERN()
288 #endif
289
290
291 PHPAPI void mysqlnd_minfo_print_hash(zval *values);
292
293 #endif
294
295
296
297
298
299
300
301
302
303