17
17
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
20
#ifndef DRIZZLED_SET_VAR_H
21
#define DRIZZLED_SET_VAR_H
20
#ifndef DRIZZLED_ITEM_SET_H
21
#define DRIZZLED_ITEM_SET_H
23
#include <drizzled/function/func.h>
24
#include <drizzled/function/set_user_var.h>
25
#include <drizzled/item/string.h>
25
#include "drizzled/function/func.h"
26
#include "drizzled/function/set_user_var.h"
27
#include "drizzled/item/string.h"
28
#include "drizzled/item/field.h"
33
29
/* Classes to support the SET command */
43
39
class sys_var_pluginvar; /* opaque */
41
typedef struct system_variables SV;
45
42
typedef struct my_locale_st MY_LOCALE;
47
extern TYPELIB bool_typelib;
44
extern TYPELIB bool_typelib, delay_key_write_typelib, sql_mode_typelib,
45
optimizer_switch_typelib, slave_exec_mode_typelib;
49
47
typedef int (*sys_check_func)(Session *, set_var *);
50
48
typedef bool (*sys_update_func)(Session *, set_var *);
51
typedef void (*sys_after_update_func)(Session *, sql_var_t);
52
typedef void (*sys_set_default_func)(Session *, sql_var_t);
49
typedef void (*sys_after_update_func)(Session *,enum_var_type);
50
typedef void (*sys_set_default_func)(Session *, enum_var_type);
53
51
typedef unsigned char *(*sys_value_ptr_func)(Session *session);
55
static const std::vector<std::string> empty_aliases;
56
extern struct system_variables max_system_variables;
57
extern size_t table_def_size;
59
extern char *drizzle_tmpdir;
60
extern const char *first_keyword;
61
extern const char *in_left_expr_name;
62
extern const char *in_additional_cond;
63
extern const char *in_having_cond;
64
extern char language[FN_REFLEN];
65
extern char glob_hostname[FN_REFLEN];
66
extern char drizzle_home[FN_REFLEN];
67
extern char pidfile_name[FN_REFLEN];
68
extern char system_time_zone[30];
69
extern char *opt_tc_log_file;
70
extern uint64_t session_startup_options;
71
extern uint32_t global_thread_id;
72
extern uint64_t aborted_threads;
73
extern uint64_t aborted_connects;
74
extern uint64_t table_cache_size;
75
extern uint64_t max_connect_errors;
76
extern uint32_t back_log;
77
extern uint32_t ha_open_options;
78
extern char *drizzled_bind_host;
79
extern uint32_t dropping_tables;
80
extern bool opt_endinfo;
81
extern uint32_t volatile thread_running;
82
extern uint32_t volatile global_read_lock;
83
extern bool opt_readonly;
84
extern char* opt_secure_file_priv;
85
extern char *default_tz_name;
87
uint64_t fix_unsigned(Session *, uint64_t, const struct option *);
89
53
struct sys_var_chain
96
* A class which represents a variable, either global or
102
const std::string name; /**< The name of the variable */
103
sys_after_update_func after_update; /**< Function pointer triggered after the variable's value is updated */
104
struct option *option_limits; /**< Updated by by set_var_init() */
105
bool m_allow_empty_value; /**< Does variable allow an empty value? */
64
Enumeration type to indicate for a system variable whether it will be written to the binlog or not.
66
enum Binlog_status_enum
68
/* The variable value is not in the binlog. */
70
/* The value of the @@session variable is in the binlog. */
71
SESSION_VARIABLE_IN_BINLOG
73
Currently, no @@global variable is ever in the binlog, so we
74
don't need an enumeration value for that.
108
sys_var(const std::string name_arg, sys_after_update_func func= NULL)
79
struct my_option *option_limits; /* Updated by by set_var_init() */
80
uint32_t name_length; /* Updated by by set_var_init() */
83
sys_after_update_func after_update;
84
sys_var(const char *name_arg, sys_after_update_func func= NULL,
85
Binlog_status_enum binlog_status_arg= NOT_IN_BINLOG)
86
:name(name_arg), after_update(func),
87
binlog_status(binlog_status_arg),
112
88
m_allow_empty_value(true)
114
90
virtual ~sys_var() {}
120
96
chain_arg->first= this;
121
97
chain_arg->last= this;
125
* Returns the name of the variable.
129
* So that we can exist in a Registry. We really need to formalize that
131
inline const std::string &getName() const
136
* Returns a vector of strings representing aliases
137
* for this variable's name.
139
const std::vector<std::string>& getAliases() const
141
return empty_aliases;
144
* Returns a pointer to the next sys_var, or NULL if none.
146
inline sys_var *getNext() const
151
* Sets the pointer to the next sys_var.
153
* @param Pointer to the next sys_var, or NULL if you set the tail...
155
inline void setNext(sys_var *in_next)
160
* Returns a pointer to the variable's option limits
162
inline struct option *getOptionLimits() const
164
return option_limits;
167
* Sets the pointer to the variable's option limits
169
* @param Pointer to the option limits option variable
171
inline void setOptionLimits(struct option *in_option_limits)
173
option_limits= in_option_limits;
176
* Returns the function pointer for after update trigger, or NULL if none.
178
inline sys_after_update_func getAfterUpdateTrigger() const
182
99
virtual bool check(Session *session, set_var *var);
183
100
bool check_enum(Session *session, set_var *var, const TYPELIB *enum_names);
101
bool check_set(Session *session, set_var *var, TYPELIB *enum_names);
184
102
virtual bool update(Session *session, set_var *var)=0;
185
virtual void set_default(Session *, sql_var_t)
103
virtual void set_default(Session *, enum_var_type)
187
virtual SHOW_TYPE show_type()
191
virtual unsigned char *value_ptr(Session *, sql_var_t, const LEX_STRING *)
195
virtual bool check_type(sql_var_t type)
197
return type != OPT_GLOBAL;
198
} /* Error if not GLOBAL */
105
virtual SHOW_TYPE show_type() { return SHOW_UNDEF; }
106
virtual unsigned char *value_ptr(Session *, enum_var_type, const LEX_STRING *)
108
virtual bool check_type(enum_var_type type)
109
{ return type != OPT_GLOBAL; } /* Error if not GLOBAL */
199
110
virtual bool check_update_type(Item_result type)
201
return type != INT_RESULT;
203
virtual bool check_default(sql_var_t)
205
return option_limits == 0;
207
Item *item(Session *session, sql_var_t type, const LEX_STRING *base);
208
virtual bool is_readonly() const
212
virtual sys_var_pluginvar *cast_pluginvar()
111
{ return type != INT_RESULT; } /* Assume INT */
112
virtual bool check_default(enum_var_type)
113
{ return option_limits == 0; }
114
Item *item(Session *session, enum_var_type type, const LEX_STRING *base);
115
virtual bool is_struct() { return 0; }
116
virtual bool is_readonly() const { return 0; }
117
virtual sys_var_pluginvar *cast_pluginvar() { return 0; }
120
void set_allow_empty_value(bool allow_empty_value)
122
m_allow_empty_value= allow_empty_value;
126
const Binlog_status_enum binlog_status;
128
bool m_allow_empty_value;
219
* A base class for all variables that require its access to
220
* be guarded with a mutex.
133
A base class for all variables that require its access to
134
be guarded with a mutex.
222
137
class sys_var_global: public sys_var
225
140
pthread_mutex_t *guard;
227
sys_var_global(const char *name_arg,
228
sys_after_update_func after_update_arg,
142
sys_var_global(const char *name_arg, sys_after_update_func after_update_arg,
229
143
pthread_mutex_t *guard_arg)
231
sys_var(name_arg, after_update_arg),
144
:sys_var(name_arg, after_update_arg), guard(guard_arg) {}
236
148
class sys_var_uint32_t_ptr :public sys_var
248
160
{ chain_sys_var(chain); }
249
161
bool check(Session *session, set_var *var);
250
162
bool update(Session *session, set_var *var);
251
void set_default(Session *session, sql_var_t type);
163
void set_default(Session *session, enum_var_type type);
252
164
SHOW_TYPE show_type() { return SHOW_INT; }
253
unsigned char *value_ptr(Session *, sql_var_t, const LEX_STRING *)
165
unsigned char *value_ptr(Session *, enum_var_type, const LEX_STRING *)
254
166
{ return (unsigned char*) value; }
267
179
:sys_var(name_arg,func), value(value_ptr_arg)
268
180
{ chain_sys_var(chain); }
269
181
bool update(Session *session, set_var *var);
270
void set_default(Session *session, sql_var_t type);
182
void set_default(Session *session, enum_var_type type);
271
183
SHOW_TYPE show_type() { return SHOW_LONGLONG; }
272
unsigned char *value_ptr(Session *, sql_var_t,
184
unsigned char *value_ptr(Session *, enum_var_type,
273
185
const LEX_STRING *)
274
186
{ return (unsigned char*) value; }
286
198
:sys_var(name_arg,func), value(value_ptr_arg)
287
199
{ chain_sys_var(chain); }
288
200
bool update(Session *session, set_var *var);
289
void set_default(Session *session, sql_var_t type);
201
void set_default(Session *session, enum_var_type type);
290
202
SHOW_TYPE show_type() { return SHOW_SIZE; }
291
unsigned char *value_ptr(Session *, sql_var_t, const LEX_STRING *)
203
unsigned char *value_ptr(Session *, enum_var_type, const LEX_STRING *)
292
204
{ return (unsigned char*) value; }
304
216
return check_enum(session, var, &bool_typelib);
306
218
bool update(Session *session, set_var *var);
307
void set_default(Session *session, sql_var_t type);
219
void set_default(Session *session, enum_var_type type);
308
220
SHOW_TYPE show_type() { return SHOW_MY_BOOL; }
309
unsigned char *value_ptr(Session *, sql_var_t, const LEX_STRING *)
221
unsigned char *value_ptr(Session *, enum_var_type, const LEX_STRING *)
310
222
{ return (unsigned char*) value; }
311
223
bool check_update_type(Item_result)
345
257
return (*update_func)(session, var);
347
void set_default(Session *session, sql_var_t type)
259
void set_default(Session *session, enum_var_type type)
349
261
(*set_default_func)(session, type);
351
263
SHOW_TYPE show_type() { return SHOW_CHAR; }
352
unsigned char *value_ptr(Session *, sql_var_t, const LEX_STRING *)
264
unsigned char *value_ptr(Session *, enum_var_type, const LEX_STRING *)
353
265
{ return (unsigned char*) value; }
354
266
bool check_update_type(Item_result type)
356
268
return type != STRING_RESULT; /* Only accept strings */
358
bool check_default(sql_var_t)
270
bool check_default(enum_var_type)
422
bool check_default(sql_var_t)
334
bool check_default(enum_var_type)
424
336
bool is_readonly(void) const { return 1; }
340
class sys_var_enum :public sys_var
345
sys_var_enum(sys_var_chain *chain, const char *name_arg, uint32_t *value_arg,
346
TYPELIB *typelib, sys_after_update_func func)
347
:sys_var(name_arg,func), value(value_arg), enum_names(typelib)
348
{ chain_sys_var(chain); }
349
bool check(Session *session, set_var *var)
351
return check_enum(session, var, enum_names);
353
bool update(Session *session, set_var *var);
354
SHOW_TYPE show_type() { return SHOW_CHAR; }
355
unsigned char *value_ptr(Session *session, enum_var_type type,
356
const LEX_STRING *base);
357
bool check_update_type(Item_result)
362
class sys_var_enum_const :public sys_var
364
uint32_t SV::*offset;
367
sys_var_enum_const(sys_var_chain *chain, const char *name_arg, uint32_t SV::*offset_arg,
368
TYPELIB *typelib, sys_after_update_func func)
369
:sys_var(name_arg,func), offset(offset_arg), enum_names(typelib)
370
{ chain_sys_var(chain); }
371
bool check(Session *, set_var *)
373
bool update(Session *, set_var *)
375
SHOW_TYPE show_type() { return SHOW_CHAR; }
376
bool check_update_type(Item_result)
378
bool is_readonly() const { return 1; }
379
unsigned char *value_ptr(Session *session, enum_var_type type,
380
const LEX_STRING *base);
428
384
class sys_var_session :public sys_var
431
387
sys_var_session(const char *name_arg,
432
sys_after_update_func func= NULL)
433
:sys_var(name_arg, func)
388
sys_after_update_func func= NULL,
389
Binlog_status_enum bl_status= NOT_IN_BINLOG)
390
:sys_var(name_arg, func, bl_status)
435
bool check_type(sql_var_t)
392
bool check_type(enum_var_type)
437
bool check_default(sql_var_t type)
394
bool check_default(enum_var_type type)
439
396
return type == OPT_GLOBAL && !option_limits;
445
402
sys_check_func check_func;
447
uint32_t system_variables::*offset;
404
uint32_t SV::*offset;
448
405
sys_var_session_uint32_t(sys_var_chain *chain, const char *name_arg,
449
uint32_t system_variables::*offset_arg,
406
uint32_t SV::*offset_arg,
450
407
sys_check_func c_func= NULL,
451
sys_after_update_func au_func= NULL)
452
:sys_var_session(name_arg, au_func), check_func(c_func),
408
sys_after_update_func au_func= NULL,
409
Binlog_status_enum binlog_status_arg= NOT_IN_BINLOG)
410
:sys_var_session(name_arg, au_func, binlog_status_arg), check_func(c_func),
453
411
offset(offset_arg)
454
412
{ chain_sys_var(chain); }
455
413
bool check(Session *session, set_var *var);
456
414
bool update(Session *session, set_var *var);
457
void set_default(Session *session, sql_var_t type);
415
void set_default(Session *session, enum_var_type type);
458
416
SHOW_TYPE show_type() { return SHOW_INT; }
459
unsigned char *value_ptr(Session *session, sql_var_t type,
417
unsigned char *value_ptr(Session *session, enum_var_type type,
460
418
const LEX_STRING *base);
464
422
class sys_var_session_ha_rows :public sys_var_session
467
ha_rows system_variables::*offset;
468
426
sys_var_session_ha_rows(sys_var_chain *chain, const char *name_arg,
469
ha_rows system_variables::*offset_arg)
427
ha_rows SV::*offset_arg)
470
428
:sys_var_session(name_arg), offset(offset_arg)
471
429
{ chain_sys_var(chain); }
472
430
sys_var_session_ha_rows(sys_var_chain *chain, const char *name_arg,
473
ha_rows system_variables::*offset_arg,
431
ha_rows SV::*offset_arg,
474
432
sys_after_update_func func)
475
433
:sys_var_session(name_arg,func), offset(offset_arg)
476
434
{ chain_sys_var(chain); }
477
435
bool update(Session *session, set_var *var);
478
void set_default(Session *session, sql_var_t type);
436
void set_default(Session *session, enum_var_type type);
479
437
SHOW_TYPE show_type() { return SHOW_HA_ROWS; }
480
unsigned char *value_ptr(Session *session, sql_var_t type,
438
unsigned char *value_ptr(Session *session, enum_var_type type,
481
439
const LEX_STRING *base);
487
445
sys_check_func check_func;
489
uint64_t system_variables::*offset;
447
uint64_t SV::*offset;
490
448
bool only_global;
491
sys_var_session_uint64_t(sys_var_chain *chain,
492
const char *name_arg,
493
uint64_t system_variables::*offset_arg,
449
sys_var_session_uint64_t(sys_var_chain *chain, const char *name_arg,
450
uint64_t SV::*offset_arg,
494
451
sys_after_update_func au_func= NULL,
495
sys_check_func c_func= NULL)
496
:sys_var_session(name_arg, au_func),
452
sys_check_func c_func= NULL,
453
Binlog_status_enum binlog_status_arg= NOT_IN_BINLOG)
454
:sys_var_session(name_arg, au_func, binlog_status_arg),
497
455
check_func(c_func),
498
456
offset(offset_arg)
499
457
{ chain_sys_var(chain); }
500
458
sys_var_session_uint64_t(sys_var_chain *chain,
501
459
const char *name_arg,
502
uint64_t system_variables::*offset_arg,
460
uint64_t SV::*offset_arg,
503
461
sys_after_update_func func,
504
462
bool only_global_arg,
505
463
sys_check_func cfunc= NULL)
509
467
only_global(only_global_arg)
510
468
{ chain_sys_var(chain); }
511
469
bool update(Session *session, set_var *var);
512
void set_default(Session *session, sql_var_t type);
470
void set_default(Session *session, enum_var_type type);
513
471
SHOW_TYPE show_type() { return SHOW_LONGLONG; }
514
unsigned char *value_ptr(Session *session, sql_var_t type,
472
unsigned char *value_ptr(Session *session, enum_var_type type,
515
473
const LEX_STRING *base);
516
474
bool check(Session *session, set_var *var);
517
bool check_default(sql_var_t type)
475
bool check_default(enum_var_type type)
519
477
return type == OPT_GLOBAL && !option_limits;
521
bool check_type(sql_var_t type)
479
bool check_type(enum_var_type type)
523
481
return (only_global && type != OPT_GLOBAL);
529
487
sys_check_func check_func;
531
size_t system_variables::*offset;
532
490
bool only_global;
533
491
sys_var_session_size_t(sys_var_chain *chain, const char *name_arg,
534
size_t system_variables::*offset_arg,
492
size_t SV::*offset_arg,
535
493
sys_after_update_func au_func= NULL,
536
sys_check_func c_func= NULL)
537
:sys_var_session(name_arg, au_func),
494
sys_check_func c_func= NULL,
495
Binlog_status_enum binlog_status_arg= NOT_IN_BINLOG)
496
:sys_var_session(name_arg, au_func, binlog_status_arg),
538
497
check_func(c_func),
539
498
offset(offset_arg)
540
499
{ chain_sys_var(chain); }
541
500
sys_var_session_size_t(sys_var_chain *chain,
542
501
const char *name_arg,
543
size_t system_variables::*offset_arg,
502
size_t SV::*offset_arg,
544
503
sys_after_update_func func,
545
504
bool only_global_arg,
546
505
sys_check_func cfunc= NULL)
550
509
only_global(only_global_arg)
551
510
{ chain_sys_var(chain); }
552
511
bool update(Session *session, set_var *var);
553
void set_default(Session *session, sql_var_t type);
512
void set_default(Session *session, enum_var_type type);
554
513
SHOW_TYPE show_type() { return SHOW_SIZE; }
555
unsigned char *value_ptr(Session *session, sql_var_t type,
514
unsigned char *value_ptr(Session *session, enum_var_type type,
556
515
const LEX_STRING *base);
557
516
bool check(Session *session, set_var *var);
558
bool check_default(sql_var_t type)
517
bool check_default(enum_var_type type)
560
519
return type == OPT_GLOBAL && !option_limits;
562
bool check_type(sql_var_t type)
521
bool check_type(enum_var_type type)
564
523
return (only_global && type != OPT_GLOBAL);
569
528
class sys_var_session_bool :public sys_var_session
572
bool system_variables::*offset;
573
sys_var_session_bool(sys_var_chain *chain, const char *name_arg, bool system_variables::*offset_arg)
532
sys_var_session_bool(sys_var_chain *chain, const char *name_arg, bool SV::*offset_arg)
574
533
:sys_var_session(name_arg), offset(offset_arg)
575
534
{ chain_sys_var(chain); }
576
sys_var_session_bool(sys_var_chain *chain, const char *name_arg, bool system_variables::*offset_arg,
535
sys_var_session_bool(sys_var_chain *chain, const char *name_arg, bool SV::*offset_arg,
577
536
sys_after_update_func func)
578
537
:sys_var_session(name_arg,func), offset(offset_arg)
579
538
{ chain_sys_var(chain); }
580
539
bool update(Session *session, set_var *var);
581
void set_default(Session *session, sql_var_t type);
540
void set_default(Session *session, enum_var_type type);
582
541
SHOW_TYPE show_type() { return SHOW_MY_BOOL; }
583
unsigned char *value_ptr(Session *session, sql_var_t type,
542
unsigned char *value_ptr(Session *session, enum_var_type type,
584
543
const LEX_STRING *base);
585
544
bool check(Session *session, set_var *var)
594
553
class sys_var_session_enum :public sys_var_session
597
uint32_t system_variables::*offset;
556
uint32_t SV::*offset;
598
557
TYPELIB *enum_names;
599
558
sys_check_func check_func;
601
560
sys_var_session_enum(sys_var_chain *chain, const char *name_arg,
602
uint32_t system_variables::*offset_arg, TYPELIB *typelib,
561
uint32_t SV::*offset_arg, TYPELIB *typelib,
603
562
sys_after_update_func func= NULL,
604
563
sys_check_func check_f= NULL)
605
564
:sys_var_session(name_arg, func), offset(offset_arg),
613
572
return ret ? ret : check_enum(session, var, enum_names);
615
574
bool update(Session *session, set_var *var);
616
void set_default(Session *session, sql_var_t type);
575
void set_default(Session *session, enum_var_type type);
617
576
SHOW_TYPE show_type() { return SHOW_CHAR; }
618
unsigned char *value_ptr(Session *session, sql_var_t type,
577
unsigned char *value_ptr(Session *session, enum_var_type type,
619
578
const LEX_STRING *base);
620
579
bool check_update_type(Item_result)
585
class sys_var_session_optimizer_switch :public sys_var_session_enum
588
sys_var_session_optimizer_switch(sys_var_chain *chain, const char *name_arg,
589
uint32_t SV::*offset_arg)
590
:sys_var_session_enum(chain, name_arg, offset_arg, &optimizer_switch_typelib)
592
bool check(Session *session, set_var *var)
594
return check_set(session, var, enum_names);
596
void set_default(Session *session, enum_var_type type);
597
unsigned char *value_ptr(Session *session, enum_var_type type,
598
const LEX_STRING *base);
599
static bool symbolic_mode_representation(Session *session, uint32_t sql_mode,
625
604
class sys_var_session_storage_engine :public sys_var_session
628
plugin::StorageEngine *system_variables::*offset;
607
StorageEngine *SV::*offset;
630
609
sys_var_session_storage_engine(sys_var_chain *chain, const char *name_arg,
631
plugin::StorageEngine *system_variables::*offset_arg)
610
StorageEngine *SV::*offset_arg)
632
611
:sys_var_session(name_arg), offset(offset_arg)
633
612
{ chain_sys_var(chain); }
634
613
bool check(Session *session, set_var *var);
653
632
sys_var_session_bit(sys_var_chain *chain, const char *name_arg,
654
633
sys_check_func c_func, sys_update_func u_func,
655
uint64_t bit, bool reverse_arg=0)
656
:sys_var_session(name_arg, NULL), check_func(c_func),
634
uint64_t bit, bool reverse_arg=0,
635
Binlog_status_enum binlog_status_arg= NOT_IN_BINLOG)
636
:sys_var_session(name_arg, NULL, binlog_status_arg), check_func(c_func),
657
637
update_func(u_func), bit_flag(bit), reverse(reverse_arg)
658
638
{ chain_sys_var(chain); }
659
639
bool check(Session *session, set_var *var);
660
640
bool update(Session *session, set_var *var);
661
641
bool check_update_type(Item_result)
663
bool check_type(sql_var_t type) { return type == OPT_GLOBAL; }
643
bool check_type(enum_var_type type) { return type == OPT_GLOBAL; }
664
644
SHOW_TYPE show_type() { return SHOW_MY_BOOL; }
665
unsigned char *value_ptr(Session *session, sql_var_t type,
645
unsigned char *value_ptr(Session *session, enum_var_type type,
666
646
const LEX_STRING *base);
671
651
class sys_var_timestamp :public sys_var
674
sys_var_timestamp(sys_var_chain *chain, const char *name_arg)
675
:sys_var(name_arg, NULL)
654
sys_var_timestamp(sys_var_chain *chain, const char *name_arg,
655
Binlog_status_enum binlog_status_arg= NOT_IN_BINLOG)
656
:sys_var(name_arg, NULL, binlog_status_arg)
676
657
{ chain_sys_var(chain); }
677
658
bool update(Session *session, set_var *var);
678
void set_default(Session *session, sql_var_t type);
679
bool check_type(sql_var_t type) { return type == OPT_GLOBAL; }
680
bool check_default(sql_var_t)
659
void set_default(Session *session, enum_var_type type);
660
bool check_type(enum_var_type type) { return type == OPT_GLOBAL; }
661
bool check_default(enum_var_type)
682
663
SHOW_TYPE show_type(void) { return SHOW_LONG; }
683
unsigned char *value_ptr(Session *session, sql_var_t type,
664
unsigned char *value_ptr(Session *session, enum_var_type type,
684
665
const LEX_STRING *base);
688
669
class sys_var_last_insert_id :public sys_var
691
sys_var_last_insert_id(sys_var_chain *chain, const char *name_arg)
692
:sys_var(name_arg, NULL)
672
sys_var_last_insert_id(sys_var_chain *chain, const char *name_arg,
673
Binlog_status_enum binlog_status_arg= NOT_IN_BINLOG)
674
:sys_var(name_arg, NULL, binlog_status_arg)
693
675
{ chain_sys_var(chain); }
694
676
bool update(Session *session, set_var *var);
695
bool check_type(sql_var_t type) { return type == OPT_GLOBAL; }
677
bool check_type(enum_var_type type) { return type == OPT_GLOBAL; }
696
678
SHOW_TYPE show_type() { return SHOW_LONGLONG; }
697
unsigned char *value_ptr(Session *session, sql_var_t type,
679
unsigned char *value_ptr(Session *session, enum_var_type type,
698
680
const LEX_STRING *base);
712
695
return ((type != STRING_RESULT) && (type != INT_RESULT));
714
bool check_default(sql_var_t) { return 0; }
715
virtual void set_default(Session *session, sql_var_t type)= 0;
697
bool check_default(enum_var_type) { return 0; }
698
virtual void set_default(Session *session, enum_var_type type)= 0;
718
701
class sys_var_collation_sv :public sys_var_collation
720
const CHARSET_INFO *system_variables::*offset;
703
const CHARSET_INFO *SV::*offset;
721
704
const CHARSET_INFO **global_default;
723
706
sys_var_collation_sv(sys_var_chain *chain, const char *name_arg,
724
const CHARSET_INFO *system_variables::*offset_arg,
725
const CHARSET_INFO **global_default_arg)
726
:sys_var_collation(name_arg),
707
const CHARSET_INFO *SV::*offset_arg,
708
const CHARSET_INFO **global_default_arg,
709
Binlog_status_enum binlog_status_arg= NOT_IN_BINLOG)
710
:sys_var_collation(name_arg, binlog_status_arg),
727
711
offset(offset_arg), global_default(global_default_arg)
729
713
chain_sys_var(chain);
731
715
bool update(Session *session, set_var *var);
732
void set_default(Session *session, sql_var_t type);
733
unsigned char *value_ptr(Session *session, sql_var_t type,
734
const LEX_STRING *base);
716
void set_default(Session *session, enum_var_type type);
717
unsigned char *value_ptr(Session *session, enum_var_type type,
718
const LEX_STRING *base);
722
class sys_var_key_cache_param :public sys_var
727
sys_var_key_cache_param(sys_var_chain *chain, const char *name_arg,
729
:sys_var(name_arg), offset(offset_arg)
730
{ chain_sys_var(chain); }
731
unsigned char *value_ptr(Session *session, enum_var_type type,
732
const LEX_STRING *base);
733
bool check_default(enum_var_type)
735
bool is_struct() { return 1; }
739
class sys_var_key_buffer_size :public sys_var_key_cache_param
742
sys_var_key_buffer_size(sys_var_chain *chain, const char *name_arg)
743
:sys_var_key_cache_param(chain, name_arg,
744
offsetof(KEY_CACHE, param_buff_size))
746
bool update(Session *session, set_var *var);
747
SHOW_TYPE show_type() { return SHOW_LONGLONG; }
751
class sys_var_key_cache_uint32_t :public sys_var_key_cache_param
754
sys_var_key_cache_uint32_t(sys_var_chain *chain, const char *name_arg, size_t offset_arg)
755
:sys_var_key_cache_param(chain, name_arg, offset_arg)
757
bool update(Session *session, set_var *var);
758
SHOW_TYPE show_type() { return SHOW_INT; }
737
761
/* Variable that you can only read from */
750
774
{ chain_sys_var(chain); }
751
775
bool update(Session *, set_var *)
753
bool check_default(sql_var_t)
777
bool check_default(enum_var_type)
755
bool check_type(sql_var_t type) { return type != var_type; }
779
bool check_type(enum_var_type type) { return type != var_type; }
756
780
bool check_update_type(Item_result)
758
unsigned char *value_ptr(Session *session, sql_var_t,
782
unsigned char *value_ptr(Session *session, enum_var_type,
759
783
const LEX_STRING *)
761
785
return (*value_ptr_func)(session);
792
class sys_var_have_option: public sys_var
795
virtual SHOW_COMP_OPTION get_option() = 0;
797
sys_var_have_option(sys_var_chain *chain, const char *variable_name):
798
sys_var(variable_name)
799
{ chain_sys_var(chain); }
800
unsigned char *value_ptr(Session *, enum_var_type,
803
return (unsigned char*) show_comp_option_name[get_option()];
805
bool update(Session *, set_var *) { return 1; }
806
bool check_default(enum_var_type)
808
bool check_type(enum_var_type type) { return type != OPT_GLOBAL; }
809
bool check_update_type(Item_result)
811
SHOW_TYPE show_type() { return SHOW_CHAR; }
812
bool is_readonly() const { return 1; }
816
class sys_var_have_variable: public sys_var_have_option
818
SHOW_COMP_OPTION *have_variable;
821
sys_var_have_variable(sys_var_chain *chain, const char *variable_name,
822
SHOW_COMP_OPTION *have_variable_arg):
823
sys_var_have_option(chain, variable_name),
824
have_variable(have_variable_arg)
826
SHOW_COMP_OPTION get_option() { return *have_variable; }
830
class sys_var_have_plugin: public sys_var_have_option
832
const char *plugin_name_str;
833
const uint32_t plugin_name_len;
834
const int plugin_type;
837
sys_var_have_plugin(sys_var_chain *chain, const char *variable_name,
838
const char *plugin_name_str_arg, uint32_t plugin_name_len_arg,
839
int plugin_type_arg):
840
sys_var_have_option(chain, variable_name),
841
plugin_name_str(plugin_name_str_arg), plugin_name_len(plugin_name_len_arg),
842
plugin_type(plugin_type_arg)
844
/* the following method is declared in sql_plugin.cc */
845
SHOW_COMP_OPTION get_option();
768
849
class sys_var_session_time_zone :public sys_var_session
771
sys_var_session_time_zone(sys_var_chain *chain, const char *name_arg)
772
:sys_var_session(name_arg, NULL)
852
sys_var_session_time_zone(sys_var_chain *chain, const char *name_arg,
853
Binlog_status_enum binlog_status_arg= NOT_IN_BINLOG)
854
:sys_var_session(name_arg, NULL, binlog_status_arg)
774
856
chain_sys_var(chain);
780
862
return type != STRING_RESULT; /* Only accept strings */
782
bool check_default(sql_var_t)
864
bool check_default(enum_var_type)
784
866
bool update(Session *session, set_var *var);
785
unsigned char *value_ptr(Session *session, sql_var_t type,
867
unsigned char *value_ptr(Session *session, enum_var_type type,
786
868
const LEX_STRING *base);
787
virtual void set_default(Session *session, sql_var_t type);
869
virtual void set_default(Session *session, enum_var_type type);
791
873
class sys_var_microseconds :public sys_var_session
793
uint64_t system_variables::*offset;
875
uint64_t SV::*offset;
795
877
sys_var_microseconds(sys_var_chain *chain, const char *name_arg,
796
uint64_t system_variables::*offset_arg):
878
uint64_t SV::*offset_arg):
797
879
sys_var_session(name_arg), offset(offset_arg)
798
880
{ chain_sys_var(chain); }
799
881
bool check(Session *, set_var *) {return 0;}
800
882
bool update(Session *session, set_var *var);
801
void set_default(Session *session, sql_var_t type);
883
void set_default(Session *session, enum_var_type type);
802
884
SHOW_TYPE show_type() { return SHOW_DOUBLE; }
803
885
bool check_update_type(Item_result type)
805
887
return (type != INT_RESULT && type != REAL_RESULT && type != DECIMAL_RESULT);
889
unsigned char *value_ptr(Session *session, enum_var_type type,
890
const LEX_STRING *base);
809
893
class sys_var_session_lc_time_names :public sys_var_session
812
sys_var_session_lc_time_names(sys_var_chain *chain, const char *name_arg)
813
: sys_var_session(name_arg, NULL)
896
sys_var_session_lc_time_names(sys_var_chain *chain, const char *name_arg,
897
Binlog_status_enum binlog_status_arg= NOT_IN_BINLOG)
898
: sys_var_session(name_arg, NULL, binlog_status_arg)
815
900
chain_sys_var(chain);
843
928
/* light check for PS */
846
932
/* MySQL internal variables */
847
934
class set_var :public set_var_base
855
942
const CHARSET_INFO *charset;
856
943
uint32_t uint32_t_value;
857
944
uint64_t uint64_t_value;
858
945
size_t size_t_value;
859
plugin::StorageEngine *storage_engine;
946
StorageEngine *storage_engine;
860
947
Time_zone *time_zone;
861
948
MY_LOCALE *locale_value;
863
950
LEX_STRING base; /* for structs */
865
set_var(sql_var_t type_arg, sys_var *var_arg,
952
set_var(enum_var_type type_arg, sys_var *var_arg,
866
953
const LEX_STRING *base_name_arg, Item *value_arg)
867
954
:var(var_arg), type(type_arg), base(*base_name_arg)
992
typedef int (*process_key_cache_t) (const char *, KEY_CACHE *);
995
/* Named lists (used for keycaches) */
997
class NAMED_LIST :public ilink
1001
unsigned char* data;
1003
NAMED_LIST(I_List<NAMED_LIST> *links, const char *name_arg,
1004
uint32_t name_length_arg, unsigned char* data_arg);
1005
bool cmp(const char *name_cmp, uint32_t length);
1006
friend bool process_key_caches(process_key_cache_t func);
1007
friend void delete_elements(I_List<NAMED_LIST> *list,
1008
void (*free_element)(const char*,
1012
/* updated in sql_acl.cc */
1014
extern sys_var_session_bool sys_old_alter_table;
1015
extern LEX_STRING default_key_cache_base;
903
1017
/* For sql_yacc */
904
1018
struct sys_var_with_base
914
1028
int set_var_init();
915
1029
void set_var_free();
916
drizzle_show_var* enumerate_sys_vars(Session *session, bool sorted);
917
void drizzle_add_plugin_sysvar(sys_var_pluginvar *var);
918
void drizzle_del_plugin_sysvar();
919
int mysql_add_sys_var_chain(sys_var *chain, struct option *long_options);
1030
int mysql_append_static_vars(const SHOW_VAR *show_vars, uint32_t count);
1031
SHOW_VAR* enumerate_sys_vars(Session *session, bool sorted);
1032
int mysql_add_sys_var_chain(sys_var *chain, struct my_option *long_options);
920
1033
int mysql_del_sys_var_chain(sys_var *chain);
921
1034
sys_var *find_sys_var(Session *session, const char *str, uint32_t length=0);
922
1035
int sql_set_variables(Session *session, List<set_var_base> *var_list);
923
1036
bool not_all_support_one_shot(List<set_var_base> *var_list);
1037
void fix_delay_key_write(Session *session, enum_var_type type);
1038
void fix_slave_exec_mode(enum_var_type type);
924
1039
extern sys_var_session_time_zone sys_time_zone;
925
1040
extern sys_var_session_bit sys_autocommit;
926
1041
const CHARSET_INFO *get_old_charset_by_name(const char *old_name);
1042
unsigned char* find_named(I_List<NAMED_LIST> *list, const char *name, uint32_t length,
1043
NAMED_LIST **found);
928
1045
extern sys_var_str sys_var_general_log_path, sys_var_slow_log_path;
930
} /* namespace drizzled */
1047
/* key_cache functions */
1048
KEY_CACHE *get_key_cache(const LEX_STRING *cache_name);
1049
KEY_CACHE *get_or_create_key_cache(const char *name, uint32_t length);
1050
void free_key_cache(const char *name, KEY_CACHE *key_cache);
1051
bool process_key_caches(process_key_cache_t func);
1052
void delete_elements(I_List<NAMED_LIST> *list,
1053
void (*free_element)(const char*, unsigned char*));
932
#endif /* DRIZZLED_SET_VAR_H */
1055
#endif /* DRIZZLED_ITEM_SET_H */