~drizzle-trunk/drizzle/development

« back to all changes in this revision

Viewing changes to drizzled/plugin.h

Merged in move of status variables.

Show diffs side-by-side

added added

removed removed

Lines of Context:
20
20
#ifndef DRIZZLED_PLUGIN_H
21
21
#define DRIZZLED_PLUGIN_H
22
22
 
23
 
#include <boost/program_options.hpp>
24
 
#include <boost/filesystem.hpp>
25
 
 
26
23
#include "drizzled/module/manifest.h"
27
24
#include "drizzled/module/module.h"
28
25
#include "drizzled/plugin/version.h"
30
27
#include "drizzled/definitions.h"
31
28
 
32
29
#include "drizzled/lex_string.h"
33
 
#include "drizzled/sys_var.h"
34
30
#include "drizzled/xid.h"
35
31
 
36
32
namespace drizzled
49
45
typedef drizzle_lex_string LEX_STRING;
50
46
struct option;
51
47
 
52
 
extern boost::filesystem::path plugin_dir;
 
48
extern char *opt_plugin_add;
 
49
extern char *opt_plugin_remove;
 
50
extern char *opt_plugin_load;
 
51
extern char *opt_plugin_dir_ptr;
 
52
extern char opt_plugin_dir[FN_REFLEN];
53
53
 
54
54
namespace plugin { class StorageEngine; }
55
55
 
67
67
 
68
68
 
69
69
#define DRIZZLE_DECLARE_PLUGIN_END
70
 
#define DRIZZLE_PLUGIN(init,system,options) \
 
70
#define DRIZZLE_PLUGIN(init,system) \
71
71
  DRIZZLE_DECLARE_PLUGIN \
72
72
  { \
73
73
    DRIZZLE_VERSION_ID, \
76
76
    STRINGIFY_ARG(PANDORA_MODULE_AUTHOR), \
77
77
    STRINGIFY_ARG(PANDORA_MODULE_TITLE), \
78
78
    PANDORA_MODULE_LICENSE, \
79
 
    init, system, options \
 
79
    init, system, NULL \
80
80
  } 
81
81
 
82
82
 
83
83
/*
 
84
  declarations for SHOW STATUS support in plugins
 
85
*/
 
86
enum enum_mysql_show_type
 
87
{
 
88
  SHOW_UNDEF, SHOW_BOOL, SHOW_INT, SHOW_LONG,
 
89
  SHOW_LONGLONG, SHOW_CHAR, SHOW_CHAR_PTR,
 
90
  SHOW_FUNC, SHOW_KEY_CACHE_LONG, SHOW_KEY_CACHE_LONGLONG,
 
91
  SHOW_LONG_STATUS, SHOW_DOUBLE_STATUS,
 
92
  SHOW_MY_BOOL, SHOW_HA_ROWS, SHOW_SYS, SHOW_INT_NOFLUSH,
 
93
  SHOW_LONGLONG_STATUS, SHOW_DOUBLE, SHOW_SIZE
 
94
};
 
95
 
 
96
struct drizzle_show_var {
 
97
  const char *name;
 
98
  char *value;
 
99
  enum enum_mysql_show_type type;
 
100
};
 
101
 
 
102
typedef enum enum_mysql_show_type SHOW_TYPE;
 
103
 
 
104
 
 
105
#define SHOW_VAR_FUNC_BUFF_SIZE 1024
 
106
typedef int (*mysql_show_var_func)(drizzle_show_var *, char *);
 
107
 
 
108
struct st_show_var_func_container {
 
109
  mysql_show_var_func func;
 
110
};
 
111
/*
84
112
  declarations for server variables and command line options
85
113
*/
86
114
 
145
173
                                      void *var_ptr, const void *save);
146
174
 
147
175
 
 
176
/* the following declarations are for internal use only */
 
177
 
 
178
 
 
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)
 
183
 
 
184
#define DRIZZLE_PLUGIN_VAR_HEADER \
 
185
  int flags;                    \
 
186
  const char *name;             \
 
187
  const char *comment;          \
 
188
  mysql_var_check_func check;   \
 
189
  mysql_var_update_func update
 
190
 
 
191
#define DRIZZLE_SYSVAR_NAME(name) mysql_sysvar_ ## name
 
192
#define DRIZZLE_SYSVAR(name) \
 
193
  ((drizzle_sys_var *)(&(DRIZZLE_SYSVAR_NAME(name))))
 
194
 
 
195
/*
 
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.
 
200
*/
 
201
 
 
202
 
 
203
#define DECLARE_DRIZZLE_SYSVAR_BASIC(name, type) struct { \
 
204
  DRIZZLE_PLUGIN_VAR_HEADER;      \
 
205
  type *value;                  \
 
206
  const type def_val;           \
 
207
} DRIZZLE_SYSVAR_NAME(name)
 
208
 
 
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;   \
 
213
  type blk_sz;                  \
 
214
} DRIZZLE_SYSVAR_NAME(name)
 
215
 
 
216
#define DECLARE_SessionVAR_FUNC(type) \
 
217
  type *(*resolve)(Session *session, int offset)
 
218
 
 
219
#define DECLARE_DRIZZLE_SessionVAR_BASIC(name, type) struct { \
 
220
  DRIZZLE_PLUGIN_VAR_HEADER;      \
 
221
  int offset;                   \
 
222
  const type def_val;           \
 
223
  DECLARE_SessionVAR_FUNC(type);    \
 
224
} DRIZZLE_SYSVAR_NAME(name)
 
225
 
 
226
#define DECLARE_DRIZZLE_SessionVAR_SIMPLE(name, type) struct { \
 
227
  DRIZZLE_PLUGIN_VAR_HEADER;      \
 
228
  int offset;                   \
 
229
  type def_val; type min_val;   \
 
230
  type max_val; type blk_sz;    \
 
231
  DECLARE_SessionVAR_FUNC(type);    \
 
232
} DRIZZLE_SYSVAR_NAME(name)
 
233
 
 
234
#define DECLARE_DRIZZLE_SessionVAR_TYPELIB(name, type) struct { \
 
235
  DRIZZLE_PLUGIN_VAR_HEADER;      \
 
236
  int offset;                   \
 
237
  type def_val;                 \
 
238
  DECLARE_SessionVAR_FUNC(type);    \
 
239
  TYPELIB *typelib;             \
 
240
} DRIZZLE_SYSVAR_NAME(name)
 
241
 
 
242
 
 
243
/*
 
244
  the following declarations are for use by plugin implementors
 
245
*/
 
246
 
 
247
#define DRIZZLE_SYSVAR_BOOL(name, varname, opt, comment, check, update, def) \
 
248
DECLARE_DRIZZLE_SYSVAR_BASIC(name, bool) = { \
 
249
  PLUGIN_VAR_BOOL | ((opt) & PLUGIN_VAR_MASK), \
 
250
  #name, comment, check, update, &varname, def}
 
251
 
 
252
#define DRIZZLE_SYSVAR_STR(name, varname, opt, comment, check, update, def) \
 
253
DECLARE_DRIZZLE_SYSVAR_BASIC(name, char *) = { \
 
254
  PLUGIN_VAR_STR | ((opt) & PLUGIN_VAR_MASK), \
 
255
  #name, comment, check, update, &varname, def}
 
256
 
 
257
#define DRIZZLE_SYSVAR_INT(name, varname, opt, comment, check, update, def, min, max, blk) \
 
258
DECLARE_DRIZZLE_SYSVAR_SIMPLE(name, int) = { \
 
259
  PLUGIN_VAR_INT | ((opt) & PLUGIN_VAR_MASK), \
 
260
  #name, comment, check, update, &varname, def, min, max, blk }
 
261
 
 
262
#define DRIZZLE_SYSVAR_UINT(name, varname, opt, comment, check, update, def, min, max, blk) \
 
263
DECLARE_DRIZZLE_SYSVAR_SIMPLE(name, unsigned int) = { \
 
264
  PLUGIN_VAR_INT | PLUGIN_VAR_UNSIGNED | ((opt) & PLUGIN_VAR_MASK), \
 
265
  #name, comment, check, update, &varname, def, min, max, blk }
 
266
 
 
267
#define DRIZZLE_SYSVAR_LONG(name, varname, opt, comment, check, update, def, min, max, blk) \
 
268
DECLARE_DRIZZLE_SYSVAR_SIMPLE(name, long) = { \
 
269
  PLUGIN_VAR_LONG | ((opt) & PLUGIN_VAR_MASK), \
 
270
  #name, comment, check, update, &varname, def, min, max, blk }
 
271
 
 
272
#define DRIZZLE_SYSVAR_ULONG(name, varname, opt, comment, check, update, def, min, max, blk) \
 
273
DECLARE_DRIZZLE_SYSVAR_SIMPLE(name, unsigned long) = { \
 
274
  PLUGIN_VAR_LONG | PLUGIN_VAR_UNSIGNED | ((opt) & PLUGIN_VAR_MASK), \
 
275
  #name, comment, check, update, &varname, def, min, max, blk }
 
276
 
 
277
#define DRIZZLE_SYSVAR_LONGLONG(name, varname, opt, comment, check, update, def, min, max, blk) \
 
278
DECLARE_DRIZZLE_SYSVAR_SIMPLE(name, int64_t) = { \
 
279
  PLUGIN_VAR_LONGLONG | ((opt) & PLUGIN_VAR_MASK), \
 
280
  #name, comment, check, update, &varname, def, min, max, blk }
 
281
 
 
282
#define DRIZZLE_SYSVAR_ULONGLONG(name, varname, opt, comment, check, update, def, min, max, blk) \
 
283
DECLARE_DRIZZLE_SYSVAR_SIMPLE(name, uint64_t) = { \
 
284
  PLUGIN_VAR_LONGLONG | PLUGIN_VAR_UNSIGNED | ((opt) & PLUGIN_VAR_MASK), \
 
285
  #name, comment, check, update, &varname, def, min, max, blk }
 
286
 
 
287
#define DRIZZLE_SessionVAR_BOOL(name, opt, comment, check, update, def) \
 
288
DECLARE_DRIZZLE_SessionVAR_BASIC(name, char) = { \
 
289
  PLUGIN_VAR_BOOL | PLUGIN_VAR_SessionLOCAL | ((opt) & PLUGIN_VAR_MASK), \
 
290
  #name, comment, check, update, -1, def, NULL}
 
291
 
 
292
#define DRIZZLE_SessionVAR_STR(name, opt, comment, check, update, def) \
 
293
DECLARE_DRIZZLE_SessionVAR_BASIC(name, char *) = { \
 
294
  PLUGIN_VAR_STR | PLUGIN_VAR_SessionLOCAL | ((opt) & PLUGIN_VAR_MASK), \
 
295
  #name, comment, check, update, -1, def, NULL}
 
296
 
 
297
#define DRIZZLE_SessionVAR_INT(name, opt, comment, check, update, def, min, max, blk) \
 
298
DECLARE_DRIZZLE_SessionVAR_SIMPLE(name, int) = { \
 
299
  PLUGIN_VAR_INT | PLUGIN_VAR_SessionLOCAL | ((opt) & PLUGIN_VAR_MASK), \
 
300
  #name, comment, check, update, -1, def, min, max, blk, NULL }
 
301
 
 
302
#define DRIZZLE_SessionVAR_UINT(name, opt, comment, check, update, def, min, max, blk) \
 
303
DECLARE_DRIZZLE_SessionVAR_SIMPLE(name, unsigned int) = { \
 
304
  PLUGIN_VAR_INT | PLUGIN_VAR_SessionLOCAL | PLUGIN_VAR_UNSIGNED | ((opt) & PLUGIN_VAR_MASK), \
 
305
  #name, comment, check, update, -1, def, min, max, blk, NULL }
 
306
 
 
307
#define DRIZZLE_SessionVAR_LONG(name, opt, comment, check, update, def, min, max, blk) \
 
308
DECLARE_DRIZZLE_SessionVAR_SIMPLE(name, long) = { \
 
309
  PLUGIN_VAR_LONG | PLUGIN_VAR_SessionLOCAL | ((opt) & PLUGIN_VAR_MASK), \
 
310
  #name, comment, check, update, -1, def, min, max, blk, NULL }
 
311
 
 
312
#define DRIZZLE_SessionVAR_ULONG(name, opt, comment, check, update, def, min, max, blk) \
 
313
DECLARE_DRIZZLE_SessionVAR_SIMPLE(name, unsigned long) = { \
 
314
  PLUGIN_VAR_LONG | PLUGIN_VAR_SessionLOCAL | PLUGIN_VAR_UNSIGNED | ((opt) & PLUGIN_VAR_MASK), \
 
315
  #name, comment, check, update, -1, def, min, max, blk, NULL }
 
316
 
 
317
#define DRIZZLE_SessionVAR_LONGLONG(name, opt, comment, check, update, def, min, max, blk) \
 
318
DECLARE_DRIZZLE_SessionVAR_SIMPLE(name, int64_t) = { \
 
319
  PLUGIN_VAR_LONGLONG | PLUGIN_VAR_SessionLOCAL | ((opt) & PLUGIN_VAR_MASK), \
 
320
  #name, comment, check, update, -1, def, min, max, blk, NULL }
 
321
 
 
322
#define DRIZZLE_SessionVAR_ULONGLONG(name, opt, comment, check, update, def, min, max, blk) \
 
323
DECLARE_DRIZZLE_SessionVAR_SIMPLE(name, uint64_t) = { \
 
324
  PLUGIN_VAR_LONGLONG | PLUGIN_VAR_SessionLOCAL | PLUGIN_VAR_UNSIGNED | ((opt) & PLUGIN_VAR_MASK), \
 
325
  #name, comment, check, update, -1, def, min, max, blk, NULL }
 
326
 
 
327
/* accessor macros */
 
328
 
 
329
#define SYSVAR(name) \
 
330
  (*(DRIZZLE_SYSVAR_NAME(name).value))
 
331
 
 
332
/* when session == null, result points to global value */
 
333
#define SessionVAR(session, name) \
 
334
  (*(DRIZZLE_SYSVAR_NAME(name).resolve(session, DRIZZLE_SYSVAR_NAME(name).offset)))
 
335
 
 
336
 
 
337
/*************************************************************************
 
338
  drizzle_value struct for reading values from mysqld.
 
339
  Used by server variables framework to parse user-provided values.
 
340
  Will be used for arguments when implementing UDFs.
 
341
 
 
342
  Note that val_str() returns a string in temporary memory
 
343
  that will be freed at the end of statement. Copy the string
 
344
  if you need it to persist.
 
345
*/
 
346
 
 
347
#define DRIZZLE_VALUE_TYPE_STRING 0
 
348
#define DRIZZLE_VALUE_TYPE_REAL   1
 
349
#define DRIZZLE_VALUE_TYPE_INT    2
148
350
 
149
351
/*
150
352
  skeleton of a plugin variable - portion of structure common to all.
151
353
*/
152
354
struct drizzle_sys_var
153
355
{
 
356
  DRIZZLE_PLUGIN_VAR_HEADER;
154
357
};
155
358
 
156
359
void plugin_opt_set_limits(option *options, const drizzle_sys_var *opt);
169
372
*/
170
373
 
171
374
extern bool plugin_init(module::Registry &registry,
172
 
                        boost::program_options::options_description &long_options);
173
 
extern bool plugin_finalize(module::Registry &registry);
 
375
                        int *argc, char **argv,
 
376
                        bool skip_init);
174
377
extern void my_print_help_inc_plugins(option *options);
175
378
extern bool plugin_is_ready(const LEX_STRING *name, int type);
176
379
extern void plugin_sessionvar_init(Session *session);
183
386
const char *get_session_proc_info(Session *session);
184
387
int64_t session_test_options(const Session *session, int64_t test_options);
185
388
int session_sql_command(const Session *session);
186
 
enum_tx_isolation session_tx_isolation(const Session *session);
 
389
int session_tx_isolation(const Session *session);
187
390
 
188
 
void compose_plugin_add(std::vector<std::string> options);
189
 
void compose_plugin_remove(std::vector<std::string> options);
190
 
void notify_plugin_load(std::string in_plugin_load);
191
391
 
192
392
 
193
393
/**
204
404
*/
205
405
int mysql_tmpfile(const char *prefix);
206
406
 
 
407
/**
 
408
  Check the killed state of a connection
 
409
 
 
410
  @details
 
411
  In MySQL support for the KILL statement is cooperative. The KILL
 
412
  statement only sets a "killed" flag. This function returns the value
 
413
  of that flag.  A thread should check it often, especially inside
 
414
  time-consuming loops, and gracefully abort the operation if it is
 
415
  non-zero.
 
416
 
 
417
  @param session  user thread connection handle
 
418
  @retval 0  the connection is active
 
419
  @retval 1  the connection has been killed
 
420
*/
 
421
int session_killed(const Session *session);
 
422
 
 
423
 
 
424
const charset_info_st *session_charset(Session *session);
 
425
 
 
426
/**
 
427
  Invalidate the query cache for a given table.
 
428
 
 
429
  @param session         user thread connection handle
 
430
  @param key         databasename\\0tablename\\0
 
431
  @param key_length  length of key in bytes, including the NUL bytes
 
432
  @param using_trx   flag: TRUE if using transactions, FALSE otherwise
 
433
*/
 
434
void mysql_query_cache_invalidate4(Session *session,
 
435
                                   const char *key, unsigned int key_length,
 
436
                                   int using_trx);
 
437
 
207
438
} /* namespace drizzled */
208
439
 
209
440
#endif /* DRIZZLED_PLUGIN_H */