49
typedef drizzle_lex_string LEX_STRING;
52
extern boost::filesystem::path plugin_dir;
54
namespace plugin { class StorageEngine; }
39
typedef struct st_mysql_lex_string LEX_STRING;
42
extern char *opt_plugin_load;
43
extern char *opt_plugin_dir_ptr;
44
extern char opt_plugin_dir[FN_REFLEN];
46
namespace drizzled { namespace plugin { class StorageEngine; } }
57
49
Macros for beginning and ending plugin declarations. Between
58
DRIZZLE_DECLARE_PLUGIN and DRIZZLE_DECLARE_PLUGIN_END there should
59
be a module::Manifest for each plugin to be declared.
63
#define PANDORA_CPP_NAME(x) _drizzled_ ## x ## _plugin_
64
#define PANDORA_PLUGIN_NAME(x) PANDORA_CPP_NAME(x)
65
#define DRIZZLE_DECLARE_PLUGIN \
66
::drizzled::module::Manifest PANDORA_PLUGIN_NAME(PANDORA_MODULE_NAME)=
69
#define DRIZZLE_DECLARE_PLUGIN_END
70
#define DRIZZLE_PLUGIN(init,system,options) \
71
DRIZZLE_DECLARE_PLUGIN \
74
STRINGIFY_ARG(PANDORA_MODULE_NAME), \
75
STRINGIFY_ARG(PANDORA_MODULE_VERSION), \
76
STRINGIFY_ARG(PANDORA_MODULE_AUTHOR), \
77
STRINGIFY_ARG(PANDORA_MODULE_TITLE), \
78
PANDORA_MODULE_LICENSE, \
79
init, system, options \
50
drizzle_declare_plugin and drizzle_declare_plugin_end there should
51
be a drizzled::plugin::Manifest for each plugin to be declared.
55
#ifndef PANDORA_DYNAMIC_PLUGIN
56
#define __DRIZZLE_DECLARE_PLUGIN(NAME, DECLS) \
57
drizzled::plugin::Manifest DECLS[]= {
59
#define __DRIZZLE_DECLARE_PLUGIN(NAME, DECLS) \
60
drizzled::plugin::Manifest _drizzled_plugin_declaration_[]= {
63
#define drizzle_declare_plugin(NAME) \
64
__DRIZZLE_DECLARE_PLUGIN(NAME, \
65
builtin_ ## NAME ## _plugin)
67
#define drizzle_declare_plugin_end ,{0,0,0,0,PLUGIN_LICENSE_GPL,0,0,0,0,0}}
72
the following flags are valid for plugin_init()
74
#define PLUGIN_INIT_SKIP_DYNAMIC_LOADING 1
75
#define PLUGIN_INIT_SKIP_PLUGIN_TABLE 2
76
#define PLUGIN_INIT_SKIP_INITIALIZATION 4
78
#define INITIAL_LEX_PLUGIN_LIST_SIZE 16
81
declarations for SHOW STATUS support in plugins
83
enum enum_mysql_show_type
85
SHOW_UNDEF, SHOW_BOOL, SHOW_INT, SHOW_LONG,
86
SHOW_LONGLONG, SHOW_CHAR, SHOW_CHAR_PTR,
87
SHOW_ARRAY, SHOW_FUNC, SHOW_KEY_CACHE_LONG, SHOW_KEY_CACHE_LONGLONG,
88
SHOW_LONG_STATUS, SHOW_DOUBLE_STATUS, SHOW_HAVE,
89
SHOW_MY_BOOL, SHOW_HA_ROWS, SHOW_SYS, SHOW_INT_NOFLUSH,
90
SHOW_LONGLONG_STATUS, SHOW_DOUBLE, SHOW_SIZE
93
struct st_mysql_show_var {
96
enum enum_mysql_show_type type;
99
typedef enum enum_mysql_show_type SHOW_TYPE;
100
typedef struct st_mysql_show_var SHOW_VAR;
103
#define SHOW_VAR_FUNC_BUFF_SIZE 1024
104
typedef int (*mysql_show_var_func)(struct st_mysql_show_var *, char *);
106
struct st_show_var_func_container {
107
mysql_show_var_func func;
84
110
declarations for server variables and command line options
141
169
For example, strings may require memory to be allocated.
143
171
typedef void (*mysql_var_update_func)(Session *session,
144
drizzle_sys_var *var,
172
struct st_mysql_sys_var *var,
145
173
void *var_ptr, const void *save);
150
skeleton of a plugin variable - portion of structure common to all.
152
struct drizzle_sys_var
156
void plugin_opt_set_limits(option *options, const drizzle_sys_var *opt);
160
int (*value_type)(drizzle_value *);
161
const char *(*val_str)(drizzle_value *, char *buffer, int *length);
162
int (*val_real)(drizzle_value *, double *realbuf);
163
int (*val_int)(drizzle_value *, int64_t *intbuf);
176
/* the following declarations are for internal use only */
179
#define PLUGIN_VAR_MASK \
180
(PLUGIN_VAR_READONLY | PLUGIN_VAR_NOSYSVAR | \
181
PLUGIN_VAR_NOCMDOPT | PLUGIN_VAR_NOCMDARG | \
182
PLUGIN_VAR_OPCMDARG | PLUGIN_VAR_RQCMDARG | PLUGIN_VAR_MEMALLOC)
184
#define DRIZZLE_PLUGIN_VAR_HEADER \
187
const char *comment; \
188
mysql_var_check_func check; \
189
mysql_var_update_func update
191
#define DRIZZLE_SYSVAR_NAME(name) mysql_sysvar_ ## name
192
#define DRIZZLE_SYSVAR(name) \
193
((struct st_mysql_sys_var *)&(DRIZZLE_SYSVAR_NAME(name)))
196
for global variables, the value pointer is the first
197
element after the header, the default value is the second.
198
for thread variables, the value offset is the first
199
element after the header, the default value is the second.
203
#define DECLARE_DRIZZLE_SYSVAR_BASIC(name, type) struct { \
204
DRIZZLE_PLUGIN_VAR_HEADER; \
206
const type def_val; \
207
} DRIZZLE_SYSVAR_NAME(name)
209
#define DECLARE_DRIZZLE_SYSVAR_SIMPLE(name, type) struct { \
210
DRIZZLE_PLUGIN_VAR_HEADER; \
211
type *value; type def_val; \
212
type min_val; type max_val; \
214
} DRIZZLE_SYSVAR_NAME(name)
216
#define DECLARE_DRIZZLE_SYSVAR_TYPELIB(name, type) struct { \
217
DRIZZLE_PLUGIN_VAR_HEADER; \
218
type *value; type def_val; \
220
} DRIZZLE_SYSVAR_NAME(name)
222
#define DECLARE_SessionVAR_FUNC(type) \
223
type *(*resolve)(Session *session, int offset)
225
#define DECLARE_DRIZZLE_SessionVAR_BASIC(name, type) struct { \
226
DRIZZLE_PLUGIN_VAR_HEADER; \
228
const type def_val; \
229
DECLARE_SessionVAR_FUNC(type); \
230
} DRIZZLE_SYSVAR_NAME(name)
232
#define DECLARE_DRIZZLE_SessionVAR_SIMPLE(name, type) struct { \
233
DRIZZLE_PLUGIN_VAR_HEADER; \
235
type def_val; type min_val; \
236
type max_val; type blk_sz; \
237
DECLARE_SessionVAR_FUNC(type); \
238
} DRIZZLE_SYSVAR_NAME(name)
240
#define DECLARE_DRIZZLE_SessionVAR_TYPELIB(name, type) struct { \
241
DRIZZLE_PLUGIN_VAR_HEADER; \
244
DECLARE_SessionVAR_FUNC(type); \
246
} DRIZZLE_SYSVAR_NAME(name)
250
the following declarations are for use by plugin implementors
253
#define DRIZZLE_SYSVAR_BOOL(name, varname, opt, comment, check, update, def) \
254
DECLARE_DRIZZLE_SYSVAR_BASIC(name, bool) = { \
255
PLUGIN_VAR_BOOL | ((opt) & PLUGIN_VAR_MASK), \
256
#name, comment, check, update, &varname, def}
258
#define DRIZZLE_SYSVAR_STR(name, varname, opt, comment, check, update, def) \
259
DECLARE_DRIZZLE_SYSVAR_BASIC(name, char *) = { \
260
PLUGIN_VAR_STR | ((opt) & PLUGIN_VAR_MASK), \
261
#name, comment, check, update, &varname, def}
263
#define DRIZZLE_SYSVAR_INT(name, varname, opt, comment, check, update, def, min, max, blk) \
264
DECLARE_DRIZZLE_SYSVAR_SIMPLE(name, int) = { \
265
PLUGIN_VAR_INT | ((opt) & PLUGIN_VAR_MASK), \
266
#name, comment, check, update, &varname, def, min, max, blk }
268
#define DRIZZLE_SYSVAR_UINT(name, varname, opt, comment, check, update, def, min, max, blk) \
269
DECLARE_DRIZZLE_SYSVAR_SIMPLE(name, unsigned int) = { \
270
PLUGIN_VAR_INT | PLUGIN_VAR_UNSIGNED | ((opt) & PLUGIN_VAR_MASK), \
271
#name, comment, check, update, &varname, def, min, max, blk }
273
#define DRIZZLE_SYSVAR_LONG(name, varname, opt, comment, check, update, def, min, max, blk) \
274
DECLARE_DRIZZLE_SYSVAR_SIMPLE(name, long) = { \
275
PLUGIN_VAR_LONG | ((opt) & PLUGIN_VAR_MASK), \
276
#name, comment, check, update, &varname, def, min, max, blk }
278
#define DRIZZLE_SYSVAR_ULONG(name, varname, opt, comment, check, update, def, min, max, blk) \
279
DECLARE_DRIZZLE_SYSVAR_SIMPLE(name, unsigned long) = { \
280
PLUGIN_VAR_LONG | PLUGIN_VAR_UNSIGNED | ((opt) & PLUGIN_VAR_MASK), \
281
#name, comment, check, update, &varname, def, min, max, blk }
283
#define DRIZZLE_SYSVAR_LONGLONG(name, varname, opt, comment, check, update, def, min, max, blk) \
284
DECLARE_DRIZZLE_SYSVAR_SIMPLE(name, int64_t) = { \
285
PLUGIN_VAR_LONGLONG | ((opt) & PLUGIN_VAR_MASK), \
286
#name, comment, check, update, &varname, def, min, max, blk }
288
#define DRIZZLE_SYSVAR_ULONGLONG(name, varname, opt, comment, check, update, def, min, max, blk) \
289
DECLARE_DRIZZLE_SYSVAR_SIMPLE(name, uint64_t) = { \
290
PLUGIN_VAR_LONGLONG | PLUGIN_VAR_UNSIGNED | ((opt) & PLUGIN_VAR_MASK), \
291
#name, comment, check, update, &varname, def, min, max, blk }
293
#define DRIZZLE_SYSVAR_ENUM(name, varname, opt, comment, check, update, def, typelib) \
294
DECLARE_DRIZZLE_SYSVAR_TYPELIB(name, unsigned long) = { \
295
PLUGIN_VAR_ENUM | ((opt) & PLUGIN_VAR_MASK), \
296
#name, comment, check, update, &varname, def, typelib }
298
#define DRIZZLE_SYSVAR_SET(name, varname, opt, comment, check, update, def, typelib) \
299
DECLARE_DRIZZLE_SYSVAR_TYPELIB(name, uint64_t) = { \
300
PLUGIN_VAR_SET | ((opt) & PLUGIN_VAR_MASK), \
301
#name, comment, check, update, &varname, def, typelib }
303
#define DRIZZLE_SessionVAR_BOOL(name, opt, comment, check, update, def) \
304
DECLARE_DRIZZLE_SessionVAR_BASIC(name, char) = { \
305
PLUGIN_VAR_BOOL | PLUGIN_VAR_SessionLOCAL | ((opt) & PLUGIN_VAR_MASK), \
306
#name, comment, check, update, -1, def, NULL}
308
#define DRIZZLE_SessionVAR_STR(name, opt, comment, check, update, def) \
309
DECLARE_DRIZZLE_SessionVAR_BASIC(name, char *) = { \
310
PLUGIN_VAR_STR | PLUGIN_VAR_SessionLOCAL | ((opt) & PLUGIN_VAR_MASK), \
311
#name, comment, check, update, -1, def, NULL}
313
#define DRIZZLE_SessionVAR_INT(name, opt, comment, check, update, def, min, max, blk) \
314
DECLARE_DRIZZLE_SessionVAR_SIMPLE(name, int) = { \
315
PLUGIN_VAR_INT | PLUGIN_VAR_SessionLOCAL | ((opt) & PLUGIN_VAR_MASK), \
316
#name, comment, check, update, -1, def, min, max, blk, NULL }
318
#define DRIZZLE_SessionVAR_UINT(name, opt, comment, check, update, def, min, max, blk) \
319
DECLARE_DRIZZLE_SessionVAR_SIMPLE(name, unsigned int) = { \
320
PLUGIN_VAR_INT | PLUGIN_VAR_SessionLOCAL | PLUGIN_VAR_UNSIGNED | ((opt) & PLUGIN_VAR_MASK), \
321
#name, comment, check, update, -1, def, min, max, blk, NULL }
323
#define DRIZZLE_SessionVAR_LONG(name, opt, comment, check, update, def, min, max, blk) \
324
DECLARE_DRIZZLE_SessionVAR_SIMPLE(name, long) = { \
325
PLUGIN_VAR_LONG | PLUGIN_VAR_SessionLOCAL | ((opt) & PLUGIN_VAR_MASK), \
326
#name, comment, check, update, -1, def, min, max, blk, NULL }
328
#define DRIZZLE_SessionVAR_ULONG(name, opt, comment, check, update, def, min, max, blk) \
329
DECLARE_DRIZZLE_SessionVAR_SIMPLE(name, unsigned long) = { \
330
PLUGIN_VAR_LONG | PLUGIN_VAR_SessionLOCAL | PLUGIN_VAR_UNSIGNED | ((opt) & PLUGIN_VAR_MASK), \
331
#name, comment, check, update, -1, def, min, max, blk, NULL }
333
#define DRIZZLE_SessionVAR_LONGLONG(name, opt, comment, check, update, def, min, max, blk) \
334
DECLARE_DRIZZLE_SessionVAR_SIMPLE(name, int64_t) = { \
335
PLUGIN_VAR_LONGLONG | PLUGIN_VAR_SessionLOCAL | ((opt) & PLUGIN_VAR_MASK), \
336
#name, comment, check, update, -1, def, min, max, blk, NULL }
338
#define DRIZZLE_SessionVAR_ULONGLONG(name, opt, comment, check, update, def, min, max, blk) \
339
DECLARE_DRIZZLE_SessionVAR_SIMPLE(name, uint64_t) = { \
340
PLUGIN_VAR_LONGLONG | PLUGIN_VAR_SessionLOCAL | PLUGIN_VAR_UNSIGNED | ((opt) & PLUGIN_VAR_MASK), \
341
#name, comment, check, update, -1, def, min, max, blk, NULL }
343
#define DRIZZLE_SessionVAR_ENUM(name, opt, comment, check, update, def, typelib) \
344
DECLARE_DRIZZLE_SessionVAR_TYPELIB(name, unsigned long) = { \
345
PLUGIN_VAR_ENUM | PLUGIN_VAR_SessionLOCAL | ((opt) & PLUGIN_VAR_MASK), \
346
#name, comment, check, update, -1, def, NULL, typelib }
348
#define DRIZZLE_SessionVAR_SET(name, opt, comment, check, update, def, typelib) \
349
DECLARE_DRIZZLE_SessionVAR_TYPELIB(name, uint64_t) = { \
350
PLUGIN_VAR_SET | PLUGIN_VAR_SessionLOCAL | ((opt) & PLUGIN_VAR_MASK), \
351
#name, comment, check, update, -1, def, NULL, typelib }
353
/* accessor macros */
355
#define SYSVAR(name) \
356
(*(DRIZZLE_SYSVAR_NAME(name).value))
358
/* when session == null, result points to global value */
359
#define SessionVAR(session, name) \
360
(*(DRIZZLE_SYSVAR_NAME(name).resolve(session, DRIZZLE_SYSVAR_NAME(name).offset)))
363
/*************************************************************************
364
st_mysql_value struct for reading values from mysqld.
365
Used by server variables framework to parse user-provided values.
366
Will be used for arguments when implementing UDFs.
368
Note that val_str() returns a string in temporary memory
369
that will be freed at the end of statement. Copy the string
370
if you need it to persist.
373
#define DRIZZLE_VALUE_TYPE_STRING 0
374
#define DRIZZLE_VALUE_TYPE_REAL 1
375
#define DRIZZLE_VALUE_TYPE_INT 2
377
struct st_mysql_value
379
int (*value_type)(struct st_mysql_value *);
380
const char *(*val_str)(struct st_mysql_value *, char *buffer, int *length);
381
int (*val_real)(struct st_mysql_value *, double *realbuf);
382
int (*val_int)(struct st_mysql_value *, int64_t *intbuf);
201
431
@param prefix prefix for temporary file name
203
@retval >= 0 a file handle that can be passed to dup or internal::my_close
433
@retval >= 0 a file handle that can be passed to dup or my_close
205
435
int mysql_tmpfile(const char *prefix);
207
} /* namespace drizzled */
209
#endif /* DRIZZLED_PLUGIN_H */
438
Check the killed state of a connection
441
In MySQL support for the KILL statement is cooperative. The KILL
442
statement only sets a "killed" flag. This function returns the value
443
of that flag. A thread should check it often, especially inside
444
time-consuming loops, and gracefully abort the operation if it is
447
@param session user thread connection handle
448
@retval 0 the connection is active
449
@retval 1 the connection has been killed
451
int session_killed(const Session *session);
455
Return the thread id of a user thread
457
@param session user thread connection handle
460
unsigned long session_get_thread_id(const Session *session);
462
const charset_info_st *session_charset(Session *session);
463
char **session_query(Session *session);
464
int session_non_transactional_update(const Session *session);
465
void session_mark_transaction_to_rollback(Session *session, bool all);
469
Allocate memory in the connection's local memory pool
472
When properly used in place of @c malloc(), this can significantly
473
improve concurrency. Don't use this or related functions to allocate
474
large chunks of memory. Use for temporary storage only. The memory
475
will be freed automatically at the end of the statement; no explicit
476
code is required to prevent memory leaks.
480
void *session_alloc(Session *session, unsigned int size);
484
void *session_calloc(Session *session, unsigned int size);
488
char *session_strdup(Session *session, const char *str);
492
char *session_strmake(Session *session, const char *str, unsigned int size);
496
void *session_memdup(Session *session, const void* str, unsigned int size);
499
Get the XID for this connection's transaction
501
@param session user thread connection handle
502
@param xid location where identifier is stored
504
void session_get_xid(const Session *session, DRIZZLE_XID *xid);
507
Invalidate the query cache for a given table.
509
@param session user thread connection handle
510
@param key databasename\\0tablename\\0
511
@param key_length length of key in bytes, including the NUL bytes
512
@param using_trx flag: TRUE if using transactions, FALSE otherwise
514
void mysql_query_cache_invalidate4(Session *session,
515
const char *key, unsigned int key_length,
524
Provide a handler data getter to simplify coding
528
session_get_ha_data(const Session *session, const drizzled::plugin::StorageEngine *engine)
530
return *session_ha_data(session, engine);
534
Provide a handler data setter to simplify coding
538
session_set_ha_data(const Session *session, const drizzled::plugin::StorageEngine *engine,
541
*session_ha_data(session, engine)= (void*) ha_data;
545
#endif /* _my_plugin_h */