86
86
chain_arg->first= this;
87
87
chain_arg->last= this;
89
virtual bool check(THD *thd, set_var *var);
90
bool check_enum(THD *thd, set_var *var, const TYPELIB *enum_names);
91
bool check_set(THD *thd, set_var *var, TYPELIB *enum_names);
92
bool is_written_to_binlog(enum_var_type type)
94
return (type == OPT_SESSION || type == OPT_DEFAULT) &&
95
(binlog_status == SESSION_VARIABLE_IN_BINLOG);
97
virtual bool update(THD *thd, set_var *var)=0;
98
virtual void set_default(THD *thd_arg __attribute__((unused)),
99
enum_var_type type __attribute__((unused)))
91
* Returns the name of the variable.
95
* So that we can exist in a Registry. We really need to formalize that
97
inline const std::string &getName() const
102
* Returns a vector of strings representing aliases
103
* for this variable's name.
105
const std::vector<std::string>& getAliases() const
107
return empty_aliases;
110
* Returns a pointer to the next sys_var, or NULL if none.
112
inline sys_var *getNext() const
117
* Sets the pointer to the next sys_var.
119
* @param Pointer to the next sys_var, or NULL if you set the tail...
121
inline void setNext(sys_var *in_next)
126
* Returns a pointer to the variable's option limits
128
inline struct my_option *getOptionLimits() const
130
return option_limits;
133
* Sets the pointer to the variable's option limits
135
* @param Pointer to the option limits my_option variable
137
inline void setOptionLimits(struct my_option *in_option_limits)
139
option_limits= in_option_limits;
142
* Returns the function pointer for after update trigger, or NULL if none.
144
inline sys_after_update_func getAfterUpdateTrigger() const
148
virtual bool check(Session *session, set_var *var);
149
bool check_enum(Session *session, set_var *var, const TYPELIB *enum_names);
150
bool check_set(Session *session, set_var *var, TYPELIB *enum_names);
151
virtual bool update(Session *session, set_var *var)=0;
152
virtual void set_default(Session *, enum_var_type)
101
virtual SHOW_TYPE show_type() { return SHOW_UNDEF; }
102
virtual uchar *value_ptr(THD *thd __attribute__((unused)),
103
enum_var_type type __attribute__((unused)),
104
LEX_STRING *base __attribute__((unused)))
154
virtual SHOW_TYPE show_type()
158
virtual unsigned char *value_ptr(Session *, enum_var_type, const LEX_STRING *)
106
162
virtual bool check_type(enum_var_type type)
107
{ return type != OPT_GLOBAL; } /* Error if not GLOBAL */
164
return type != OPT_GLOBAL;
165
} /* Error if not GLOBAL */
108
166
virtual bool check_update_type(Item_result type)
109
{ return type != INT_RESULT; } /* Assume INT */
110
virtual bool check_default(enum_var_type type __attribute__((unused)))
111
{ return option_limits == 0; }
112
Item *item(THD *thd, enum_var_type type, LEX_STRING *base);
113
virtual bool is_struct() { return 0; }
114
virtual bool is_readonly() const { return 0; }
115
virtual sys_var_pluginvar *cast_pluginvar() { return 0; }
118
void set_allow_empty_value(bool allow_empty_value)
120
m_allow_empty_value= allow_empty_value;
124
const Binlog_status_enum binlog_status;
126
bool m_allow_empty_value;
168
return type != INT_RESULT;
170
virtual bool check_default(enum_var_type)
172
return option_limits == 0;
174
Item *item(Session *session, enum_var_type type, const LEX_STRING *base);
175
virtual bool is_readonly() const
179
virtual sys_var_pluginvar *cast_pluginvar()
131
A base class for all variables that require its access to
132
be guarded with a mutex.
186
* A base class for all variables that require its access to
187
* be guarded with a mutex.
135
189
class sys_var_global: public sys_var
138
192
pthread_mutex_t *guard;
140
sys_var_global(const char *name_arg, sys_after_update_func after_update_arg,
194
sys_var_global(const char *name_arg,
195
sys_after_update_func after_update_arg,
141
196
pthread_mutex_t *guard_arg)
142
:sys_var(name_arg, after_update_arg), guard(guard_arg) {}
147
A global-only ulong variable that requires its access to be
148
protected with a mutex.
151
class sys_var_long_ptr_global: public sys_var_global
155
sys_var_long_ptr_global(sys_var_chain *chain, const char *name_arg,
156
ulong *value_ptr_arg,
157
pthread_mutex_t *guard_arg,
158
sys_after_update_func after_update_arg= NULL)
159
:sys_var_global(name_arg, after_update_arg, guard_arg),
161
{ chain_sys_var(chain); }
162
bool check(THD *thd, set_var *var);
163
bool update(THD *thd, set_var *var);
164
void set_default(THD *thd, enum_var_type type);
165
SHOW_TYPE show_type() { return SHOW_LONG; }
166
uchar *value_ptr(THD *thd __attribute__((unused)),
167
enum_var_type type __attribute__((unused)),
168
LEX_STRING *base __attribute__((unused)))
169
{ return (uchar*) value; }
174
A global ulong variable that is protected by LOCK_global_system_variables
177
class sys_var_long_ptr :public sys_var_long_ptr_global
180
sys_var_long_ptr(sys_var_chain *chain, const char *name_arg, ulong *value_ptr,
181
sys_after_update_func after_update_arg= NULL);
198
sys_var(name_arg, after_update_arg),
203
class sys_var_uint32_t_ptr :public sys_var
207
sys_var_uint32_t_ptr(sys_var_chain *chain, const char *name_arg,
208
uint32_t *value_ptr_arg)
209
:sys_var(name_arg),value(value_ptr_arg)
210
{ chain_sys_var(chain); }
211
sys_var_uint32_t_ptr(sys_var_chain *chain, const char *name_arg,
212
uint32_t *value_ptr_arg,
213
sys_after_update_func func)
214
:sys_var(name_arg,func), value(value_ptr_arg)
215
{ chain_sys_var(chain); }
216
bool check(Session *session, set_var *var);
217
bool update(Session *session, set_var *var);
218
void set_default(Session *session, enum_var_type type);
219
SHOW_TYPE show_type() { return SHOW_INT; }
220
unsigned char *value_ptr(Session *, enum_var_type, const LEX_STRING *)
221
{ return (unsigned char*) value; }
351
395
class sys_var_enum :public sys_var
354
398
TYPELIB *enum_names;
356
sys_var_enum(sys_var_chain *chain, const char *name_arg, uint *value_arg,
400
sys_var_enum(sys_var_chain *chain, const char *name_arg, uint32_t *value_arg,
357
401
TYPELIB *typelib, sys_after_update_func func)
358
402
:sys_var(name_arg,func), value(value_arg), enum_names(typelib)
359
403
{ chain_sys_var(chain); }
360
bool check(THD *thd, set_var *var)
404
bool check(Session *session, set_var *var)
362
return check_enum(thd, var, enum_names);
406
return check_enum(session, var, enum_names);
364
bool update(THD *thd, set_var *var);
408
bool update(Session *session, set_var *var);
365
409
SHOW_TYPE show_type() { return SHOW_CHAR; }
366
uchar *value_ptr(THD *thd, enum_var_type type, LEX_STRING *base);
367
bool check_update_type(Item_result type __attribute__((unused)))
410
unsigned char *value_ptr(Session *session, enum_var_type type,
411
const LEX_STRING *base);
412
bool check_update_type(Item_result)
372
417
class sys_var_enum_const :public sys_var
419
uint32_t SV::*offset;
375
420
TYPELIB *enum_names;
377
sys_var_enum_const(sys_var_chain *chain, const char *name_arg, ulong SV::*offset_arg,
422
sys_var_enum_const(sys_var_chain *chain, const char *name_arg, uint32_t SV::*offset_arg,
378
423
TYPELIB *typelib, sys_after_update_func func)
379
424
:sys_var(name_arg,func), offset(offset_arg), enum_names(typelib)
380
425
{ chain_sys_var(chain); }
381
bool check(THD *thd __attribute__((unused)),
382
set_var *var __attribute__((unused)))
426
bool check(Session *, set_var *)
384
bool update(THD *thd __attribute__((unused)),
385
set_var *var __attribute__((unused)))
428
bool update(Session *, set_var *)
387
430
SHOW_TYPE show_type() { return SHOW_CHAR; }
388
bool check_update_type(Item_result type __attribute__((unused)))
431
bool check_update_type(Item_result)
390
433
bool is_readonly() const { return 1; }
391
uchar *value_ptr(THD *thd, enum_var_type type, LEX_STRING *base);
434
unsigned char *value_ptr(Session *session, enum_var_type type,
435
const LEX_STRING *base);
395
class sys_var_thd :public sys_var
439
class sys_var_session :public sys_var
398
sys_var_thd(const char *name_arg,
399
sys_after_update_func func= NULL,
400
Binlog_status_enum binlog_status= NOT_IN_BINLOG)
401
:sys_var(name_arg, func, binlog_status)
442
sys_var_session(const char *name_arg,
443
sys_after_update_func func= NULL)
444
:sys_var(name_arg, func)
403
bool check_type(enum_var_type type __attribute__((unused)))
446
bool check_type(enum_var_type)
405
448
bool check_default(enum_var_type type)
412
class sys_var_thd_ulong :public sys_var_thd
454
class sys_var_session_uint32_t :public sys_var_session
414
456
sys_check_func check_func;
417
sys_var_thd_ulong(sys_var_chain *chain, const char *name_arg,
418
ulong SV::*offset_arg,
419
sys_check_func c_func= NULL,
420
sys_after_update_func au_func= NULL,
421
Binlog_status_enum binlog_status_arg= NOT_IN_BINLOG)
422
:sys_var_thd(name_arg, au_func, binlog_status_arg), check_func(c_func),
458
uint32_t SV::*offset;
459
sys_var_session_uint32_t(sys_var_chain *chain, const char *name_arg,
460
uint32_t SV::*offset_arg,
461
sys_check_func c_func= NULL,
462
sys_after_update_func au_func= NULL)
463
:sys_var_session(name_arg, au_func), check_func(c_func),
423
464
offset(offset_arg)
424
465
{ chain_sys_var(chain); }
425
bool check(THD *thd, set_var *var);
426
bool update(THD *thd, set_var *var);
427
void set_default(THD *thd, enum_var_type type);
428
SHOW_TYPE show_type() { return SHOW_LONG; }
429
uchar *value_ptr(THD *thd, enum_var_type type, LEX_STRING *base);
466
bool check(Session *session, set_var *var);
467
bool update(Session *session, set_var *var);
468
void set_default(Session *session, enum_var_type type);
469
SHOW_TYPE show_type() { return SHOW_INT; }
470
unsigned char *value_ptr(Session *session, enum_var_type type,
471
const LEX_STRING *base);
433
class sys_var_thd_ha_rows :public sys_var_thd
475
class sys_var_session_ha_rows :public sys_var_session
436
478
ha_rows SV::*offset;
437
sys_var_thd_ha_rows(sys_var_chain *chain, const char *name_arg,
479
sys_var_session_ha_rows(sys_var_chain *chain, const char *name_arg,
438
480
ha_rows SV::*offset_arg)
439
:sys_var_thd(name_arg), offset(offset_arg)
481
:sys_var_session(name_arg), offset(offset_arg)
440
482
{ chain_sys_var(chain); }
441
sys_var_thd_ha_rows(sys_var_chain *chain, const char *name_arg,
483
sys_var_session_ha_rows(sys_var_chain *chain, const char *name_arg,
442
484
ha_rows SV::*offset_arg,
443
485
sys_after_update_func func)
444
:sys_var_thd(name_arg,func), offset(offset_arg)
486
:sys_var_session(name_arg,func), offset(offset_arg)
445
487
{ chain_sys_var(chain); }
446
bool update(THD *thd, set_var *var);
447
void set_default(THD *thd, enum_var_type type);
488
bool update(Session *session, set_var *var);
489
void set_default(Session *session, enum_var_type type);
448
490
SHOW_TYPE show_type() { return SHOW_HA_ROWS; }
449
uchar *value_ptr(THD *thd, enum_var_type type, LEX_STRING *base);
491
unsigned char *value_ptr(Session *session, enum_var_type type,
492
const LEX_STRING *base);
453
class sys_var_thd_uint64_t :public sys_var_thd
496
class sys_var_session_uint64_t :public sys_var_session
498
sys_check_func check_func;
456
500
uint64_t SV::*offset;
457
501
bool only_global;
458
sys_var_thd_uint64_t(sys_var_chain *chain, const char *name_arg,
459
uint64_t SV::*offset_arg)
460
:sys_var_thd(name_arg), offset(offset_arg)
502
sys_var_session_uint64_t(sys_var_chain *chain,
503
const char *name_arg,
504
uint64_t SV::*offset_arg,
505
sys_after_update_func au_func= NULL,
506
sys_check_func c_func= NULL)
507
:sys_var_session(name_arg, au_func),
461
510
{ chain_sys_var(chain); }
462
sys_var_thd_uint64_t(sys_var_chain *chain, const char *name_arg,
463
uint64_t SV::*offset_arg,
464
sys_after_update_func func, bool only_global_arg)
465
:sys_var_thd(name_arg, func), offset(offset_arg),
511
sys_var_session_uint64_t(sys_var_chain *chain,
512
const char *name_arg,
513
uint64_t SV::*offset_arg,
514
sys_after_update_func func,
515
bool only_global_arg,
516
sys_check_func cfunc= NULL)
517
:sys_var_session(name_arg, func),
466
520
only_global(only_global_arg)
467
521
{ chain_sys_var(chain); }
468
bool update(THD *thd, set_var *var);
469
void set_default(THD *thd, enum_var_type type);
522
bool update(Session *session, set_var *var);
523
void set_default(Session *session, enum_var_type type);
470
524
SHOW_TYPE show_type() { return SHOW_LONGLONG; }
471
uchar *value_ptr(THD *thd, enum_var_type type, LEX_STRING *base);
472
bool check(THD *thd, set_var *var);
473
bool check_default(enum_var_type type)
475
return type == OPT_GLOBAL && !option_limits;
477
bool check_type(enum_var_type type)
479
return (only_global && type != OPT_GLOBAL);
484
class sys_var_thd_bool :public sys_var_thd
525
unsigned char *value_ptr(Session *session, enum_var_type type,
526
const LEX_STRING *base);
527
bool check(Session *session, set_var *var);
528
bool check_default(enum_var_type type)
530
return type == OPT_GLOBAL && !option_limits;
532
bool check_type(enum_var_type type)
534
return (only_global && type != OPT_GLOBAL);
538
class sys_var_session_size_t :public sys_var_session
540
sys_check_func check_func;
544
sys_var_session_size_t(sys_var_chain *chain, const char *name_arg,
545
size_t SV::*offset_arg,
546
sys_after_update_func au_func= NULL,
547
sys_check_func c_func= NULL)
548
:sys_var_session(name_arg, au_func),
551
{ chain_sys_var(chain); }
552
sys_var_session_size_t(sys_var_chain *chain,
553
const char *name_arg,
554
size_t SV::*offset_arg,
555
sys_after_update_func func,
556
bool only_global_arg,
557
sys_check_func cfunc= NULL)
558
:sys_var_session(name_arg, func),
561
only_global(only_global_arg)
562
{ chain_sys_var(chain); }
563
bool update(Session *session, set_var *var);
564
void set_default(Session *session, enum_var_type type);
565
SHOW_TYPE show_type() { return SHOW_SIZE; }
566
unsigned char *value_ptr(Session *session, enum_var_type type,
567
const LEX_STRING *base);
568
bool check(Session *session, set_var *var);
569
bool check_default(enum_var_type type)
571
return type == OPT_GLOBAL && !option_limits;
573
bool check_type(enum_var_type type)
575
return (only_global && type != OPT_GLOBAL);
580
class sys_var_session_bool :public sys_var_session
487
583
bool SV::*offset;
488
sys_var_thd_bool(sys_var_chain *chain, const char *name_arg, bool SV::*offset_arg)
489
:sys_var_thd(name_arg), offset(offset_arg)
584
sys_var_session_bool(sys_var_chain *chain, const char *name_arg, bool SV::*offset_arg)
585
:sys_var_session(name_arg), offset(offset_arg)
490
586
{ chain_sys_var(chain); }
491
sys_var_thd_bool(sys_var_chain *chain, const char *name_arg, bool SV::*offset_arg,
587
sys_var_session_bool(sys_var_chain *chain, const char *name_arg, bool SV::*offset_arg,
492
588
sys_after_update_func func)
493
:sys_var_thd(name_arg,func), offset(offset_arg)
589
:sys_var_session(name_arg,func), offset(offset_arg)
494
590
{ chain_sys_var(chain); }
495
bool update(THD *thd, set_var *var);
496
void set_default(THD *thd, enum_var_type type);
591
bool update(Session *session, set_var *var);
592
void set_default(Session *session, enum_var_type type);
497
593
SHOW_TYPE show_type() { return SHOW_MY_BOOL; }
498
uchar *value_ptr(THD *thd, enum_var_type type, LEX_STRING *base);
499
bool check(THD *thd, set_var *var)
594
unsigned char *value_ptr(Session *session, enum_var_type type,
595
const LEX_STRING *base);
596
bool check(Session *session, set_var *var)
501
return check_enum(thd, var, &bool_typelib);
598
return check_enum(session, var, &bool_typelib);
503
bool check_update_type(Item_result type __attribute__((unused)))
600
bool check_update_type(Item_result)
508
class sys_var_thd_enum :public sys_var_thd
605
class sys_var_session_enum :public sys_var_session
608
uint32_t SV::*offset;
512
609
TYPELIB *enum_names;
513
610
sys_check_func check_func;
515
sys_var_thd_enum(sys_var_chain *chain, const char *name_arg,
516
ulong SV::*offset_arg, TYPELIB *typelib,
612
sys_var_session_enum(sys_var_chain *chain, const char *name_arg,
613
uint32_t SV::*offset_arg, TYPELIB *typelib,
517
614
sys_after_update_func func= NULL,
518
sys_check_func check= NULL)
519
:sys_var_thd(name_arg, func), offset(offset_arg),
520
enum_names(typelib), check_func(check)
615
sys_check_func check_f= NULL)
616
:sys_var_session(name_arg, func), offset(offset_arg),
617
enum_names(typelib), check_func(check_f)
521
618
{ chain_sys_var(chain); }
522
bool check(THD *thd, set_var *var)
619
bool check(Session *session, set_var *var)
526
ret= (*check_func)(thd, var);
527
return ret ? ret : check_enum(thd, var, enum_names);
623
ret= (*check_func)(session, var);
624
return ret ? ret : check_enum(session, var, enum_names);
529
bool update(THD *thd, set_var *var);
530
void set_default(THD *thd, enum_var_type type);
626
bool update(Session *session, set_var *var);
627
void set_default(Session *session, enum_var_type type);
531
628
SHOW_TYPE show_type() { return SHOW_CHAR; }
532
uchar *value_ptr(THD *thd, enum_var_type type, LEX_STRING *base);
533
bool check_update_type(Item_result type __attribute__((unused)))
629
unsigned char *value_ptr(Session *session, enum_var_type type,
630
const LEX_STRING *base);
631
bool check_update_type(Item_result)
539
class sys_var_thd_optimizer_switch :public sys_var_thd_enum
637
class sys_var_session_optimizer_switch :public sys_var_session_enum
542
sys_var_thd_optimizer_switch(sys_var_chain *chain, const char *name_arg,
543
ulong SV::*offset_arg)
544
:sys_var_thd_enum(chain, name_arg, offset_arg, &optimizer_switch_typelib)
640
sys_var_session_optimizer_switch(sys_var_chain *chain, const char *name_arg,
641
uint32_t SV::*offset_arg)
642
:sys_var_session_enum(chain, name_arg, offset_arg, &optimizer_switch_typelib)
546
bool check(THD *thd, set_var *var)
644
bool check(Session *session, set_var *var)
548
return check_set(thd, var, enum_names);
646
return check_set(session, var, enum_names);
550
void set_default(THD *thd, enum_var_type type);
551
uchar *value_ptr(THD *thd, enum_var_type type, LEX_STRING *base);
552
static bool symbolic_mode_representation(THD *thd, uint64_t sql_mode,
648
void set_default(Session *session, enum_var_type type);
649
unsigned char *value_ptr(Session *session, enum_var_type type,
650
const LEX_STRING *base);
651
static bool symbolic_mode_representation(Session *session, uint32_t sql_mode,
553
652
LEX_STRING *rep);
557
class sys_var_thd_storage_engine :public sys_var_thd
656
class sys_var_session_storage_engine :public sys_var_session
560
plugin_ref SV::*offset;
659
StorageEngine *SV::*offset;
562
sys_var_thd_storage_engine(sys_var_chain *chain, const char *name_arg,
563
plugin_ref SV::*offset_arg)
564
:sys_var_thd(name_arg), offset(offset_arg)
661
sys_var_session_storage_engine(sys_var_chain *chain, const char *name_arg,
662
StorageEngine *SV::*offset_arg)
663
:sys_var_session(name_arg), offset(offset_arg)
565
664
{ chain_sys_var(chain); }
566
bool check(THD *thd, set_var *var);
665
bool check(Session *session, set_var *var);
567
666
SHOW_TYPE show_type() { return SHOW_CHAR; }
568
667
bool check_update_type(Item_result type)
570
669
return type != STRING_RESULT; /* Only accept strings */
572
void set_default(THD *thd, enum_var_type type);
573
bool update(THD *thd, set_var *var);
574
uchar *value_ptr(THD *thd, enum_var_type type, LEX_STRING *base);
671
void set_default(Session *session, enum_var_type type);
672
bool update(Session *session, set_var *var);
673
unsigned char *value_ptr(Session *session, enum_var_type type,
674
const LEX_STRING *base);
577
class sys_var_thd_bit :public sys_var_thd
677
class sys_var_session_bit :public sys_var_session
579
679
sys_check_func check_func;
580
680
sys_update_func update_func;
582
682
uint64_t bit_flag;
584
sys_var_thd_bit(sys_var_chain *chain, const char *name_arg,
684
sys_var_session_bit(sys_var_chain *chain, const char *name_arg,
585
685
sys_check_func c_func, sys_update_func u_func,
586
uint64_t bit, bool reverse_arg=0,
587
Binlog_status_enum binlog_status_arg= NOT_IN_BINLOG)
588
:sys_var_thd(name_arg, NULL, binlog_status_arg), check_func(c_func),
686
uint64_t bit, bool reverse_arg=0)
687
:sys_var_session(name_arg, NULL), check_func(c_func),
589
688
update_func(u_func), bit_flag(bit), reverse(reverse_arg)
590
689
{ chain_sys_var(chain); }
591
bool check(THD *thd, set_var *var);
592
bool update(THD *thd, set_var *var);
593
bool check_update_type(Item_result type __attribute__((unused)))
690
bool check(Session *session, set_var *var);
691
bool update(Session *session, set_var *var);
692
bool check_update_type(Item_result)
595
694
bool check_type(enum_var_type type) { return type == OPT_GLOBAL; }
596
695
SHOW_TYPE show_type() { return SHOW_MY_BOOL; }
597
uchar *value_ptr(THD *thd, enum_var_type type, LEX_STRING *base);
696
unsigned char *value_ptr(Session *session, enum_var_type type,
697
const LEX_STRING *base);
600
700
/* some variables that require special handling */
602
702
class sys_var_timestamp :public sys_var
605
sys_var_timestamp(sys_var_chain *chain, const char *name_arg,
606
Binlog_status_enum binlog_status_arg= NOT_IN_BINLOG)
607
:sys_var(name_arg, NULL, binlog_status_arg)
705
sys_var_timestamp(sys_var_chain *chain, const char *name_arg)
706
:sys_var(name_arg, NULL)
608
707
{ chain_sys_var(chain); }
609
bool update(THD *thd, set_var *var);
610
void set_default(THD *thd, enum_var_type type);
708
bool update(Session *session, set_var *var);
709
void set_default(Session *session, enum_var_type type);
611
710
bool check_type(enum_var_type type) { return type == OPT_GLOBAL; }
612
bool check_default(enum_var_type type __attribute__((unused)))
711
bool check_default(enum_var_type)
614
713
SHOW_TYPE show_type(void) { return SHOW_LONG; }
615
uchar *value_ptr(THD *thd, enum_var_type type, LEX_STRING *base);
714
unsigned char *value_ptr(Session *session, enum_var_type type,
715
const LEX_STRING *base);
619
719
class sys_var_last_insert_id :public sys_var
622
sys_var_last_insert_id(sys_var_chain *chain, const char *name_arg,
623
Binlog_status_enum binlog_status_arg= NOT_IN_BINLOG)
624
:sys_var(name_arg, NULL, binlog_status_arg)
625
{ chain_sys_var(chain); }
626
bool update(THD *thd, set_var *var);
627
bool check_type(enum_var_type type) { return type == OPT_GLOBAL; }
628
SHOW_TYPE show_type() { return SHOW_LONGLONG; }
629
uchar *value_ptr(THD *thd, enum_var_type type, LEX_STRING *base);
633
class sys_var_insert_id :public sys_var
636
sys_var_insert_id(sys_var_chain *chain, const char *name_arg)
638
{ chain_sys_var(chain); }
639
bool update(THD *thd, set_var *var);
640
bool check_type(enum_var_type type) { return type == OPT_GLOBAL; }
641
SHOW_TYPE show_type() { return SHOW_LONGLONG; }
642
uchar *value_ptr(THD *thd, enum_var_type type, LEX_STRING *base);
646
class sys_var_rand_seed1 :public sys_var
649
sys_var_rand_seed1(sys_var_chain *chain, const char *name_arg,
650
Binlog_status_enum binlog_status_arg= NOT_IN_BINLOG)
651
:sys_var(name_arg, NULL, binlog_status_arg)
652
{ chain_sys_var(chain); }
653
bool update(THD *thd, set_var *var);
654
bool check_type(enum_var_type type) { return type == OPT_GLOBAL; }
657
class sys_var_rand_seed2 :public sys_var
660
sys_var_rand_seed2(sys_var_chain *chain, const char *name_arg,
661
Binlog_status_enum binlog_status_arg= NOT_IN_BINLOG)
662
:sys_var(name_arg, NULL, binlog_status_arg)
663
{ chain_sys_var(chain); }
664
bool update(THD *thd, set_var *var);
665
bool check_type(enum_var_type type) { return type == OPT_GLOBAL; }
669
class sys_var_collation :public sys_var_thd
672
sys_var_collation(const char *name_arg,
673
Binlog_status_enum binlog_status_arg= NOT_IN_BINLOG)
674
:sys_var_thd(name_arg, NULL, binlog_status_arg)
676
no_support_one_shot= 0;
678
bool check(THD *thd, set_var *var);
679
SHOW_TYPE show_type() { return SHOW_CHAR; }
680
bool check_update_type(Item_result type)
682
return ((type != STRING_RESULT) && (type != INT_RESULT));
684
bool check_default(enum_var_type type __attribute__((unused))) { return 0; }
685
virtual void set_default(THD *thd, enum_var_type type)= 0;
688
class sys_var_character_set :public sys_var_thd
692
sys_var_character_set(const char *name_arg, bool is_nullable= 0,
693
Binlog_status_enum binlog_status_arg= NOT_IN_BINLOG)
694
:sys_var_thd(name_arg, NULL, binlog_status_arg), nullable(is_nullable)
697
In fact only almost all variables derived from sys_var_character_set
698
support ONE_SHOT; character_set_results doesn't. But that's good enough.
700
no_support_one_shot= 0;
702
bool check(THD *thd, set_var *var);
703
SHOW_TYPE show_type() { return SHOW_CHAR; }
704
bool check_update_type(Item_result type)
706
return ((type != STRING_RESULT) && (type != INT_RESULT));
708
bool check_default(enum_var_type type __attribute__((unused)))
710
bool update(THD *thd, set_var *var);
711
uchar *value_ptr(THD *thd, enum_var_type type, LEX_STRING *base);
712
virtual void set_default(THD *thd, enum_var_type type)= 0;
713
virtual const CHARSET_INFO **ci_ptr(THD *thd, enum_var_type type)= 0;
716
class sys_var_character_set_sv :public sys_var_character_set
718
const CHARSET_INFO *SV::*offset;
719
const CHARSET_INFO **global_default;
721
sys_var_character_set_sv(sys_var_chain *chain, const char *name_arg,
722
const CHARSET_INFO *SV::*offset_arg,
723
const CHARSET_INFO **global_default_arg,
725
Binlog_status_enum binlog_status_arg= NOT_IN_BINLOG)
726
: sys_var_character_set(name_arg, is_nullable, binlog_status_arg),
727
offset(offset_arg), global_default(global_default_arg)
728
{ chain_sys_var(chain); }
729
void set_default(THD *thd, enum_var_type type);
730
const CHARSET_INFO **ci_ptr(THD *thd, enum_var_type type);
734
class sys_var_character_set_client: public sys_var_character_set_sv
737
sys_var_character_set_client(sys_var_chain *chain, const char *name_arg,
738
const CHARSET_INFO *SV::*offset_arg,
739
const CHARSET_INFO **global_default_arg,
740
Binlog_status_enum binlog_status_arg)
741
: sys_var_character_set_sv(chain, name_arg, offset_arg, global_default_arg,
742
0, binlog_status_arg)
722
sys_var_last_insert_id(sys_var_chain *chain, const char *name_arg)
723
:sys_var(name_arg, NULL)
724
{ chain_sys_var(chain); }
725
bool update(Session *session, set_var *var);
726
bool check_type(enum_var_type type) { return type == OPT_GLOBAL; }
727
SHOW_TYPE show_type() { return SHOW_LONGLONG; }
728
unsigned char *value_ptr(Session *session, enum_var_type type,
729
const LEX_STRING *base);
733
class sys_var_collation :public sys_var_session
736
sys_var_collation(const char *name_arg)
737
:sys_var_session(name_arg, NULL)
744
bool check(THD *thd, set_var *var);
748
class sys_var_character_set_database :public sys_var_character_set
751
sys_var_character_set_database(sys_var_chain *chain, const char *name_arg,
752
Binlog_status_enum binlog_status_arg=
754
: sys_var_character_set(name_arg, 0, binlog_status_arg)
755
{ chain_sys_var(chain); }
756
void set_default(THD *thd, enum_var_type type);
757
const CHARSET_INFO **ci_ptr(THD *thd, enum_var_type type);
739
bool check(Session *session, set_var *var);
740
SHOW_TYPE show_type() { return SHOW_CHAR; }
741
bool check_update_type(Item_result type)
743
return ((type != STRING_RESULT) && (type != INT_RESULT));
745
bool check_default(enum_var_type) { return 0; }
746
virtual void set_default(Session *session, enum_var_type type)= 0;
760
749
class sys_var_collation_sv :public sys_var_collation
800
789
:sys_var_key_cache_param(chain, name_arg,
801
790
offsetof(KEY_CACHE, param_buff_size))
803
bool update(THD *thd, set_var *var);
792
bool update(Session *session, set_var *var);
804
793
SHOW_TYPE show_type() { return SHOW_LONGLONG; }
808
class sys_var_key_cache_long :public sys_var_key_cache_param
797
class sys_var_key_cache_uint32_t :public sys_var_key_cache_param
811
sys_var_key_cache_long(sys_var_chain *chain, const char *name_arg, size_t offset_arg)
800
sys_var_key_cache_uint32_t(sys_var_chain *chain, const char *name_arg, size_t offset_arg)
812
801
:sys_var_key_cache_param(chain, name_arg, offset_arg)
814
bool update(THD *thd, set_var *var);
815
SHOW_TYPE show_type() { return SHOW_LONG; }
819
class sys_var_thd_date_time_format :public sys_var_thd
821
DATE_TIME_FORMAT *SV::*offset;
822
timestamp_type date_time_type;
824
sys_var_thd_date_time_format(sys_var_chain *chain, const char *name_arg,
825
DATE_TIME_FORMAT *SV::*offset_arg,
826
timestamp_type date_time_type_arg)
827
:sys_var_thd(name_arg), offset(offset_arg),
828
date_time_type(date_time_type_arg)
829
{ chain_sys_var(chain); }
830
SHOW_TYPE show_type() { return SHOW_CHAR; }
831
bool check_update_type(Item_result type)
833
return type != STRING_RESULT; /* Only accept strings */
835
bool check_default(enum_var_type type __attribute__((unused)))
837
bool check(THD *thd, set_var *var);
838
bool update(THD *thd, set_var *var);
839
void update2(THD *thd, enum_var_type type, DATE_TIME_FORMAT *new_value);
840
uchar *value_ptr(THD *thd, enum_var_type type, LEX_STRING *base);
841
void set_default(THD *thd, enum_var_type type);
845
class sys_var_log_state :public sys_var_bool_ptr
849
sys_var_log_state(sys_var_chain *chain, const char *name_arg, bool *value_arg,
851
:sys_var_bool_ptr(chain, name_arg, value_arg), log_type(log_type_arg) {}
852
bool update(THD *thd, set_var *var);
853
void set_default(THD *thd, enum_var_type type);
857
class sys_var_set :public sys_var
863
sys_var_set(sys_var_chain *chain, const char *name_arg, ulong *value_arg,
864
TYPELIB *typelib, sys_after_update_func func)
865
:sys_var(name_arg, func), value(value_arg), enum_names(typelib)
866
{ chain_sys_var(chain); }
867
virtual bool check(THD *thd, set_var *var)
869
return check_set(thd, var, enum_names);
871
virtual void set_default(THD *thd __attribute__((unused)),
872
enum_var_type type __attribute__((unused)))
876
bool update(THD *thd, set_var *var);
877
uchar *value_ptr(THD *thd, enum_var_type type, LEX_STRING *base);
878
bool check_update_type(Item_result type __attribute__((unused)))
880
SHOW_TYPE show_type() { return SHOW_CHAR; }
883
class sys_var_set_slave_mode :public sys_var_set
886
sys_var_set_slave_mode(sys_var_chain *chain, const char *name_arg,
888
TYPELIB *typelib, sys_after_update_func func) :
889
sys_var_set(chain, name_arg, value_arg, typelib, func) {}
890
void set_default(THD *thd, enum_var_type type);
891
bool check(THD *thd, set_var *var);
892
bool update(THD *thd, set_var *var);
895
class sys_var_log_output :public sys_var
900
sys_var_log_output(sys_var_chain *chain, const char *name_arg, ulong *value_arg,
901
TYPELIB *typelib, sys_after_update_func func)
902
:sys_var(name_arg,func), value(value_arg), enum_names(typelib)
904
chain_sys_var(chain);
905
set_allow_empty_value(false);
907
virtual bool check(THD *thd, set_var *var)
909
return check_set(thd, var, enum_names);
911
bool update(THD *thd, set_var *var);
912
uchar *value_ptr(THD *thd, enum_var_type type, LEX_STRING *base);
913
bool check_update_type(Item_result type __attribute__((unused)))
915
void set_default(THD *thd, enum_var_type type);
916
SHOW_TYPE show_type() { return SHOW_CHAR; }
803
bool update(Session *session, set_var *var);
804
SHOW_TYPE show_type() { return SHOW_INT; }
920
807
/* Variable that you can only read from */
1011
class sys_var_thd_time_zone :public sys_var_thd
895
class sys_var_session_time_zone :public sys_var_session
1014
sys_var_thd_time_zone(sys_var_chain *chain, const char *name_arg,
1015
Binlog_status_enum binlog_status_arg= NOT_IN_BINLOG)
1016
:sys_var_thd(name_arg, NULL, binlog_status_arg)
898
sys_var_session_time_zone(sys_var_chain *chain, const char *name_arg)
899
:sys_var_session(name_arg, NULL)
1018
no_support_one_shot= 0;
1019
901
chain_sys_var(chain);
1021
bool check(THD *thd, set_var *var);
903
bool check(Session *session, set_var *var);
1022
904
SHOW_TYPE show_type() { return SHOW_CHAR; }
1023
905
bool check_update_type(Item_result type)
1025
907
return type != STRING_RESULT; /* Only accept strings */
1027
bool check_default(enum_var_type type __attribute__((unused)))
909
bool check_default(enum_var_type)
1029
bool update(THD *thd, set_var *var);
1030
uchar *value_ptr(THD *thd, enum_var_type type, LEX_STRING *base);
1031
virtual void set_default(THD *thd, enum_var_type type);
1035
class sys_var_max_user_conn : public sys_var_thd
1038
sys_var_max_user_conn(sys_var_chain *chain, const char *name_arg):
1039
sys_var_thd(name_arg)
1040
{ chain_sys_var(chain); }
1041
bool check(THD *thd, set_var *var);
1042
bool update(THD *thd, set_var *var);
1043
bool check_default(enum_var_type type)
1045
return type != OPT_GLOBAL || !option_limits;
1047
void set_default(THD *thd, enum_var_type type);
1048
SHOW_TYPE show_type() { return SHOW_INT; }
1049
uchar *value_ptr(THD *thd, enum_var_type type, LEX_STRING *base);
1053
class sys_var_microseconds :public sys_var_thd
911
bool update(Session *session, set_var *var);
912
unsigned char *value_ptr(Session *session, enum_var_type type,
913
const LEX_STRING *base);
914
virtual void set_default(Session *session, enum_var_type type);
918
class sys_var_microseconds :public sys_var_session
1055
920
uint64_t SV::*offset;
1057
922
sys_var_microseconds(sys_var_chain *chain, const char *name_arg,
1058
923
uint64_t SV::*offset_arg):
1059
sys_var_thd(name_arg), offset(offset_arg)
924
sys_var_session(name_arg), offset(offset_arg)
1060
925
{ chain_sys_var(chain); }
1061
bool check(THD *thd __attribute__((unused)),
1062
set_var *var __attribute__((unused))) {return 0;}
1063
bool update(THD *thd, set_var *var);
1064
void set_default(THD *thd, enum_var_type type);
926
bool check(Session *, set_var *) {return 0;}
927
bool update(Session *session, set_var *var);
928
void set_default(Session *session, enum_var_type type);
1065
929
SHOW_TYPE show_type() { return SHOW_DOUBLE; }
1066
930
bool check_update_type(Item_result type)
1068
932
return (type != INT_RESULT && type != REAL_RESULT && type != DECIMAL_RESULT);
1070
uchar *value_ptr(THD *thd, enum_var_type type, LEX_STRING *base);
1074
Handler for setting the system variable --read-only.
1077
class sys_var_opt_readonly :public sys_var_bool_ptr
1080
sys_var_opt_readonly(sys_var_chain *chain, const char *name_arg,
1082
sys_var_bool_ptr(chain, name_arg, value_arg) {};
1083
~sys_var_opt_readonly() {};
1084
bool update(THD *thd, set_var *var);
1088
class sys_var_thd_lc_time_names :public sys_var_thd
1091
sys_var_thd_lc_time_names(sys_var_chain *chain, const char *name_arg,
1092
Binlog_status_enum binlog_status_arg= NOT_IN_BINLOG)
1093
: sys_var_thd(name_arg, NULL, binlog_status_arg)
936
class sys_var_session_lc_time_names :public sys_var_session
939
sys_var_session_lc_time_names(sys_var_chain *chain, const char *name_arg)
940
: sys_var_session(name_arg, NULL)
1095
#if DRIZZLE_VERSION_ID < 50000
1096
no_support_one_shot= 0;
1098
942
chain_sys_var(chain);
1100
bool check(THD *thd, set_var *var);
944
bool check(Session *session, set_var *var);
1101
945
SHOW_TYPE show_type() { return SHOW_CHAR; }
1102
946
bool check_update_type(Item_result type)
1104
948
return ((type != STRING_RESULT) && (type != INT_RESULT));
1106
bool check_default(enum_var_type type __attribute__((unused)))
950
bool check_default(enum_var_type)
1108
bool update(THD *thd, set_var *var);
1109
uchar *value_ptr(THD *thd, enum_var_type type, LEX_STRING *base);
1110
virtual void set_default(THD *thd, enum_var_type type);
1114
extern void fix_binlog_format_after_update(THD *thd, enum_var_type type);
1116
class sys_var_thd_binlog_format :public sys_var_thd_enum
1119
sys_var_thd_binlog_format(sys_var_chain *chain, const char *name_arg,
1120
ulong SV::*offset_arg)
1121
:sys_var_thd_enum(chain, name_arg, offset_arg,
1122
&binlog_format_typelib,
1123
fix_binlog_format_after_update)
1125
bool is_readonly() const;
952
bool update(Session *session, set_var *var);
953
unsigned char *value_ptr(Session *session, enum_var_type type,
954
const LEX_STRING *base);
955
virtual void set_default(Session *session, enum_var_type type);
1128
959
/****************************************************************************
1129
960
Classes for parsing of the SET command