php-internal-docs 8.4.8
Unofficial docs for php/php-src
Loading...
Searching...
No Matches
mysqlnd_ext_plugin.c
Go to the documentation of this file.
1/*
2 +----------------------------------------------------------------------+
3 | Copyright (c) The PHP Group |
4 +----------------------------------------------------------------------+
5 | This source file is subject to version 3.01 of the PHP license, |
6 | that is bundled with this package in the file LICENSE, and is |
7 | available through the world-wide-web at the following url: |
8 | https://www.php.net/license/3_01.txt |
9 | If you did not receive a copy of the PHP license and are unable to |
10 | obtain it through the world-wide-web, please send a note to |
11 | license@php.net so we can mail you a copy immediately. |
12 +----------------------------------------------------------------------+
13 | Authors: Andrey Hristov <andrey@php.net> |
14 | Johannes Schlüter <johannes@php.net> |
15 | Ulf Wendel <uw@php.net> |
16 +----------------------------------------------------------------------+
17*/
18
19#include "php.h"
20#include "mysqlnd.h"
21#include "mysqlnd_priv.h"
22#include "mysqlnd_result.h"
23#include "mysqlnd_debug.h"
24#include "mysqlnd_commands.h"
25#include "mysqlnd_ext_plugin.h"
26
27static struct st_mysqlnd_conn_methods * mysqlnd_conn_methods;
28static struct st_mysqlnd_conn_data_methods * mysqlnd_conn_data_methods;
29static struct st_mysqlnd_stmt_methods * mysqlnd_stmt_methods;
30
31/* {{{ mysqlnd_plugin__get_plugin_connection_data */
32static void **
33mysqlnd_plugin__get_plugin_connection_data(const MYSQLND * conn, const unsigned int plugin_id)
34{
35 DBG_ENTER("mysqlnd_plugin__get_plugin_connection_data");
36 DBG_INF_FMT("plugin_id=%u", plugin_id);
37 if (!conn || plugin_id >= mysqlnd_plugin_count()) {
38 return NULL;
39 }
40 DBG_RETURN((void *)((char *)conn + sizeof(MYSQLND) + plugin_id * sizeof(void *)));
41}
42/* }}} */
43
44
45/* {{{ mysqlnd_plugin__get_plugin_connection_data_data */
46static void **
47mysqlnd_plugin__get_plugin_connection_data_data(const MYSQLND_CONN_DATA * conn, const unsigned int plugin_id)
48{
49 DBG_ENTER("mysqlnd_plugin__get_plugin_connection_data_data");
50 DBG_INF_FMT("plugin_id=%u", plugin_id);
51 if (!conn || plugin_id >= mysqlnd_plugin_count()) {
52 return NULL;
53 }
54 DBG_RETURN((void *)((char *)conn + sizeof(MYSQLND_CONN_DATA) + plugin_id * sizeof(void *)));
55}
56/* }}} */
57
58
59/* {{{ mysqlnd_plugin__get_plugin_result_data */
60static void **
61mysqlnd_plugin__get_plugin_result_data(const MYSQLND_RES * result, const unsigned int plugin_id)
62{
63 DBG_ENTER("mysqlnd_plugin__get_plugin_result_data");
64 DBG_INF_FMT("plugin_id=%u", plugin_id);
65 if (!result || plugin_id >= mysqlnd_plugin_count()) {
66 return NULL;
67 }
68 DBG_RETURN((void *)((char *)result + sizeof(MYSQLND_RES) + plugin_id * sizeof(void *)));
69}
70/* }}} */
71
72
73/* {{{ _mysqlnd_plugin__get_plugin_result_unbuffered_data */
74static void **
75mysqlnd_plugin__get_plugin_result_unbuffered_data(const MYSQLND_RES_UNBUFFERED * result, const unsigned int plugin_id)
76{
77 DBG_ENTER("mysqlnd_plugin__get_plugin_result_unbuffered_data");
78 DBG_INF_FMT("plugin_id=%u", plugin_id);
79 if (!result || plugin_id >= mysqlnd_plugin_count()) {
80 return NULL;
81 }
82 DBG_RETURN((void *)((char *)result + sizeof(MYSQLND_RES_UNBUFFERED) + plugin_id * sizeof(void *)));
83}
84/* }}} */
85
86/* {{{ mysqlnd_plugin__get_plugin_result_buffered_data */
87static void **
88mysqlnd_plugin__get_plugin_result_buffered_data(const MYSQLND_RES_BUFFERED * result, const unsigned int plugin_id)
89{
90 DBG_ENTER("mysqlnd_plugin__get_plugin_result_buffered_data");
91 DBG_INF_FMT("plugin_id=%u", plugin_id);
92 if (!result || plugin_id >= mysqlnd_plugin_count()) {
93 return NULL;
94 }
95 DBG_RETURN((void *)((char *)result + sizeof(MYSQLND_RES_BUFFERED) + plugin_id * sizeof(void *)));
96}
97/* }}} */
98
99
100/* {{{ mysqlnd_plugin__get_plugin_protocol_data */
101static void **
102mysqlnd_plugin__get_plugin_protocol_data(const MYSQLND_PROTOCOL_PAYLOAD_DECODER_FACTORY * factory, const unsigned int plugin_id)
103{
104 DBG_ENTER("mysqlnd_plugin__get_plugin_protocol_data");
105 DBG_INF_FMT("plugin_id=%u", plugin_id);
106 if (!factory || plugin_id >= mysqlnd_plugin_count()) {
107 return NULL;
108 }
109 DBG_RETURN((void *)((char *)factory + sizeof(MYSQLND_PROTOCOL_PAYLOAD_DECODER_FACTORY) + plugin_id * sizeof(void *)));
110}
111/* }}} */
112
113
114/* {{{ mysqlnd_plugin__get_plugin_stmt_data */
115static void **
116mysqlnd_plugin__get_plugin_stmt_data(const MYSQLND_STMT * stmt, const unsigned int plugin_id)
117{
118 DBG_ENTER("mysqlnd_plugin__get_plugin_stmt_data");
119 DBG_INF_FMT("plugin_id=%u", plugin_id);
120 if (!stmt || plugin_id >= mysqlnd_plugin_count()) {
121 return NULL;
122 }
123 DBG_RETURN((void *)((char *)stmt + sizeof(MYSQLND_STMT) + plugin_id * sizeof(void *)));
124}
125/* }}} */
126
127
128/* {{{ mysqlnd_plugin__get_plugin_pfc_data */
129static void **
130mysqlnd_plugin__get_plugin_pfc_data(const MYSQLND_PFC * pfc, const unsigned int plugin_id)
131{
132 DBG_ENTER("mysqlnd_plugin__get_plugin_pfc_data");
133 DBG_INF_FMT("plugin_id=%u", plugin_id);
134 if (!pfc || plugin_id >= mysqlnd_plugin_count()) {
135 return NULL;
136 }
137 DBG_RETURN((void *)((char *)pfc + sizeof(MYSQLND_PFC) + plugin_id * sizeof(void *)));
138}
139/* }}} */
140
141
142/* {{{ _mysqlnd_plugin__get_plugin_vio_data */
143static void **
144mysqlnd_plugin__get_plugin_vio_data(const MYSQLND_VIO * vio, const unsigned int plugin_id)
145{
146 DBG_ENTER("_mysqlnd_plugin__get_plugin_vio_data");
147 DBG_INF_FMT("plugin_id=%u", plugin_id);
148 if (!vio || plugin_id >= mysqlnd_plugin_count()) {
149 return NULL;
150 }
151 DBG_RETURN((void *)((char *)vio + sizeof(MYSQLND_VIO) + plugin_id * sizeof(void *)));
152}
153/* }}} */
154
156{
157 mysqlnd_plugin__get_plugin_connection_data,
158 mysqlnd_plugin__get_plugin_connection_data_data,
159 mysqlnd_plugin__get_plugin_result_data,
160 mysqlnd_plugin__get_plugin_result_unbuffered_data,
161 mysqlnd_plugin__get_plugin_result_buffered_data,
162 mysqlnd_plugin__get_plugin_stmt_data,
163 mysqlnd_plugin__get_plugin_protocol_data,
164 mysqlnd_plugin__get_plugin_pfc_data,
165 mysqlnd_plugin__get_plugin_vio_data,
166};
167
168
169
170/* {{{ _mysqlnd_object_factory_get_methods */
171static MYSQLND_CLASS_METHODS_TYPE(mysqlnd_object_factory) *
172_mysqlnd_object_factory_get_methods(void)
173{
174 return &MYSQLND_CLASS_METHOD_TABLE_NAME(mysqlnd_object_factory);
175}
176/* }}} */
177
178/* {{{ mysqlnd_conn_set_methods */
179static void
180_mysqlnd_object_factory_set_methods(MYSQLND_CLASS_METHODS_TYPE(mysqlnd_object_factory) *methods)
181{
182 MYSQLND_CLASS_METHOD_TABLE_NAME(mysqlnd_object_factory) = *methods;
183}
184/* }}} */
185
186
187/* {{{ _mysqlnd_conn_get_methods */
188static MYSQLND_CLASS_METHODS_TYPE(mysqlnd_conn) *
189_mysqlnd_conn_get_methods(void)
190{
191 return mysqlnd_conn_methods;
192}
193/* }}} */
194
195/* {{{ _mysqlnd_conn_set_methods */
196static void
197_mysqlnd_conn_set_methods(MYSQLND_CLASS_METHODS_TYPE(mysqlnd_conn) *methods)
198{
199 mysqlnd_conn_methods = methods;
200}
201/* }}} */
202
203
204/* {{{ _mysqlnd_conn_data_get_methods */
205static MYSQLND_CLASS_METHODS_TYPE(mysqlnd_conn_data) *
206_mysqlnd_conn_data_get_methods(void)
207{
208 return mysqlnd_conn_data_methods;
209}
210/* }}} */
211
212/* {{{ _mysqlnd_conn_data_set_methods */
213static void
214_mysqlnd_conn_data_set_methods(MYSQLND_CLASS_METHODS_TYPE(mysqlnd_conn_data) * methods)
215{
216 mysqlnd_conn_data_methods = methods;
217}
218/* }}} */
219
220
221/* {{{ _mysqlnd_result_get_methods */
222static MYSQLND_CLASS_METHODS_TYPE(mysqlnd_res) *
223_mysqlnd_result_get_methods(void)
224{
225 return &MYSQLND_CLASS_METHOD_TABLE_NAME(mysqlnd_res);
226}
227/* }}} */
228
229
230/* {{{ _mysqlnd_result_set_methods */
231static void
232_mysqlnd_result_set_methods(MYSQLND_CLASS_METHODS_TYPE(mysqlnd_res) * methods)
233{
234 MYSQLND_CLASS_METHOD_TABLE_NAME(mysqlnd_res) = *methods;
235}
236/* }}} */
237
238
239/* {{{ _mysqlnd_result_unbuffered_get_methods */
240static MYSQLND_CLASS_METHODS_TYPE(mysqlnd_result_unbuffered) *
241_mysqlnd_result_unbuffered_get_methods(void)
242{
243 return &MYSQLND_CLASS_METHOD_TABLE_NAME(mysqlnd_result_unbuffered);
244}
245/* }}} */
246
247
248/* {{{ _mysqlnd_result_unbuffered_set_methods */
249static void
250_mysqlnd_result_unbuffered_set_methods(MYSQLND_CLASS_METHODS_TYPE(mysqlnd_result_unbuffered) * methods)
251{
252 MYSQLND_CLASS_METHOD_TABLE_NAME(mysqlnd_result_unbuffered) = *methods;
253}
254/* }}} */
255
256
257/* {{{ _mysqlnd_result_buffered_get_methods */
258static MYSQLND_CLASS_METHODS_TYPE(mysqlnd_result_buffered) *
259_mysqlnd_result_buffered_get_methods(void)
260{
261 return &MYSQLND_CLASS_METHOD_TABLE_NAME(mysqlnd_result_buffered);
262}
263/* }}} */
264
265
266/* {{{ _mysqlnd_result_buffered_set_methods */
267static void
268_mysqlnd_result_buffered_set_methods(MYSQLND_CLASS_METHODS_TYPE(mysqlnd_result_buffered) * methods)
269{
270 MYSQLND_CLASS_METHOD_TABLE_NAME(mysqlnd_result_buffered) = *methods;
271}
272/* }}} */
273
274
275/* {{{ _mysqlnd_stmt_get_methods */
276static MYSQLND_CLASS_METHODS_TYPE(mysqlnd_stmt) *
277_mysqlnd_stmt_get_methods(void)
278{
279 return mysqlnd_stmt_methods;
280}
281/* }}} */
282
283
284/* {{{ _mysqlnd_stmt_set_methods */
285static void
286_mysqlnd_stmt_set_methods(MYSQLND_CLASS_METHODS_TYPE(mysqlnd_stmt) *methods)
287{
288 mysqlnd_stmt_methods = methods;
289}
290/* }}} */
291
292
293/* {{{ _mysqlnd_protocol_payload_decoder_factory_get_methods */
294static MYSQLND_CLASS_METHODS_TYPE(mysqlnd_protocol_payload_decoder_factory) *
295_mysqlnd_protocol_payload_decoder_factory_get_methods(void)
296{
297 return &MYSQLND_CLASS_METHOD_TABLE_NAME(mysqlnd_protocol_payload_decoder_factory);
298}
299/* }}} */
300
301
302/* {{{ _mysqlnd_protocol_payload_decoder_factory_set_methods */
303static void
304_mysqlnd_protocol_payload_decoder_factory_set_methods(MYSQLND_CLASS_METHODS_TYPE(mysqlnd_protocol_payload_decoder_factory) * methods)
305{
306 MYSQLND_CLASS_METHOD_TABLE_NAME(mysqlnd_protocol_payload_decoder_factory) = *methods;
307}
308/* }}} */
309
310
311/* {{{ _mysqlnd_pfc_get_methods */
312static MYSQLND_CLASS_METHODS_TYPE(mysqlnd_protocol_packet_frame_codec) *
313_mysqlnd_pfc_get_methods(void)
314{
315 return &MYSQLND_CLASS_METHOD_TABLE_NAME(mysqlnd_protocol_packet_frame_codec);
316}
317/* }}} */
318
319
320/* {{{ _mysqlnd_pfc_set_methods */
321static void
322_mysqlnd_pfc_set_methods(MYSQLND_CLASS_METHODS_TYPE(mysqlnd_protocol_packet_frame_codec) * methods)
323{
324 MYSQLND_CLASS_METHOD_TABLE_NAME(mysqlnd_protocol_packet_frame_codec) = *methods;
325}
326/* }}} */
327
328
329/* {{{ _mysqlnd_vio_get_methods */
330static MYSQLND_CLASS_METHODS_TYPE(mysqlnd_vio) *
331_mysqlnd_vio_get_methods(void)
332{
333 return &MYSQLND_CLASS_METHOD_TABLE_NAME(mysqlnd_vio);
334}
335/* }}} */
336
337
338/* {{{ _mysqlnd_vio_set_methods */
339static void
340_mysqlnd_vio_set_methods(MYSQLND_CLASS_METHODS_TYPE(mysqlnd_vio) * methods)
341{
342 MYSQLND_CLASS_METHOD_TABLE_NAME(mysqlnd_vio) = *methods;
343}
344/* }}} */
345
346
347/* {{{ mysqlnd_command_factory_get */
348static MYSQLND_CLASS_METHODS_TYPE(mysqlnd_command) *
349_mysqlnd_command_factory_get(void)
350{
351 return &MYSQLND_CLASS_METHOD_TABLE_NAME(mysqlnd_command);
352}
353/* }}} */
354
355
356/* {{{ mysqlnd_command_factory_set */
357static void
358_mysqlnd_command_factory_set(MYSQLND_CLASS_METHODS_TYPE(mysqlnd_command) * methods)
359{
360 MYSQLND_CLASS_METHOD_TABLE_NAME(mysqlnd_command) = *methods;
361}
362/* }}} */
363
364
365/* {{{ _mysqlnd_error_info_get_methods */
366static MYSQLND_CLASS_METHODS_TYPE(mysqlnd_error_info) *
367_mysqlnd_error_info_get_methods(void)
368{
369 return &MYSQLND_CLASS_METHOD_TABLE_NAME(mysqlnd_error_info);
370}
371/* }}} */
372
373
374/* {{{ _mysqlnd_error_info_set_methods */
375static void
376_mysqlnd_error_info_set_methods(MYSQLND_CLASS_METHODS_TYPE(mysqlnd_error_info) *methods)
377{
378 MYSQLND_CLASS_METHOD_TABLE_NAME(mysqlnd_error_info) = *methods;
379}
380/* }}} */
381
382
384{
385 {
386 _mysqlnd_object_factory_get_methods,
387 _mysqlnd_object_factory_set_methods
388 },
389 {
390 _mysqlnd_conn_get_methods,
391 _mysqlnd_conn_set_methods,
392 },
393 {
394 _mysqlnd_conn_data_get_methods,
395 _mysqlnd_conn_data_set_methods,
396 },
397 {
398 _mysqlnd_result_get_methods,
399 _mysqlnd_result_set_methods,
400 },
401 {
402 _mysqlnd_result_unbuffered_get_methods,
403 _mysqlnd_result_unbuffered_set_methods,
404 },
405 {
406 _mysqlnd_result_buffered_get_methods,
407 _mysqlnd_result_buffered_set_methods,
408 },
409 {
410 _mysqlnd_stmt_get_methods,
411 _mysqlnd_stmt_set_methods,
412 },
413 {
414 _mysqlnd_protocol_payload_decoder_factory_get_methods,
415 _mysqlnd_protocol_payload_decoder_factory_set_methods,
416 },
417 {
418 _mysqlnd_pfc_get_methods,
419 _mysqlnd_pfc_set_methods,
420 },
421 {
422 _mysqlnd_vio_get_methods,
423 _mysqlnd_vio_set_methods,
424 },
425 {
426 _mysqlnd_error_info_get_methods,
427 _mysqlnd_error_info_set_methods,
428 },
429 {
430 _mysqlnd_command_factory_get,
431 _mysqlnd_command_factory_set,
432 },
433};
const php_stream_filter_factory * factory
Definition filters.c:1900
#define NULL
Definition gdcache.h:45
PHPAPI unsigned int mysqlnd_plugin_count(void)
#define DBG_RETURN(value)
struct st_mysqlnd_plugin__plugin_area_getters mysqlnd_plugin_area_getters
struct st_mysqlnd_plugin_methods_xetters mysqlnd_plugin_methods_xetters
struct st_mysqlnd_vio MYSQLND_VIO
struct st_mysqlnd_connection_data MYSQLND_CONN_DATA
#define MYSQLND_CLASS_METHODS_TYPE(class)
struct st_mysqlnd_protocol_frame_codec MYSQLND_PFC
struct st_mysqlnd_buffered_result MYSQLND_RES_BUFFERED
struct st_mysqlnd_unbuffered_result MYSQLND_RES_UNBUFFERED
struct st_mysqlnd_protocol_payload_decoder_factory MYSQLND_PROTOCOL_PAYLOAD_DECODER_FACTORY
struct st_mysqlnd_connection MYSQLND
struct st_mysqlnd_stmt MYSQLND_STMT
struct st_mysqlnd_res MYSQLND_RES
#define MYSQLND_CLASS_METHOD_TABLE_NAME(class)
bool result