49
typedef drizzle_lex_string LEX_STRING;
52
extern boost::filesystem::path plugin_dir;
54
namespace plugin { class StorageEngine; }
57
36
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 \
37
drizzle_declare_plugin and drizzle_declare_plugin_end there should
38
be a drizzled::plugin::Manifest for each plugin to be declared.
42
#ifndef PANDORA_DYNAMIC_PLUGIN
43
#define __DRIZZLE_DECLARE_PLUGIN(NAME, DECLS) \
44
drizzled::plugin::Manifest DECLS[]= {
46
#define __DRIZZLE_DECLARE_PLUGIN(NAME, DECLS) \
47
drizzled::plugin::Manifest _drizzled_plugin_declaration_[]= {
50
#define drizzle_declare_plugin(NAME) \
51
__DRIZZLE_DECLARE_PLUGIN(NAME, \
52
builtin_ ## NAME ## _plugin)
54
#define drizzle_declare_plugin_end ,{0,0,0,0,PLUGIN_LICENSE_GPL,0,0,0,0,0}}
59
the following flags are valid for plugin_init()
61
#define PLUGIN_INIT_SKIP_DYNAMIC_LOADING 1
62
#define PLUGIN_INIT_SKIP_PLUGIN_TABLE 2
63
#define PLUGIN_INIT_SKIP_INITIALIZATION 4
65
#define INITIAL_LEX_PLUGIN_LIST_SIZE 16
68
declarations for SHOW STATUS support in plugins
70
enum enum_mysql_show_type
72
SHOW_UNDEF, SHOW_BOOL, SHOW_INT, SHOW_LONG,
73
SHOW_LONGLONG, SHOW_CHAR, SHOW_CHAR_PTR,
74
SHOW_ARRAY, SHOW_FUNC, SHOW_KEY_CACHE_LONG, SHOW_KEY_CACHE_LONGLONG,
75
SHOW_LONG_STATUS, SHOW_DOUBLE_STATUS, SHOW_HAVE,
76
SHOW_MY_BOOL, SHOW_HA_ROWS, SHOW_SYS, SHOW_INT_NOFLUSH,
77
SHOW_LONGLONG_STATUS, SHOW_DOUBLE, SHOW_SIZE
80
struct st_mysql_show_var {
83
enum enum_mysql_show_type type;
86
typedef enum enum_mysql_show_type SHOW_TYPE;
87
typedef struct st_mysql_show_var SHOW_VAR;
90
#define SHOW_VAR_FUNC_BUFF_SIZE 1024
91
typedef int (*mysql_show_var_func)(struct st_mysql_show_var *, char *);
93
struct st_show_var_func_container {
94
mysql_show_var_func func;
84
97
declarations for server variables and command line options
141
156
For example, strings may require memory to be allocated.
143
158
typedef void (*mysql_var_update_func)(Session *session,
144
drizzle_sys_var *var,
159
struct st_mysql_sys_var *var,
145
160
void *var_ptr, const void *save);
150
skeleton of a plugin variable - portion of structure common to all.
152
struct drizzle_sys_var
163
/* the following declarations are for internal use only */
166
#define PLUGIN_VAR_MASK \
167
(PLUGIN_VAR_READONLY | PLUGIN_VAR_NOSYSVAR | \
168
PLUGIN_VAR_NOCMDOPT | PLUGIN_VAR_NOCMDARG | \
169
PLUGIN_VAR_OPCMDARG | PLUGIN_VAR_RQCMDARG | PLUGIN_VAR_MEMALLOC)
171
#define DRIZZLE_PLUGIN_VAR_HEADER \
174
const char *comment; \
175
mysql_var_check_func check; \
176
mysql_var_update_func update
178
#define DRIZZLE_SYSVAR_NAME(name) mysql_sysvar_ ## name
179
#define DRIZZLE_SYSVAR(name) \
180
((struct st_mysql_sys_var *)&(DRIZZLE_SYSVAR_NAME(name)))
183
for global variables, the value pointer is the first
184
element after the header, the default value is the second.
185
for thread variables, the value offset is the first
186
element after the header, the default value is the second.
190
#define DECLARE_DRIZZLE_SYSVAR_BASIC(name, type) struct { \
191
DRIZZLE_PLUGIN_VAR_HEADER; \
193
const type def_val; \
194
} DRIZZLE_SYSVAR_NAME(name)
196
#define DECLARE_DRIZZLE_SYSVAR_SIMPLE(name, type) struct { \
197
DRIZZLE_PLUGIN_VAR_HEADER; \
198
type *value; type def_val; \
199
type min_val; type max_val; \
201
} DRIZZLE_SYSVAR_NAME(name)
203
#define DECLARE_DRIZZLE_SYSVAR_TYPELIB(name, type) struct { \
204
DRIZZLE_PLUGIN_VAR_HEADER; \
205
type *value; type def_val; \
207
} DRIZZLE_SYSVAR_NAME(name)
209
#define DECLARE_SessionVAR_FUNC(type) \
210
type *(*resolve)(Session *session, int offset)
212
#define DECLARE_DRIZZLE_SessionVAR_BASIC(name, type) struct { \
213
DRIZZLE_PLUGIN_VAR_HEADER; \
215
const type def_val; \
216
DECLARE_SessionVAR_FUNC(type); \
217
} DRIZZLE_SYSVAR_NAME(name)
219
#define DECLARE_DRIZZLE_SessionVAR_SIMPLE(name, type) struct { \
220
DRIZZLE_PLUGIN_VAR_HEADER; \
222
type def_val; type min_val; \
223
type max_val; type blk_sz; \
224
DECLARE_SessionVAR_FUNC(type); \
225
} DRIZZLE_SYSVAR_NAME(name)
227
#define DECLARE_DRIZZLE_SessionVAR_TYPELIB(name, type) struct { \
228
DRIZZLE_PLUGIN_VAR_HEADER; \
231
DECLARE_SessionVAR_FUNC(type); \
233
} DRIZZLE_SYSVAR_NAME(name)
237
the following declarations are for use by plugin implementors
240
#define DRIZZLE_SYSVAR_BOOL(name, varname, opt, comment, check, update, def) \
241
DECLARE_DRIZZLE_SYSVAR_BASIC(name, bool) = { \
242
PLUGIN_VAR_BOOL | ((opt) & PLUGIN_VAR_MASK), \
243
#name, comment, check, update, &varname, def}
245
#define DRIZZLE_SYSVAR_STR(name, varname, opt, comment, check, update, def) \
246
DECLARE_DRIZZLE_SYSVAR_BASIC(name, char *) = { \
247
PLUGIN_VAR_STR | ((opt) & PLUGIN_VAR_MASK), \
248
#name, comment, check, update, &varname, def}
250
#define DRIZZLE_SYSVAR_INT(name, varname, opt, comment, check, update, def, min, max, blk) \
251
DECLARE_DRIZZLE_SYSVAR_SIMPLE(name, int) = { \
252
PLUGIN_VAR_INT | ((opt) & PLUGIN_VAR_MASK), \
253
#name, comment, check, update, &varname, def, min, max, blk }
255
#define DRIZZLE_SYSVAR_UINT(name, varname, opt, comment, check, update, def, min, max, blk) \
256
DECLARE_DRIZZLE_SYSVAR_SIMPLE(name, unsigned int) = { \
257
PLUGIN_VAR_INT | PLUGIN_VAR_UNSIGNED | ((opt) & PLUGIN_VAR_MASK), \
258
#name, comment, check, update, &varname, def, min, max, blk }
260
#define DRIZZLE_SYSVAR_LONG(name, varname, opt, comment, check, update, def, min, max, blk) \
261
DECLARE_DRIZZLE_SYSVAR_SIMPLE(name, long) = { \
262
PLUGIN_VAR_LONG | ((opt) & PLUGIN_VAR_MASK), \
263
#name, comment, check, update, &varname, def, min, max, blk }
265
#define DRIZZLE_SYSVAR_ULONG(name, varname, opt, comment, check, update, def, min, max, blk) \
266
DECLARE_DRIZZLE_SYSVAR_SIMPLE(name, unsigned long) = { \
267
PLUGIN_VAR_LONG | PLUGIN_VAR_UNSIGNED | ((opt) & PLUGIN_VAR_MASK), \
268
#name, comment, check, update, &varname, def, min, max, blk }
270
#define DRIZZLE_SYSVAR_LONGLONG(name, varname, opt, comment, check, update, def, min, max, blk) \
271
DECLARE_DRIZZLE_SYSVAR_SIMPLE(name, int64_t) = { \
272
PLUGIN_VAR_LONGLONG | ((opt) & PLUGIN_VAR_MASK), \
273
#name, comment, check, update, &varname, def, min, max, blk }
275
#define DRIZZLE_SYSVAR_ULONGLONG(name, varname, opt, comment, check, update, def, min, max, blk) \
276
DECLARE_DRIZZLE_SYSVAR_SIMPLE(name, uint64_t) = { \
277
PLUGIN_VAR_LONGLONG | PLUGIN_VAR_UNSIGNED | ((opt) & PLUGIN_VAR_MASK), \
278
#name, comment, check, update, &varname, def, min, max, blk }
280
#define DRIZZLE_SYSVAR_ENUM(name, varname, opt, comment, check, update, def, typelib) \
281
DECLARE_DRIZZLE_SYSVAR_TYPELIB(name, unsigned long) = { \
282
PLUGIN_VAR_ENUM | ((opt) & PLUGIN_VAR_MASK), \
283
#name, comment, check, update, &varname, def, typelib }
285
#define DRIZZLE_SYSVAR_SET(name, varname, opt, comment, check, update, def, typelib) \
286
DECLARE_DRIZZLE_SYSVAR_TYPELIB(name, uint64_t) = { \
287
PLUGIN_VAR_SET | ((opt) & PLUGIN_VAR_MASK), \
288
#name, comment, check, update, &varname, def, typelib }
290
#define DRIZZLE_SessionVAR_BOOL(name, opt, comment, check, update, def) \
291
DECLARE_DRIZZLE_SessionVAR_BASIC(name, char) = { \
292
PLUGIN_VAR_BOOL | PLUGIN_VAR_SessionLOCAL | ((opt) & PLUGIN_VAR_MASK), \
293
#name, comment, check, update, -1, def, NULL}
295
#define DRIZZLE_SessionVAR_STR(name, opt, comment, check, update, def) \
296
DECLARE_DRIZZLE_SessionVAR_BASIC(name, char *) = { \
297
PLUGIN_VAR_STR | PLUGIN_VAR_SessionLOCAL | ((opt) & PLUGIN_VAR_MASK), \
298
#name, comment, check, update, -1, def, NULL}
300
#define DRIZZLE_SessionVAR_INT(name, opt, comment, check, update, def, min, max, blk) \
301
DECLARE_DRIZZLE_SessionVAR_SIMPLE(name, int) = { \
302
PLUGIN_VAR_INT | PLUGIN_VAR_SessionLOCAL | ((opt) & PLUGIN_VAR_MASK), \
303
#name, comment, check, update, -1, def, min, max, blk, NULL }
305
#define DRIZZLE_SessionVAR_UINT(name, opt, comment, check, update, def, min, max, blk) \
306
DECLARE_DRIZZLE_SessionVAR_SIMPLE(name, unsigned int) = { \
307
PLUGIN_VAR_INT | PLUGIN_VAR_SessionLOCAL | PLUGIN_VAR_UNSIGNED | ((opt) & PLUGIN_VAR_MASK), \
308
#name, comment, check, update, -1, def, min, max, blk, NULL }
310
#define DRIZZLE_SessionVAR_LONG(name, opt, comment, check, update, def, min, max, blk) \
311
DECLARE_DRIZZLE_SessionVAR_SIMPLE(name, long) = { \
312
PLUGIN_VAR_LONG | PLUGIN_VAR_SessionLOCAL | ((opt) & PLUGIN_VAR_MASK), \
313
#name, comment, check, update, -1, def, min, max, blk, NULL }
315
#define DRIZZLE_SessionVAR_ULONG(name, opt, comment, check, update, def, min, max, blk) \
316
DECLARE_DRIZZLE_SessionVAR_SIMPLE(name, unsigned long) = { \
317
PLUGIN_VAR_LONG | PLUGIN_VAR_SessionLOCAL | PLUGIN_VAR_UNSIGNED | ((opt) & PLUGIN_VAR_MASK), \
318
#name, comment, check, update, -1, def, min, max, blk, NULL }
320
#define DRIZZLE_SessionVAR_LONGLONG(name, opt, comment, check, update, def, min, max, blk) \
321
DECLARE_DRIZZLE_SessionVAR_SIMPLE(name, int64_t) = { \
322
PLUGIN_VAR_LONGLONG | PLUGIN_VAR_SessionLOCAL | ((opt) & PLUGIN_VAR_MASK), \
323
#name, comment, check, update, -1, def, min, max, blk, NULL }
325
#define DRIZZLE_SessionVAR_ULONGLONG(name, opt, comment, check, update, def, min, max, blk) \
326
DECLARE_DRIZZLE_SessionVAR_SIMPLE(name, uint64_t) = { \
327
PLUGIN_VAR_LONGLONG | PLUGIN_VAR_SessionLOCAL | PLUGIN_VAR_UNSIGNED | ((opt) & PLUGIN_VAR_MASK), \
328
#name, comment, check, update, -1, def, min, max, blk, NULL }
330
#define DRIZZLE_SessionVAR_ENUM(name, opt, comment, check, update, def, typelib) \
331
DECLARE_DRIZZLE_SessionVAR_TYPELIB(name, unsigned long) = { \
332
PLUGIN_VAR_ENUM | PLUGIN_VAR_SessionLOCAL | ((opt) & PLUGIN_VAR_MASK), \
333
#name, comment, check, update, -1, def, NULL, typelib }
335
#define DRIZZLE_SessionVAR_SET(name, opt, comment, check, update, def, typelib) \
336
DECLARE_DRIZZLE_SessionVAR_TYPELIB(name, uint64_t) = { \
337
PLUGIN_VAR_SET | PLUGIN_VAR_SessionLOCAL | ((opt) & PLUGIN_VAR_MASK), \
338
#name, comment, check, update, -1, def, NULL, typelib }
340
/* accessor macros */
342
#define SYSVAR(name) \
343
(*(DRIZZLE_SYSVAR_NAME(name).value))
345
/* when session == null, result points to global value */
346
#define SessionVAR(session, name) \
347
(*(DRIZZLE_SYSVAR_NAME(name).resolve(session, DRIZZLE_SYSVAR_NAME(name).offset)))
350
struct StorageEngine;
359
std::string description;
362
Plugin(std::string in_name, std::string in_version,
363
std::string in_author, std::string in_description)
364
: name(in_name), version(in_version),
365
author(in_author), description(in_description)
370
virtual void add_functions() {}
156
void plugin_opt_set_limits(option *options, const drizzle_sys_var *opt);
374
/*************************************************************************
375
st_mysql_value struct for reading values from mysqld.
376
Used by server variables framework to parse user-provided values.
377
Will be used for arguments when implementing UDFs.
379
Note that val_str() returns a string in temporary memory
380
that will be freed at the end of statement. Copy the string
381
if you need it to persist.
384
#define DRIZZLE_VALUE_TYPE_STRING 0
385
#define DRIZZLE_VALUE_TYPE_REAL 1
386
#define DRIZZLE_VALUE_TYPE_INT 2
388
struct st_mysql_value
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);
390
int (*value_type)(struct st_mysql_value *);
391
const char *(*val_str)(struct st_mysql_value *, char *buffer, int *length);
392
int (*val_real)(struct st_mysql_value *, double *realbuf);
393
int (*val_int)(struct st_mysql_value *, int64_t *intbuf);
201
430
@param prefix prefix for temporary file name
203
@retval >= 0 a file handle that can be passed to dup or internal::my_close
432
@retval >= 0 a file handle that can be passed to dup or my_close
205
434
int mysql_tmpfile(const char *prefix);
207
} /* namespace drizzled */
209
#endif /* DRIZZLED_PLUGIN_H */
437
Check the killed state of a connection
440
In MySQL support for the KILL statement is cooperative. The KILL
441
statement only sets a "killed" flag. This function returns the value
442
of that flag. A thread should check it often, especially inside
443
time-consuming loops, and gracefully abort the operation if it is
446
@param session user thread connection handle
447
@retval 0 the connection is active
448
@retval 1 the connection has been killed
450
int session_killed(const Session *session);
454
Return the thread id of a user thread
456
@param session user thread connection handle
459
unsigned long session_get_thread_id(const Session *session);
461
const charset_info_st *session_charset(Session *session);
462
char **session_query(Session *session);
463
int session_non_transactional_update(const Session *session);
464
void session_mark_transaction_to_rollback(Session *session, bool all);
468
Allocate memory in the connection's local memory pool
471
When properly used in place of @c malloc(), this can significantly
472
improve concurrency. Don't use this or related functions to allocate
473
large chunks of memory. Use for temporary storage only. The memory
474
will be freed automatically at the end of the statement; no explicit
475
code is required to prevent memory leaks.
479
void *session_alloc(Session *session, unsigned int size);
483
void *session_calloc(Session *session, unsigned int size);
487
char *session_strdup(Session *session, const char *str);
491
char *session_strmake(Session *session, const char *str, unsigned int size);
495
void *session_memdup(Session *session, const void* str, unsigned int size);
498
Get the XID for this connection's transaction
500
@param session user thread connection handle
501
@param xid location where identifier is stored
503
void session_get_xid(const Session *session, DRIZZLE_XID *xid);
506
Invalidate the query cache for a given table.
508
@param session user thread connection handle
509
@param key databasename\\0tablename\\0
510
@param key_length length of key in bytes, including the NUL bytes
511
@param using_trx flag: TRUE if using transactions, FALSE otherwise
513
void mysql_query_cache_invalidate4(Session *session,
514
const char *key, unsigned int key_length,
523
Provide a handler data getter to simplify coding
527
session_get_ha_data(const Session *session, const struct StorageEngine *engine)
529
return *session_ha_data(session, engine);
533
Provide a handler data setter to simplify coding
537
session_set_ha_data(const Session *session, const struct StorageEngine *engine,
540
*session_ha_data(session, engine)= (void*) ha_data;
544
#endif /* _my_plugin_h */