43
36
class sys_var_pluginvar; /* opaque */
38
typedef struct system_variables SV;
45
39
typedef struct my_locale_st MY_LOCALE;
47
extern TYPELIB bool_typelib;
41
extern TYPELIB bool_typelib, delay_key_write_typelib, sql_mode_typelib,
42
optimizer_switch_typelib, slave_exec_mode_typelib;
49
44
typedef int (*sys_check_func)(Session *, set_var *);
50
45
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);
46
typedef void (*sys_after_update_func)(Session *,enum_var_type);
47
typedef void (*sys_set_default_func)(Session *, enum_var_type);
53
48
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 std::string 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 time_t server_start_time;
72
extern time_t flush_status_time;
73
extern uint32_t global_thread_id;
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;
86
extern char *opt_scheduler;
88
uint64_t fix_unsigned(Session *, uint64_t, const struct option *);
90
50
struct sys_var_chain
97
* A class which represents a variable, either global or
103
const std::string name; /**< The name of the variable */
104
sys_after_update_func after_update; /**< Function pointer triggered after the variable's value is updated */
105
struct option *option_limits; /**< Updated by by set_var_init() */
106
bool m_allow_empty_value; /**< Does variable allow an empty value? */
61
Enumeration type to indicate for a system variable whether it will be written to the binlog or not.
63
enum Binlog_status_enum
65
/* The variable value is not in the binlog. */
67
/* The value of the @@session variable is in the binlog. */
68
SESSION_VARIABLE_IN_BINLOG
70
Currently, no @@global variable is ever in the binlog, so we
71
don't need an enumeration value for that.
109
sys_var(const std::string name_arg, sys_after_update_func func= NULL)
76
struct my_option *option_limits; /* Updated by by set_var_init() */
77
uint32_t name_length; /* Updated by by set_var_init() */
80
sys_after_update_func after_update;
81
bool no_support_one_shot;
82
sys_var(const char *name_arg, sys_after_update_func func= NULL,
83
Binlog_status_enum binlog_status_arg= NOT_IN_BINLOG)
84
:name(name_arg), after_update(func), no_support_one_shot(1),
85
binlog_status(binlog_status_arg),
113
86
m_allow_empty_value(true)
115
88
virtual ~sys_var() {}
121
94
chain_arg->first= this;
122
95
chain_arg->last= this;
126
* Returns the name of the variable.
130
* So that we can exist in a Registry. We really need to formalize that
132
inline const std::string &getName() const
137
* Returns a vector of strings representing aliases
138
* for this variable's name.
140
const std::vector<std::string>& getAliases() const
142
return empty_aliases;
145
* Returns a pointer to the next sys_var, or NULL if none.
147
inline sys_var *getNext() const
152
* Sets the pointer to the next sys_var.
154
* @param Pointer to the next sys_var, or NULL if you set the tail...
156
inline void setNext(sys_var *in_next)
161
* Returns a pointer to the variable's option limits
163
inline struct option *getOptionLimits() const
165
return option_limits;
168
* Sets the pointer to the variable's option limits
170
* @param Pointer to the option limits option variable
172
inline void setOptionLimits(struct option *in_option_limits)
174
option_limits= in_option_limits;
177
* Returns the function pointer for after update trigger, or NULL if none.
179
inline sys_after_update_func getAfterUpdateTrigger() const
183
97
virtual bool check(Session *session, set_var *var);
184
98
bool check_enum(Session *session, set_var *var, const TYPELIB *enum_names);
99
bool check_set(Session *session, set_var *var, TYPELIB *enum_names);
100
bool is_written_to_binlog(enum_var_type type)
102
return (type == OPT_SESSION || type == OPT_DEFAULT) &&
103
(binlog_status == SESSION_VARIABLE_IN_BINLOG);
185
105
virtual bool update(Session *session, set_var *var)=0;
186
virtual void set_default(Session *, sql_var_t)
106
virtual void set_default(Session *session_arg __attribute__((unused)),
107
enum_var_type type __attribute__((unused)))
188
virtual SHOW_TYPE show_type()
192
virtual unsigned char *value_ptr(Session *, sql_var_t, const LEX_STRING *)
196
virtual bool check_type(sql_var_t type)
198
return type != OPT_GLOBAL;
199
} /* Error if not GLOBAL */
109
virtual SHOW_TYPE show_type() { return SHOW_UNDEF; }
110
virtual unsigned char *value_ptr(Session *session __attribute__((unused)),
111
enum_var_type type __attribute__((unused)),
112
LEX_STRING *base __attribute__((unused)))
114
virtual bool check_type(enum_var_type type)
115
{ return type != OPT_GLOBAL; } /* Error if not GLOBAL */
200
116
virtual bool check_update_type(Item_result type)
202
return type != INT_RESULT;
204
virtual bool check_default(sql_var_t)
206
return option_limits == 0;
208
Item *item(Session *session, sql_var_t type, const LEX_STRING *base);
209
virtual bool is_readonly() const
213
virtual sys_var_pluginvar *cast_pluginvar()
117
{ return type != INT_RESULT; } /* Assume INT */
118
virtual bool check_default(enum_var_type type __attribute__((unused)))
119
{ return option_limits == 0; }
120
Item *item(Session *session, enum_var_type type, LEX_STRING *base);
121
virtual bool is_struct() { return 0; }
122
virtual bool is_readonly() const { return 0; }
123
virtual sys_var_pluginvar *cast_pluginvar() { return 0; }
126
void set_allow_empty_value(bool allow_empty_value)
128
m_allow_empty_value= allow_empty_value;
132
const Binlog_status_enum binlog_status;
134
bool m_allow_empty_value;
220
* A base class for all variables that require its access to
221
* be guarded with a mutex.
139
A base class for all variables that require its access to
140
be guarded with a mutex.
223
143
class sys_var_global: public sys_var
226
146
pthread_mutex_t *guard;
228
sys_var_global(const char *name_arg,
229
sys_after_update_func after_update_arg,
148
sys_var_global(const char *name_arg, sys_after_update_func after_update_arg,
230
149
pthread_mutex_t *guard_arg)
232
sys_var(name_arg, after_update_arg),
150
:sys_var(name_arg, after_update_arg), guard(guard_arg) {}
155
A global-only ulong variable that requires its access to be
156
protected with a mutex.
159
class sys_var_long_ptr_global: public sys_var_global
163
sys_var_long_ptr_global(sys_var_chain *chain, const char *name_arg,
164
ulong *value_ptr_arg,
165
pthread_mutex_t *guard_arg,
166
sys_after_update_func after_update_arg= NULL)
167
:sys_var_global(name_arg, after_update_arg, guard_arg),
169
{ chain_sys_var(chain); }
170
bool check(Session *session, set_var *var);
171
bool update(Session *session, set_var *var);
172
void set_default(Session *session, enum_var_type type);
173
SHOW_TYPE show_type() { return SHOW_LONG; }
174
unsigned char *value_ptr(Session *session __attribute__((unused)),
175
enum_var_type type __attribute__((unused)),
176
LEX_STRING *base __attribute__((unused)))
177
{ return (unsigned char*) value; }
182
A global ulong variable that is protected by LOCK_global_system_variables
185
class sys_var_long_ptr :public sys_var_long_ptr_global
188
sys_var_long_ptr(sys_var_chain *chain, const char *name_arg, ulong *value_ptr,
189
sys_after_update_func after_update_arg= NULL);
237
193
class sys_var_uint32_t_ptr :public sys_var
403
352
sys_var_const_str_ptr(sys_var_chain *chain, const char *name_arg, char **value_arg)
404
353
:sys_var(name_arg),value(value_arg)
405
354
{ chain_sys_var(chain); }
406
bool check(Session *, set_var *)
355
bool check(Session *session __attribute__((unused)),
356
set_var *var __attribute__((unused)))
410
bool update(Session *, set_var *)
360
bool update(Session *session __attribute__((unused)),
361
set_var *var __attribute__((unused)))
414
365
SHOW_TYPE show_type() { return SHOW_CHAR; }
415
unsigned char *value_ptr(Session *, sql_var_t, const LEX_STRING *)
366
unsigned char *value_ptr(Session *session __attribute__((unused)),
367
enum_var_type type __attribute__((unused)),
368
LEX_STRING *base __attribute__((unused)))
417
370
return (unsigned char*) *value;
419
bool check_update_type(Item_result)
372
bool check_update_type(Item_result type __attribute__((unused)))
423
bool check_default(sql_var_t)
376
bool check_default(enum_var_type type __attribute__((unused)))
425
378
bool is_readonly(void) const { return 1; }
382
class sys_var_enum :public sys_var
387
sys_var_enum(sys_var_chain *chain, const char *name_arg, uint32_t *value_arg,
388
TYPELIB *typelib, sys_after_update_func func)
389
:sys_var(name_arg,func), value(value_arg), enum_names(typelib)
390
{ chain_sys_var(chain); }
391
bool check(Session *session, set_var *var)
393
return check_enum(session, var, enum_names);
395
bool update(Session *session, set_var *var);
396
SHOW_TYPE show_type() { return SHOW_CHAR; }
397
unsigned char *value_ptr(Session *session, enum_var_type type, LEX_STRING *base);
398
bool check_update_type(Item_result type __attribute__((unused)))
403
class sys_var_enum_const :public sys_var
408
sys_var_enum_const(sys_var_chain *chain, const char *name_arg, ulong SV::*offset_arg,
409
TYPELIB *typelib, sys_after_update_func func)
410
:sys_var(name_arg,func), offset(offset_arg), enum_names(typelib)
411
{ chain_sys_var(chain); }
412
bool check(Session *session __attribute__((unused)),
413
set_var *var __attribute__((unused)))
415
bool update(Session *session __attribute__((unused)),
416
set_var *var __attribute__((unused)))
418
SHOW_TYPE show_type() { return SHOW_CHAR; }
419
bool check_update_type(Item_result type __attribute__((unused)))
421
bool is_readonly() const { return 1; }
422
unsigned char *value_ptr(Session *session, enum_var_type type, LEX_STRING *base);
429
426
class sys_var_session :public sys_var
432
sys_var_session(const char *name_arg,
433
sys_after_update_func func= NULL)
434
:sys_var(name_arg, func)
429
sys_var_session(const char *name_arg,
430
sys_after_update_func func= NULL,
431
Binlog_status_enum binlog_status= NOT_IN_BINLOG)
432
:sys_var(name_arg, func, binlog_status)
436
bool check_type(sql_var_t)
434
bool check_type(enum_var_type type __attribute__((unused)))
438
bool check_default(sql_var_t type)
436
bool check_default(enum_var_type type)
440
438
return type == OPT_GLOBAL && !option_limits;
444
class sys_var_session_uint32_t :public sys_var_session
443
class sys_var_session_ulong :public sys_var_session
446
445
sys_check_func check_func;
448
uint32_t system_variables::*offset;
449
sys_var_session_uint32_t(sys_var_chain *chain, const char *name_arg,
450
uint32_t system_variables::*offset_arg,
451
sys_check_func c_func= NULL,
452
sys_after_update_func au_func= NULL)
453
:sys_var_session(name_arg, au_func), check_func(c_func),
448
sys_var_session_ulong(sys_var_chain *chain, const char *name_arg,
449
ulong SV::*offset_arg,
450
sys_check_func c_func= NULL,
451
sys_after_update_func au_func= NULL,
452
Binlog_status_enum binlog_status_arg= NOT_IN_BINLOG)
453
:sys_var_session(name_arg, au_func, binlog_status_arg), check_func(c_func),
454
454
offset(offset_arg)
455
455
{ chain_sys_var(chain); }
456
456
bool check(Session *session, set_var *var);
457
457
bool update(Session *session, set_var *var);
458
void set_default(Session *session, sql_var_t type);
459
SHOW_TYPE show_type() { return SHOW_INT; }
460
unsigned char *value_ptr(Session *session, sql_var_t type,
461
const LEX_STRING *base);
458
void set_default(Session *session, enum_var_type type);
459
SHOW_TYPE show_type() { return SHOW_LONG; }
460
unsigned char *value_ptr(Session *session, enum_var_type type, LEX_STRING *base);
465
464
class sys_var_session_ha_rows :public sys_var_session
468
ha_rows system_variables::*offset;
469
sys_var_session_ha_rows(sys_var_chain *chain, const char *name_arg,
470
ha_rows system_variables::*offset_arg)
468
sys_var_session_ha_rows(sys_var_chain *chain, const char *name_arg,
469
ha_rows SV::*offset_arg)
471
470
:sys_var_session(name_arg), offset(offset_arg)
472
471
{ chain_sys_var(chain); }
473
sys_var_session_ha_rows(sys_var_chain *chain, const char *name_arg,
474
ha_rows system_variables::*offset_arg,
472
sys_var_session_ha_rows(sys_var_chain *chain, const char *name_arg,
473
ha_rows SV::*offset_arg,
475
474
sys_after_update_func func)
476
475
:sys_var_session(name_arg,func), offset(offset_arg)
477
476
{ chain_sys_var(chain); }
478
477
bool update(Session *session, set_var *var);
479
void set_default(Session *session, sql_var_t type);
478
void set_default(Session *session, enum_var_type type);
480
479
SHOW_TYPE show_type() { return SHOW_HA_ROWS; }
481
unsigned char *value_ptr(Session *session, sql_var_t type,
482
const LEX_STRING *base);
480
unsigned char *value_ptr(Session *session, enum_var_type type, LEX_STRING *base);
488
486
sys_check_func check_func;
490
uint64_t system_variables::*offset;
488
uint64_t SV::*offset;
491
489
bool only_global;
492
sys_var_session_uint64_t(sys_var_chain *chain,
493
const char *name_arg,
494
uint64_t system_variables::*offset_arg,
490
sys_var_session_uint64_t(sys_var_chain *chain, const char *name_arg,
491
uint64_t SV::*offset_arg,
495
492
sys_after_update_func au_func= NULL,
496
sys_check_func c_func= NULL)
497
:sys_var_session(name_arg, au_func),
500
{ chain_sys_var(chain); }
501
sys_var_session_uint64_t(sys_var_chain *chain,
502
const char *name_arg,
503
uint64_t system_variables::*offset_arg,
504
sys_after_update_func func,
505
bool only_global_arg,
506
sys_check_func cfunc= NULL)
493
sys_check_func c_func= NULL,
494
Binlog_status_enum binlog_status_arg= NOT_IN_BINLOG)
495
:sys_var_session(name_arg, au_func, binlog_status_arg),
498
{ chain_sys_var(chain); }
499
sys_var_session_uint64_t(sys_var_chain *chain, const char *name_arg,
500
uint64_t SV::*offset_arg,
501
sys_after_update_func func, bool only_global_arg,
502
sys_check_func cfunc= NULL)
507
503
:sys_var_session(name_arg, func),
508
504
check_func(cfunc),
509
505
offset(offset_arg),
510
506
only_global(only_global_arg)
511
507
{ chain_sys_var(chain); }
512
508
bool update(Session *session, set_var *var);
513
void set_default(Session *session, sql_var_t type);
509
void set_default(Session *session, enum_var_type type);
514
510
SHOW_TYPE show_type() { return SHOW_LONGLONG; }
515
unsigned char *value_ptr(Session *session, sql_var_t type,
516
const LEX_STRING *base);
517
bool check(Session *session, set_var *var);
518
bool check_default(sql_var_t type)
520
return type == OPT_GLOBAL && !option_limits;
522
bool check_type(sql_var_t type)
524
return (only_global && type != OPT_GLOBAL);
528
class sys_var_session_size_t :public sys_var_session
530
sys_check_func check_func;
532
size_t system_variables::*offset;
534
sys_var_session_size_t(sys_var_chain *chain, const char *name_arg,
535
size_t system_variables::*offset_arg,
536
sys_after_update_func au_func= NULL,
537
sys_check_func c_func= NULL)
538
:sys_var_session(name_arg, au_func),
541
{ chain_sys_var(chain); }
542
sys_var_session_size_t(sys_var_chain *chain,
543
const char *name_arg,
544
size_t system_variables::*offset_arg,
545
sys_after_update_func func,
546
bool only_global_arg,
547
sys_check_func cfunc= NULL)
548
:sys_var_session(name_arg, func),
551
only_global(only_global_arg)
552
{ chain_sys_var(chain); }
553
bool update(Session *session, set_var *var);
554
void set_default(Session *session, sql_var_t type);
555
SHOW_TYPE show_type() { return SHOW_SIZE; }
556
unsigned char *value_ptr(Session *session, sql_var_t type,
557
const LEX_STRING *base);
558
bool check(Session *session, set_var *var);
559
bool check_default(sql_var_t type)
561
return type == OPT_GLOBAL && !option_limits;
563
bool check_type(sql_var_t type)
511
unsigned char *value_ptr(Session *session, enum_var_type type, LEX_STRING *base);
512
bool check(Session *session, set_var *var);
513
bool check_default(enum_var_type type)
515
return type == OPT_GLOBAL && !option_limits;
517
bool check_type(enum_var_type type)
565
519
return (only_global && type != OPT_GLOBAL);
672
642
class sys_var_timestamp :public sys_var
675
sys_var_timestamp(sys_var_chain *chain, const char *name_arg)
676
:sys_var(name_arg, NULL)
645
sys_var_timestamp(sys_var_chain *chain, const char *name_arg,
646
Binlog_status_enum binlog_status_arg= NOT_IN_BINLOG)
647
:sys_var(name_arg, NULL, binlog_status_arg)
677
648
{ chain_sys_var(chain); }
678
649
bool update(Session *session, set_var *var);
679
void set_default(Session *session, sql_var_t type);
680
bool check_type(sql_var_t type) { return type == OPT_GLOBAL; }
681
bool check_default(sql_var_t)
650
void set_default(Session *session, enum_var_type type);
651
bool check_type(enum_var_type type) { return type == OPT_GLOBAL; }
652
bool check_default(enum_var_type type __attribute__((unused)))
683
654
SHOW_TYPE show_type(void) { return SHOW_LONG; }
684
unsigned char *value_ptr(Session *session, sql_var_t type,
685
const LEX_STRING *base);
655
unsigned char *value_ptr(Session *session, enum_var_type type, LEX_STRING *base);
689
659
class sys_var_last_insert_id :public sys_var
692
sys_var_last_insert_id(sys_var_chain *chain, const char *name_arg)
693
:sys_var(name_arg, NULL)
694
{ chain_sys_var(chain); }
695
bool update(Session *session, set_var *var);
696
bool check_type(sql_var_t type) { return type == OPT_GLOBAL; }
697
SHOW_TYPE show_type() { return SHOW_LONGLONG; }
698
unsigned char *value_ptr(Session *session, sql_var_t type,
699
const LEX_STRING *base);
662
sys_var_last_insert_id(sys_var_chain *chain, const char *name_arg,
663
Binlog_status_enum binlog_status_arg= NOT_IN_BINLOG)
664
:sys_var(name_arg, NULL, binlog_status_arg)
665
{ chain_sys_var(chain); }
666
bool update(Session *session, set_var *var);
667
bool check_type(enum_var_type type) { return type == OPT_GLOBAL; }
668
SHOW_TYPE show_type() { return SHOW_LONGLONG; }
669
unsigned char *value_ptr(Session *session, enum_var_type type, LEX_STRING *base);
673
class sys_var_insert_id :public sys_var
676
sys_var_insert_id(sys_var_chain *chain, const char *name_arg)
678
{ chain_sys_var(chain); }
679
bool update(Session *session, set_var *var);
680
bool check_type(enum_var_type type) { return type == OPT_GLOBAL; }
681
SHOW_TYPE show_type() { return SHOW_LONGLONG; }
682
unsigned char *value_ptr(Session *session, enum_var_type type, LEX_STRING *base);
686
class sys_var_rand_seed1 :public sys_var
689
sys_var_rand_seed1(sys_var_chain *chain, const char *name_arg,
690
Binlog_status_enum binlog_status_arg= NOT_IN_BINLOG)
691
:sys_var(name_arg, NULL, binlog_status_arg)
692
{ chain_sys_var(chain); }
693
bool update(Session *session, set_var *var);
694
bool check_type(enum_var_type type) { return type == OPT_GLOBAL; }
697
class sys_var_rand_seed2 :public sys_var
700
sys_var_rand_seed2(sys_var_chain *chain, const char *name_arg,
701
Binlog_status_enum binlog_status_arg= NOT_IN_BINLOG)
702
:sys_var(name_arg, NULL, binlog_status_arg)
703
{ chain_sys_var(chain); }
704
bool update(Session *session, set_var *var);
705
bool check_type(enum_var_type type) { return type == OPT_GLOBAL; }
703
709
class sys_var_collation :public sys_var_session
706
sys_var_collation(const char *name_arg)
707
:sys_var_session(name_arg, NULL)
709
bool check(Session *session, set_var *var);
710
SHOW_TYPE show_type() { return SHOW_CHAR; }
711
bool check_update_type(Item_result type)
713
return ((type != STRING_RESULT) && (type != INT_RESULT));
715
bool check_default(sql_var_t) { return 0; }
716
virtual void set_default(Session *session, sql_var_t type)= 0;
712
sys_var_collation(const char *name_arg,
713
Binlog_status_enum binlog_status_arg= NOT_IN_BINLOG)
714
:sys_var_session(name_arg, NULL, binlog_status_arg)
716
no_support_one_shot= 0;
718
bool check(Session *session, set_var *var);
719
SHOW_TYPE show_type() { return SHOW_CHAR; }
720
bool check_update_type(Item_result type)
722
return ((type != STRING_RESULT) && (type != INT_RESULT));
724
bool check_default(enum_var_type type __attribute__((unused))) { return 0; }
725
virtual void set_default(Session *session, enum_var_type type)= 0;
728
class sys_var_character_set :public sys_var_session
732
sys_var_character_set(const char *name_arg, bool is_nullable= 0,
733
Binlog_status_enum binlog_status_arg= NOT_IN_BINLOG)
734
:sys_var_session(name_arg, NULL, binlog_status_arg), nullable(is_nullable)
737
In fact only almost all variables derived from sys_var_character_set
738
support ONE_SHOT; character_set_results doesn't. But that's good enough.
740
no_support_one_shot= 0;
742
bool check(Session *session, set_var *var);
743
SHOW_TYPE show_type() { return SHOW_CHAR; }
744
bool check_update_type(Item_result type)
746
return ((type != STRING_RESULT) && (type != INT_RESULT));
748
bool check_default(enum_var_type type __attribute__((unused)))
750
bool update(Session *session, set_var *var);
751
unsigned char *value_ptr(Session *session, enum_var_type type, LEX_STRING *base);
752
virtual void set_default(Session *session, enum_var_type type)= 0;
753
virtual const CHARSET_INFO **ci_ptr(Session *session, enum_var_type type)= 0;
719
756
class sys_var_collation_sv :public sys_var_collation
721
const CHARSET_INFO *system_variables::*offset;
758
const CHARSET_INFO *SV::*offset;
722
759
const CHARSET_INFO **global_default;
724
761
sys_var_collation_sv(sys_var_chain *chain, const char *name_arg,
725
const CHARSET_INFO *system_variables::*offset_arg,
726
const CHARSET_INFO **global_default_arg)
727
:sys_var_collation(name_arg),
762
const CHARSET_INFO *SV::*offset_arg,
763
const CHARSET_INFO **global_default_arg,
764
Binlog_status_enum binlog_status_arg= NOT_IN_BINLOG)
765
:sys_var_collation(name_arg, binlog_status_arg),
728
766
offset(offset_arg), global_default(global_default_arg)
730
768
chain_sys_var(chain);
732
770
bool update(Session *session, set_var *var);
733
void set_default(Session *session, sql_var_t type);
734
unsigned char *value_ptr(Session *session, sql_var_t type,
735
const LEX_STRING *base);
771
void set_default(Session *session, enum_var_type type);
772
unsigned char *value_ptr(Session *session, enum_var_type type, LEX_STRING *base);
776
class sys_var_key_cache_param :public sys_var
781
sys_var_key_cache_param(sys_var_chain *chain, const char *name_arg,
783
:sys_var(name_arg), offset(offset_arg)
784
{ chain_sys_var(chain); }
785
unsigned char *value_ptr(Session *session, enum_var_type type, LEX_STRING *base);
786
bool check_default(enum_var_type type __attribute__((unused)))
788
bool is_struct() { return 1; }
792
class sys_var_key_buffer_size :public sys_var_key_cache_param
795
sys_var_key_buffer_size(sys_var_chain *chain, const char *name_arg)
796
:sys_var_key_cache_param(chain, name_arg,
797
offsetof(KEY_CACHE, param_buff_size))
799
bool update(Session *session, set_var *var);
800
SHOW_TYPE show_type() { return SHOW_LONGLONG; }
804
class sys_var_key_cache_long :public sys_var_key_cache_param
807
sys_var_key_cache_long(sys_var_chain *chain, const char *name_arg, size_t offset_arg)
808
:sys_var_key_cache_param(chain, name_arg, offset_arg)
810
bool update(Session *session, set_var *var);
811
SHOW_TYPE show_type() { return SHOW_LONG; }
815
class sys_var_session_date_time_format :public sys_var_session
817
DATE_TIME_FORMAT *SV::*offset;
818
enum enum_drizzle_timestamp_type date_time_type;
820
sys_var_session_date_time_format(sys_var_chain *chain, const char *name_arg,
821
DATE_TIME_FORMAT *SV::*offset_arg,
822
enum enum_drizzle_timestamp_type date_time_type_arg)
823
:sys_var_session(name_arg), offset(offset_arg),
824
date_time_type(date_time_type_arg)
825
{ chain_sys_var(chain); }
826
SHOW_TYPE show_type() { return SHOW_CHAR; }
827
bool check_update_type(Item_result type)
829
return type != STRING_RESULT; /* Only accept strings */
831
bool check_default(enum_var_type type __attribute__((unused)))
833
bool check(Session *session, set_var *var);
834
bool update(Session *session, set_var *var);
835
void update2(Session *session, enum_var_type type, DATE_TIME_FORMAT *new_value);
836
unsigned char *value_ptr(Session *session, enum_var_type type, LEX_STRING *base);
837
void set_default(Session *session, enum_var_type type);
841
class sys_var_log_state :public sys_var_bool_ptr
845
sys_var_log_state(sys_var_chain *chain, const char *name_arg, bool *value_arg,
846
uint32_t log_type_arg)
847
:sys_var_bool_ptr(chain, name_arg, value_arg), log_type(log_type_arg) {}
848
bool update(Session *session, set_var *var);
849
void set_default(Session *session, enum_var_type type);
853
class sys_var_set :public sys_var
859
sys_var_set(sys_var_chain *chain, const char *name_arg, ulong *value_arg,
860
TYPELIB *typelib, sys_after_update_func func)
861
:sys_var(name_arg, func), value(value_arg), enum_names(typelib)
862
{ chain_sys_var(chain); }
863
virtual bool check(Session *session, set_var *var)
865
return check_set(session, var, enum_names);
867
virtual void set_default(Session *session __attribute__((unused)),
868
enum_var_type type __attribute__((unused)))
872
bool update(Session *session, set_var *var);
873
unsigned char *value_ptr(Session *session, enum_var_type type, LEX_STRING *base);
874
bool check_update_type(Item_result type __attribute__((unused)))
876
SHOW_TYPE show_type() { return SHOW_CHAR; }
879
class sys_var_set_slave_mode :public sys_var_set
882
sys_var_set_slave_mode(sys_var_chain *chain, const char *name_arg,
884
TYPELIB *typelib, sys_after_update_func func) :
885
sys_var_set(chain, name_arg, value_arg, typelib, func) {}
886
void set_default(Session *session, enum_var_type type);
887
bool check(Session *session, set_var *var);
888
bool update(Session *session, set_var *var);
891
class sys_var_log_output :public sys_var
896
sys_var_log_output(sys_var_chain *chain, const char *name_arg, ulong *value_arg,
897
TYPELIB *typelib, sys_after_update_func func)
898
:sys_var(name_arg,func), value(value_arg), enum_names(typelib)
900
chain_sys_var(chain);
901
set_allow_empty_value(false);
903
virtual bool check(Session *session, set_var *var)
905
return check_set(session, var, enum_names);
907
bool update(Session *session, set_var *var);
908
unsigned char *value_ptr(Session *session, enum_var_type type, LEX_STRING *base);
909
bool check_update_type(Item_result type __attribute__((unused)))
911
void set_default(Session *session, enum_var_type type);
912
SHOW_TYPE show_type() { return SHOW_CHAR; }
738
916
/* Variable that you can only read from */
740
918
class sys_var_readonly: public sys_var
921
enum_var_type var_type;
744
922
SHOW_TYPE show_type_value;
745
923
sys_value_ptr_func value_ptr_func;
746
sys_var_readonly(sys_var_chain *chain, const char *name_arg, sql_var_t type,
924
sys_var_readonly(sys_var_chain *chain, const char *name_arg, enum_var_type type,
747
925
SHOW_TYPE show_type_arg,
748
926
sys_value_ptr_func value_ptr_func_arg)
749
:sys_var(name_arg), var_type(type),
927
:sys_var(name_arg), var_type(type),
750
928
show_type_value(show_type_arg), value_ptr_func(value_ptr_func_arg)
751
929
{ chain_sys_var(chain); }
752
bool update(Session *, set_var *)
754
bool check_default(sql_var_t)
756
bool check_type(sql_var_t type) { return type != var_type; }
757
bool check_update_type(Item_result)
759
unsigned char *value_ptr(Session *session, sql_var_t,
930
bool update(Session *session __attribute__((unused)),
931
set_var *var __attribute__((unused)))
933
bool check_default(enum_var_type type __attribute__((unused)))
935
bool check_type(enum_var_type type) { return type != var_type; }
936
bool check_update_type(Item_result type __attribute__((unused)))
938
unsigned char *value_ptr(Session *session, enum_var_type type __attribute__((unused)),
939
LEX_STRING *base __attribute__((unused)))
762
941
return (*value_ptr_func)(session);
781
1021
return type != STRING_RESULT; /* Only accept strings */
783
bool check_default(sql_var_t)
1023
bool check_default(enum_var_type type __attribute__((unused)))
785
1025
bool update(Session *session, set_var *var);
786
unsigned char *value_ptr(Session *session, sql_var_t type,
787
const LEX_STRING *base);
788
virtual void set_default(Session *session, sql_var_t type);
1026
unsigned char *value_ptr(Session *session, enum_var_type type, LEX_STRING *base);
1027
virtual void set_default(Session *session, enum_var_type type);
1031
class sys_var_max_user_conn : public sys_var_session
1034
sys_var_max_user_conn(sys_var_chain *chain, const char *name_arg):
1035
sys_var_session(name_arg)
1036
{ chain_sys_var(chain); }
1037
bool check(Session *session, set_var *var);
1038
bool update(Session *session, set_var *var);
1039
bool check_default(enum_var_type type)
1041
return type != OPT_GLOBAL || !option_limits;
1043
void set_default(Session *session, enum_var_type type);
1044
SHOW_TYPE show_type() { return SHOW_INT; }
1045
unsigned char *value_ptr(Session *session, enum_var_type type, LEX_STRING *base);
792
1049
class sys_var_microseconds :public sys_var_session
794
uint64_t system_variables::*offset;
1051
uint64_t SV::*offset;
796
1053
sys_var_microseconds(sys_var_chain *chain, const char *name_arg,
797
uint64_t system_variables::*offset_arg):
1054
uint64_t SV::*offset_arg):
798
1055
sys_var_session(name_arg), offset(offset_arg)
799
1056
{ chain_sys_var(chain); }
800
bool check(Session *, set_var *) {return 0;}
1057
bool check(Session *session __attribute__((unused)),
1058
set_var *var __attribute__((unused))) {return 0;}
801
1059
bool update(Session *session, set_var *var);
802
void set_default(Session *session, sql_var_t type);
1060
void set_default(Session *session, enum_var_type type);
803
1061
SHOW_TYPE show_type() { return SHOW_DOUBLE; }
804
1062
bool check_update_type(Item_result type)
806
1064
return (type != INT_RESULT && type != REAL_RESULT && type != DECIMAL_RESULT);
1066
unsigned char *value_ptr(Session *session, enum_var_type type, LEX_STRING *base);
1070
Handler for setting the system variable --read-only.
1073
class sys_var_opt_readonly :public sys_var_bool_ptr
1076
sys_var_opt_readonly(sys_var_chain *chain, const char *name_arg,
1078
sys_var_bool_ptr(chain, name_arg, value_arg) {};
1079
~sys_var_opt_readonly() {};
1080
bool update(Session *session, set_var *var);
810
1084
class sys_var_session_lc_time_names :public sys_var_session
813
sys_var_session_lc_time_names(sys_var_chain *chain, const char *name_arg)
814
: sys_var_session(name_arg, NULL)
1087
sys_var_session_lc_time_names(sys_var_chain *chain, const char *name_arg,
1088
Binlog_status_enum binlog_status_arg= NOT_IN_BINLOG)
1089
: sys_var_session(name_arg, NULL, binlog_status_arg)
816
1091
chain_sys_var(chain);