121
86
chain_arg->first= this;
122
87
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
virtual bool check(Session *session, set_var *var);
184
bool check_enum(Session *session, set_var *var, const TYPELIB *enum_names);
185
virtual bool update(Session *session, set_var *var)=0;
186
virtual void set_default(Session *, sql_var_t)
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__)))
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 */
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__)))
106
virtual bool check_type(enum_var_type type)
107
{ return type != OPT_GLOBAL; } /* Error if not GLOBAL */
200
108
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()
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;
220
* A base class for all variables that require its access to
221
* be guarded with a mutex.
131
A base class for all variables that require its access to
132
be guarded with a mutex.
223
135
class sys_var_global: public sys_var
226
138
pthread_mutex_t *guard;
228
sys_var_global(const char *name_arg,
229
sys_after_update_func after_update_arg,
140
sys_var_global(const char *name_arg, sys_after_update_func after_update_arg,
230
141
pthread_mutex_t *guard_arg)
232
sys_var(name_arg, after_update_arg),
237
class sys_var_uint32_t_ptr :public sys_var
241
sys_var_uint32_t_ptr(sys_var_chain *chain, const char *name_arg,
242
uint32_t *value_ptr_arg)
243
:sys_var(name_arg),value(value_ptr_arg)
244
{ chain_sys_var(chain); }
245
sys_var_uint32_t_ptr(sys_var_chain *chain, const char *name_arg,
246
uint32_t *value_ptr_arg,
247
sys_after_update_func func)
248
:sys_var(name_arg,func), value(value_ptr_arg)
249
{ chain_sys_var(chain); }
250
bool check(Session *session, set_var *var);
251
bool update(Session *session, set_var *var);
252
void set_default(Session *session, sql_var_t type);
253
SHOW_TYPE show_type() { return SHOW_INT; }
254
unsigned char *value_ptr(Session *, sql_var_t, const LEX_STRING *)
255
{ return (unsigned char*) value; }
259
class sys_var_uint64_t_ptr :public sys_var
263
sys_var_uint64_t_ptr(sys_var_chain *chain, const char *name_arg, uint64_t *value_ptr_arg)
264
:sys_var(name_arg),value(value_ptr_arg)
265
{ chain_sys_var(chain); }
266
sys_var_uint64_t_ptr(sys_var_chain *chain, const char *name_arg, uint64_t *value_ptr_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);
185
class sys_var_ulonglong_ptr :public sys_var
189
sys_var_ulonglong_ptr(sys_var_chain *chain, const char *name_arg, ulonglong *value_ptr_arg)
190
:sys_var(name_arg),value(value_ptr_arg)
191
{ chain_sys_var(chain); }
192
sys_var_ulonglong_ptr(sys_var_chain *chain, const char *name_arg, ulonglong *value_ptr_arg,
267
193
sys_after_update_func func)
268
194
:sys_var(name_arg,func), value(value_ptr_arg)
269
195
{ chain_sys_var(chain); }
270
bool update(Session *session, set_var *var);
271
void set_default(Session *session, sql_var_t type);
196
bool update(THD *thd, set_var *var);
197
void set_default(THD *thd, enum_var_type type);
272
198
SHOW_TYPE show_type() { return SHOW_LONGLONG; }
273
unsigned char *value_ptr(Session *, sql_var_t,
275
{ return (unsigned char*) value; }
199
uchar *value_ptr(THD *thd __attribute__((__unused__)),
200
enum_var_type type __attribute__((__unused__)),
201
LEX_STRING *base __attribute__((__unused__)))
202
{ return (uchar*) value; }
278
class sys_var_size_t_ptr :public sys_var
282
sys_var_size_t_ptr(sys_var_chain *chain, const char *name_arg, size_t *value_ptr_arg)
283
:sys_var(name_arg),value(value_ptr_arg)
284
{ chain_sys_var(chain); }
285
sys_var_size_t_ptr(sys_var_chain *chain, const char *name_arg, size_t *value_ptr_arg,
286
sys_after_update_func func)
287
:sys_var(name_arg,func), value(value_ptr_arg)
288
{ chain_sys_var(chain); }
289
bool update(Session *session, set_var *var);
290
void set_default(Session *session, sql_var_t type);
291
SHOW_TYPE show_type() { return SHOW_SIZE; }
292
unsigned char *value_ptr(Session *, sql_var_t, const LEX_STRING *)
293
{ return (unsigned char*) value; }
296
206
class sys_var_bool_ptr :public sys_var
300
sys_var_bool_ptr(sys_var_chain *chain, const char *name_arg, bool *value_arg)
210
sys_var_bool_ptr(sys_var_chain *chain, const char *name_arg, my_bool *value_arg)
301
211
:sys_var(name_arg),value(value_arg)
302
212
{ chain_sys_var(chain); }
303
bool check(Session *session, set_var *var)
213
bool check(THD *thd, set_var *var)
305
return check_enum(session, var, &bool_typelib);
215
return check_enum(thd, var, &bool_typelib);
307
bool update(Session *session, set_var *var);
308
void set_default(Session *session, sql_var_t type);
217
bool update(THD *thd, set_var *var);
218
void set_default(THD *thd, enum_var_type type);
309
219
SHOW_TYPE show_type() { return SHOW_MY_BOOL; }
310
unsigned char *value_ptr(Session *, sql_var_t, const LEX_STRING *)
311
{ return (unsigned char*) value; }
312
bool check_update_type(Item_result)
220
uchar *value_ptr(THD *thd __attribute__((__unused__)),
221
enum_var_type type __attribute__((__unused__)),
222
LEX_STRING *base __attribute__((__unused__)))
223
{ return (uchar*) value; }
224
bool check_update_type(Item_result type __attribute__((__unused__)))
316
229
class sys_var_bool_ptr_readonly :public sys_var_bool_ptr
319
232
sys_var_bool_ptr_readonly(sys_var_chain *chain, const char *name_arg,
321
234
:sys_var_bool_ptr(chain, name_arg, value_arg)
323
236
bool is_readonly() const { return 1; }
403
322
sys_var_const_str_ptr(sys_var_chain *chain, const char *name_arg, char **value_arg)
404
323
:sys_var(name_arg),value(value_arg)
405
324
{ chain_sys_var(chain); }
406
bool check(Session *, set_var *)
325
bool check(THD *thd __attribute__((__unused__)),
326
set_var *var __attribute__((__unused__)))
410
bool update(Session *, set_var *)
330
bool update(THD *thd __attribute__((__unused__)),
331
set_var *var __attribute__((__unused__)))
414
335
SHOW_TYPE show_type() { return SHOW_CHAR; }
415
unsigned char *value_ptr(Session *, sql_var_t, const LEX_STRING *)
336
uchar *value_ptr(THD *thd __attribute__((__unused__)),
337
enum_var_type type __attribute__((__unused__)),
338
LEX_STRING *base __attribute__((__unused__)))
417
return (unsigned char*) *value;
340
return (uchar*) *value;
419
bool check_update_type(Item_result)
342
bool check_update_type(Item_result type __attribute__((__unused__)))
423
bool check_default(sql_var_t)
346
bool check_default(enum_var_type type __attribute__((__unused__)))
425
348
bool is_readonly(void) const { return 1; }
429
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)
352
class sys_var_enum :public sys_var
357
sys_var_enum(sys_var_chain *chain, const char *name_arg, uint *value_arg,
358
TYPELIB *typelib, sys_after_update_func func)
359
:sys_var(name_arg,func), value(value_arg), enum_names(typelib)
360
{ chain_sys_var(chain); }
361
bool check(THD *thd, set_var *var)
363
return check_enum(thd, var, enum_names);
365
bool update(THD *thd, set_var *var);
366
SHOW_TYPE show_type() { return SHOW_CHAR; }
367
uchar *value_ptr(THD *thd, enum_var_type type, LEX_STRING *base);
368
bool check_update_type(Item_result type __attribute__((__unused__)))
373
class sys_var_enum_const :public sys_var
378
sys_var_enum_const(sys_var_chain *chain, const char *name_arg, ulong SV::*offset_arg,
379
TYPELIB *typelib, sys_after_update_func func)
380
:sys_var(name_arg,func), offset(offset_arg), enum_names(typelib)
381
{ chain_sys_var(chain); }
382
bool check(THD *thd __attribute__((__unused__)),
383
set_var *var __attribute__((__unused__)))
385
bool update(THD *thd __attribute__((__unused__)),
386
set_var *var __attribute__((__unused__)))
388
SHOW_TYPE show_type() { return SHOW_CHAR; }
389
bool check_update_type(Item_result type __attribute__((__unused__)))
391
bool is_readonly() const { return 1; }
392
uchar *value_ptr(THD *thd, enum_var_type type, LEX_STRING *base);
396
class sys_var_thd :public sys_var
399
sys_var_thd(const char *name_arg,
400
sys_after_update_func func= NULL,
401
Binlog_status_enum binlog_status= NOT_IN_BINLOG)
402
:sys_var(name_arg, func, binlog_status)
436
bool check_type(sql_var_t)
404
bool check_type(enum_var_type type __attribute__((__unused__)))
438
bool check_default(sql_var_t type)
406
bool check_default(enum_var_type type)
440
408
return type == OPT_GLOBAL && !option_limits;
444
class sys_var_session_uint32_t :public sys_var_session
413
class sys_var_thd_ulong :public sys_var_thd
446
415
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),
418
sys_var_thd_ulong(sys_var_chain *chain, const char *name_arg,
419
ulong SV::*offset_arg,
420
sys_check_func c_func= NULL,
421
sys_after_update_func au_func= NULL,
422
Binlog_status_enum binlog_status_arg= NOT_IN_BINLOG)
423
:sys_var_thd(name_arg, au_func, binlog_status_arg), check_func(c_func),
454
424
offset(offset_arg)
455
425
{ chain_sys_var(chain); }
456
bool check(Session *session, set_var *var);
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);
426
bool check(THD *thd, set_var *var);
427
bool update(THD *thd, set_var *var);
428
void set_default(THD *thd, enum_var_type type);
429
SHOW_TYPE show_type() { return SHOW_LONG; }
430
uchar *value_ptr(THD *thd, enum_var_type type, LEX_STRING *base);
465
class sys_var_session_ha_rows :public sys_var_session
434
class sys_var_thd_ha_rows :public sys_var_thd
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)
471
:sys_var_session(name_arg), offset(offset_arg)
438
sys_var_thd_ha_rows(sys_var_chain *chain, const char *name_arg,
439
ha_rows SV::*offset_arg)
440
:sys_var_thd(name_arg), offset(offset_arg)
472
441
{ 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,
442
sys_var_thd_ha_rows(sys_var_chain *chain, const char *name_arg,
443
ha_rows SV::*offset_arg,
475
444
sys_after_update_func func)
476
:sys_var_session(name_arg,func), offset(offset_arg)
445
:sys_var_thd(name_arg,func), offset(offset_arg)
477
446
{ chain_sys_var(chain); }
478
bool update(Session *session, set_var *var);
479
void set_default(Session *session, sql_var_t type);
447
bool update(THD *thd, set_var *var);
448
void set_default(THD *thd, enum_var_type type);
480
449
SHOW_TYPE show_type() { return SHOW_HA_ROWS; }
481
unsigned char *value_ptr(Session *session, sql_var_t type,
482
const LEX_STRING *base);
450
uchar *value_ptr(THD *thd, enum_var_type type, LEX_STRING *base);
486
class sys_var_session_uint64_t :public sys_var_session
454
class sys_var_thd_ulonglong :public sys_var_thd
488
sys_check_func check_func;
490
uint64_t system_variables::*offset;
457
ulonglong SV::*offset;
491
458
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,
495
sys_after_update_func au_func= NULL,
496
sys_check_func c_func= NULL)
497
:sys_var_session(name_arg, au_func),
459
sys_var_thd_ulonglong(sys_var_chain *chain, const char *name_arg,
460
ulonglong SV::*offset_arg)
461
:sys_var_thd(name_arg), offset(offset_arg)
500
462
{ 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)
507
:sys_var_session(name_arg, func),
463
sys_var_thd_ulonglong(sys_var_chain *chain, const char *name_arg,
464
ulonglong SV::*offset_arg,
465
sys_after_update_func func, bool only_global_arg)
466
:sys_var_thd(name_arg, func), offset(offset_arg),
510
467
only_global(only_global_arg)
511
468
{ chain_sys_var(chain); }
512
bool update(Session *session, set_var *var);
513
void set_default(Session *session, sql_var_t type);
469
bool update(THD *thd, set_var *var);
470
void set_default(THD *thd, enum_var_type type);
514
471
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)
565
return (only_global && type != OPT_GLOBAL);
570
class sys_var_session_bool :public sys_var_session
573
bool system_variables::*offset;
574
sys_var_session_bool(sys_var_chain *chain, const char *name_arg, bool system_variables::*offset_arg)
575
:sys_var_session(name_arg), offset(offset_arg)
576
{ chain_sys_var(chain); }
577
sys_var_session_bool(sys_var_chain *chain, const char *name_arg, bool system_variables::*offset_arg,
472
uchar *value_ptr(THD *thd, enum_var_type type, LEX_STRING *base);
473
bool check(THD *thd, set_var *var);
474
bool check_default(enum_var_type type)
476
return type == OPT_GLOBAL && !option_limits;
478
bool check_type(enum_var_type type)
480
return (only_global && type != OPT_GLOBAL);
485
class sys_var_thd_bool :public sys_var_thd
489
sys_var_thd_bool(sys_var_chain *chain, const char *name_arg, my_bool SV::*offset_arg)
490
:sys_var_thd(name_arg), offset(offset_arg)
491
{ chain_sys_var(chain); }
492
sys_var_thd_bool(sys_var_chain *chain, const char *name_arg, my_bool SV::*offset_arg,
578
493
sys_after_update_func func)
579
:sys_var_session(name_arg,func), offset(offset_arg)
494
:sys_var_thd(name_arg,func), offset(offset_arg)
580
495
{ chain_sys_var(chain); }
581
bool update(Session *session, set_var *var);
582
void set_default(Session *session, sql_var_t type);
496
bool update(THD *thd, set_var *var);
497
void set_default(THD *thd, enum_var_type type);
583
498
SHOW_TYPE show_type() { return SHOW_MY_BOOL; }
584
unsigned char *value_ptr(Session *session, sql_var_t type,
585
const LEX_STRING *base);
586
bool check(Session *session, set_var *var)
499
uchar *value_ptr(THD *thd, enum_var_type type, LEX_STRING *base);
500
bool check(THD *thd, set_var *var)
588
return check_enum(session, var, &bool_typelib);
502
return check_enum(thd, var, &bool_typelib);
590
bool check_update_type(Item_result)
504
bool check_update_type(Item_result type __attribute__((__unused__)))
595
class sys_var_session_enum :public sys_var_session
509
class sys_var_thd_enum :public sys_var_thd
598
uint32_t system_variables::*offset;
599
513
TYPELIB *enum_names;
600
514
sys_check_func check_func;
602
sys_var_session_enum(sys_var_chain *chain, const char *name_arg,
603
uint32_t system_variables::*offset_arg, TYPELIB *typelib,
516
sys_var_thd_enum(sys_var_chain *chain, const char *name_arg,
517
ulong SV::*offset_arg, TYPELIB *typelib,
604
518
sys_after_update_func func= NULL,
605
sys_check_func check_f= NULL)
606
:sys_var_session(name_arg, func), offset(offset_arg),
607
enum_names(typelib), check_func(check_f)
519
sys_check_func check= NULL)
520
:sys_var_thd(name_arg, func), offset(offset_arg),
521
enum_names(typelib), check_func(check)
608
522
{ chain_sys_var(chain); }
609
bool check(Session *session, set_var *var)
523
bool check(THD *thd, set_var *var)
613
ret= (*check_func)(session, var);
614
return ret ? ret : check_enum(session, var, enum_names);
527
ret= (*check_func)(thd, var);
528
return ret ? ret : check_enum(thd, var, enum_names);
616
bool update(Session *session, set_var *var);
617
void set_default(Session *session, sql_var_t type);
530
bool update(THD *thd, set_var *var);
531
void set_default(THD *thd, enum_var_type type);
618
532
SHOW_TYPE show_type() { return SHOW_CHAR; }
619
unsigned char *value_ptr(Session *session, sql_var_t type,
620
const LEX_STRING *base);
621
bool check_update_type(Item_result)
533
uchar *value_ptr(THD *thd, enum_var_type type, LEX_STRING *base);
534
bool check_update_type(Item_result type __attribute__((__unused__)))
626
class sys_var_session_storage_engine :public sys_var_session
540
class sys_var_thd_optimizer_switch :public sys_var_thd_enum
543
sys_var_thd_optimizer_switch(sys_var_chain *chain, const char *name_arg,
544
ulong SV::*offset_arg)
545
:sys_var_thd_enum(chain, name_arg, offset_arg, &optimizer_switch_typelib)
547
bool check(THD *thd, set_var *var)
549
return check_set(thd, var, enum_names);
551
void set_default(THD *thd, enum_var_type type);
552
uchar *value_ptr(THD *thd, enum_var_type type, LEX_STRING *base);
553
static bool symbolic_mode_representation(THD *thd, ulonglong sql_mode,
558
class sys_var_thd_storage_engine :public sys_var_thd
629
plugin::StorageEngine *system_variables::*offset;
561
plugin_ref SV::*offset;
631
sys_var_session_storage_engine(sys_var_chain *chain, const char *name_arg,
632
plugin::StorageEngine *system_variables::*offset_arg)
633
:sys_var_session(name_arg), offset(offset_arg)
563
sys_var_thd_storage_engine(sys_var_chain *chain, const char *name_arg,
564
plugin_ref SV::*offset_arg)
565
:sys_var_thd(name_arg), offset(offset_arg)
634
566
{ chain_sys_var(chain); }
635
bool check(Session *session, set_var *var);
567
bool check(THD *thd, set_var *var);
636
568
SHOW_TYPE show_type() { return SHOW_CHAR; }
637
569
bool check_update_type(Item_result type)
639
571
return type != STRING_RESULT; /* Only accept strings */
641
void set_default(Session *session, sql_var_t type);
642
bool update(Session *session, set_var *var);
643
unsigned char *value_ptr(Session *session, sql_var_t type,
644
const LEX_STRING *base);
573
void set_default(THD *thd, enum_var_type type);
574
bool update(THD *thd, set_var *var);
575
uchar *value_ptr(THD *thd, enum_var_type type, LEX_STRING *base);
647
class sys_var_session_bit :public sys_var_session
578
class sys_var_thd_bit :public sys_var_thd
649
580
sys_check_func check_func;
650
581
sys_update_func update_func;
654
sys_var_session_bit(sys_var_chain *chain, const char *name_arg,
585
sys_var_thd_bit(sys_var_chain *chain, const char *name_arg,
655
586
sys_check_func c_func, sys_update_func u_func,
656
uint64_t bit, bool reverse_arg=0)
657
:sys_var_session(name_arg, NULL), check_func(c_func),
587
ulonglong bit, bool reverse_arg=0,
588
Binlog_status_enum binlog_status_arg= NOT_IN_BINLOG)
589
:sys_var_thd(name_arg, NULL, binlog_status_arg), check_func(c_func),
658
590
update_func(u_func), bit_flag(bit), reverse(reverse_arg)
659
591
{ chain_sys_var(chain); }
660
bool check(Session *session, set_var *var);
661
bool update(Session *session, set_var *var);
662
bool check_update_type(Item_result)
592
bool check(THD *thd, set_var *var);
593
bool update(THD *thd, set_var *var);
594
bool check_update_type(Item_result type __attribute__((__unused__)))
664
bool check_type(sql_var_t type) { return type == OPT_GLOBAL; }
596
bool check_type(enum_var_type type) { return type == OPT_GLOBAL; }
665
597
SHOW_TYPE show_type() { return SHOW_MY_BOOL; }
666
unsigned char *value_ptr(Session *session, sql_var_t type,
667
const LEX_STRING *base);
598
uchar *value_ptr(THD *thd, enum_var_type type, LEX_STRING *base);
601
class sys_var_thd_dbug :public sys_var_thd
604
sys_var_thd_dbug(sys_var_chain *chain, const char *name_arg)
605
:sys_var_thd(name_arg)
606
{ chain_sys_var(chain); }
607
bool check_update_type(Item_result type) { return type != STRING_RESULT; }
608
SHOW_TYPE show_type() { return SHOW_CHAR; }
609
bool update(THD *thd, set_var *var);
610
void set_default(THD *thd __attribute__((__unused__)),
611
enum_var_type type __attribute__((__unused__)))
613
uchar *value_ptr(THD *thd, enum_var_type type, LEX_STRING *b);
670
618
/* some variables that require special handling */
672
620
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)
623
sys_var_timestamp(sys_var_chain *chain, const char *name_arg,
624
Binlog_status_enum binlog_status_arg= NOT_IN_BINLOG)
625
:sys_var(name_arg, NULL, binlog_status_arg)
677
626
{ chain_sys_var(chain); }
678
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)
627
bool update(THD *thd, set_var *var);
628
void set_default(THD *thd, enum_var_type type);
629
bool check_type(enum_var_type type) { return type == OPT_GLOBAL; }
630
bool check_default(enum_var_type type __attribute__((__unused__)))
683
632
SHOW_TYPE show_type(void) { return SHOW_LONG; }
684
unsigned char *value_ptr(Session *session, sql_var_t type,
685
const LEX_STRING *base);
633
uchar *value_ptr(THD *thd, enum_var_type type, LEX_STRING *base);
689
637
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);
703
class sys_var_collation :public sys_var_session
706
sys_var_collation(const char *name_arg)
707
:sys_var_session(name_arg, NULL)
640
sys_var_last_insert_id(sys_var_chain *chain, const char *name_arg,
641
Binlog_status_enum binlog_status_arg= NOT_IN_BINLOG)
642
:sys_var(name_arg, NULL, binlog_status_arg)
643
{ chain_sys_var(chain); }
644
bool update(THD *thd, set_var *var);
645
bool check_type(enum_var_type type) { return type == OPT_GLOBAL; }
646
SHOW_TYPE show_type() { return SHOW_LONGLONG; }
647
uchar *value_ptr(THD *thd, enum_var_type type, LEX_STRING *base);
651
class sys_var_insert_id :public sys_var
654
sys_var_insert_id(sys_var_chain *chain, const char *name_arg)
656
{ chain_sys_var(chain); }
657
bool update(THD *thd, set_var *var);
658
bool check_type(enum_var_type type) { return type == OPT_GLOBAL; }
659
SHOW_TYPE show_type() { return SHOW_LONGLONG; }
660
uchar *value_ptr(THD *thd, enum_var_type type, LEX_STRING *base);
664
class sys_var_rand_seed1 :public sys_var
667
sys_var_rand_seed1(sys_var_chain *chain, const char *name_arg,
668
Binlog_status_enum binlog_status_arg= NOT_IN_BINLOG)
669
:sys_var(name_arg, NULL, binlog_status_arg)
670
{ chain_sys_var(chain); }
671
bool update(THD *thd, set_var *var);
672
bool check_type(enum_var_type type) { return type == OPT_GLOBAL; }
675
class sys_var_rand_seed2 :public sys_var
678
sys_var_rand_seed2(sys_var_chain *chain, const char *name_arg,
679
Binlog_status_enum binlog_status_arg= NOT_IN_BINLOG)
680
:sys_var(name_arg, NULL, binlog_status_arg)
681
{ chain_sys_var(chain); }
682
bool update(THD *thd, set_var *var);
683
bool check_type(enum_var_type type) { return type == OPT_GLOBAL; }
687
class sys_var_collation :public sys_var_thd
690
sys_var_collation(const char *name_arg,
691
Binlog_status_enum binlog_status_arg= NOT_IN_BINLOG)
692
:sys_var_thd(name_arg, NULL, binlog_status_arg)
694
no_support_one_shot= 0;
696
bool check(THD *thd, set_var *var);
697
SHOW_TYPE show_type() { return SHOW_CHAR; }
698
bool check_update_type(Item_result type)
700
return ((type != STRING_RESULT) && (type != INT_RESULT));
702
bool check_default(enum_var_type type __attribute__((__unused__))) { return 0; }
703
virtual void set_default(THD *thd, enum_var_type type)= 0;
706
class sys_var_character_set :public sys_var_thd
710
sys_var_character_set(const char *name_arg, bool is_nullable= 0,
711
Binlog_status_enum binlog_status_arg= NOT_IN_BINLOG)
712
:sys_var_thd(name_arg, NULL, binlog_status_arg), nullable(is_nullable)
715
In fact only almost all variables derived from sys_var_character_set
716
support ONE_SHOT; character_set_results doesn't. But that's good enough.
718
no_support_one_shot= 0;
720
bool check(THD *thd, set_var *var);
721
SHOW_TYPE show_type() { return SHOW_CHAR; }
722
bool check_update_type(Item_result type)
724
return ((type != STRING_RESULT) && (type != INT_RESULT));
726
bool check_default(enum_var_type type __attribute__((__unused__)))
728
bool update(THD *thd, set_var *var);
729
uchar *value_ptr(THD *thd, enum_var_type type, LEX_STRING *base);
730
virtual void set_default(THD *thd, enum_var_type type)= 0;
731
virtual CHARSET_INFO **ci_ptr(THD *thd, enum_var_type type)= 0;
734
class sys_var_character_set_sv :public sys_var_character_set
736
CHARSET_INFO *SV::*offset;
737
CHARSET_INFO **global_default;
739
sys_var_character_set_sv(sys_var_chain *chain, const char *name_arg,
740
CHARSET_INFO *SV::*offset_arg,
741
CHARSET_INFO **global_default_arg,
743
Binlog_status_enum binlog_status_arg= NOT_IN_BINLOG)
744
: sys_var_character_set(name_arg, is_nullable, binlog_status_arg),
745
offset(offset_arg), global_default(global_default_arg)
746
{ chain_sys_var(chain); }
747
void set_default(THD *thd, enum_var_type type);
748
CHARSET_INFO **ci_ptr(THD *thd, enum_var_type type);
752
class sys_var_character_set_client: public sys_var_character_set_sv
755
sys_var_character_set_client(sys_var_chain *chain, const char *name_arg,
756
CHARSET_INFO *SV::*offset_arg,
757
CHARSET_INFO **global_default_arg,
758
Binlog_status_enum binlog_status_arg)
759
: sys_var_character_set_sv(chain, name_arg, offset_arg, global_default_arg,
760
0, binlog_status_arg)
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;
762
bool check(THD *thd, set_var *var);
766
class sys_var_character_set_database :public sys_var_character_set
769
sys_var_character_set_database(sys_var_chain *chain, const char *name_arg,
770
Binlog_status_enum binlog_status_arg=
772
: sys_var_character_set(name_arg, 0, binlog_status_arg)
773
{ chain_sys_var(chain); }
774
void set_default(THD *thd, enum_var_type type);
775
CHARSET_INFO **ci_ptr(THD *thd, enum_var_type type);
719
778
class sys_var_collation_sv :public sys_var_collation
721
const CHARSET_INFO *system_variables::*offset;
722
const CHARSET_INFO **global_default;
780
CHARSET_INFO *SV::*offset;
781
CHARSET_INFO **global_default;
724
783
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),
784
CHARSET_INFO *SV::*offset_arg,
785
CHARSET_INFO **global_default_arg,
786
Binlog_status_enum binlog_status_arg= NOT_IN_BINLOG)
787
:sys_var_collation(name_arg, binlog_status_arg),
728
788
offset(offset_arg), global_default(global_default_arg)
730
790
chain_sys_var(chain);
732
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);
792
bool update(THD *thd, set_var *var);
793
void set_default(THD *thd, enum_var_type type);
794
uchar *value_ptr(THD *thd, enum_var_type type, LEX_STRING *base);
798
class sys_var_key_cache_param :public sys_var
803
sys_var_key_cache_param(sys_var_chain *chain, const char *name_arg,
805
:sys_var(name_arg), offset(offset_arg)
806
{ chain_sys_var(chain); }
807
uchar *value_ptr(THD *thd, enum_var_type type, LEX_STRING *base);
808
bool check_default(enum_var_type type __attribute__((__unused__)))
810
bool is_struct() { return 1; }
814
class sys_var_key_buffer_size :public sys_var_key_cache_param
817
sys_var_key_buffer_size(sys_var_chain *chain, const char *name_arg)
818
:sys_var_key_cache_param(chain, name_arg,
819
offsetof(KEY_CACHE, param_buff_size))
821
bool update(THD *thd, set_var *var);
822
SHOW_TYPE show_type() { return SHOW_LONGLONG; }
826
class sys_var_key_cache_long :public sys_var_key_cache_param
829
sys_var_key_cache_long(sys_var_chain *chain, const char *name_arg, size_t offset_arg)
830
:sys_var_key_cache_param(chain, name_arg, offset_arg)
832
bool update(THD *thd, set_var *var);
833
SHOW_TYPE show_type() { return SHOW_LONG; }
837
class sys_var_thd_date_time_format :public sys_var_thd
839
DATE_TIME_FORMAT *SV::*offset;
840
timestamp_type date_time_type;
842
sys_var_thd_date_time_format(sys_var_chain *chain, const char *name_arg,
843
DATE_TIME_FORMAT *SV::*offset_arg,
844
timestamp_type date_time_type_arg)
845
:sys_var_thd(name_arg), offset(offset_arg),
846
date_time_type(date_time_type_arg)
847
{ chain_sys_var(chain); }
848
SHOW_TYPE show_type() { return SHOW_CHAR; }
849
bool check_update_type(Item_result type)
851
return type != STRING_RESULT; /* Only accept strings */
853
bool check_default(enum_var_type type __attribute__((__unused__)))
855
bool check(THD *thd, set_var *var);
856
bool update(THD *thd, set_var *var);
857
void update2(THD *thd, enum_var_type type, DATE_TIME_FORMAT *new_value);
858
uchar *value_ptr(THD *thd, enum_var_type type, LEX_STRING *base);
859
void set_default(THD *thd, enum_var_type type);
863
class sys_var_log_state :public sys_var_bool_ptr
867
sys_var_log_state(sys_var_chain *chain, const char *name_arg, my_bool *value_arg,
869
:sys_var_bool_ptr(chain, name_arg, value_arg), log_type(log_type_arg) {}
870
bool update(THD *thd, set_var *var);
871
void set_default(THD *thd, enum_var_type type);
875
class sys_var_set :public sys_var
881
sys_var_set(sys_var_chain *chain, const char *name_arg, ulong *value_arg,
882
TYPELIB *typelib, sys_after_update_func func)
883
:sys_var(name_arg, func), value(value_arg), enum_names(typelib)
884
{ chain_sys_var(chain); }
885
virtual bool check(THD *thd, set_var *var)
887
return check_set(thd, var, enum_names);
889
virtual void set_default(THD *thd __attribute__((__unused__)),
890
enum_var_type type __attribute__((__unused__)))
894
bool update(THD *thd, set_var *var);
895
uchar *value_ptr(THD *thd, enum_var_type type, LEX_STRING *base);
896
bool check_update_type(Item_result type __attribute__((__unused__)))
898
SHOW_TYPE show_type() { return SHOW_CHAR; }
901
class sys_var_set_slave_mode :public sys_var_set
904
sys_var_set_slave_mode(sys_var_chain *chain, const char *name_arg,
906
TYPELIB *typelib, sys_after_update_func func) :
907
sys_var_set(chain, name_arg, value_arg, typelib, func) {}
908
void set_default(THD *thd, enum_var_type type);
909
bool check(THD *thd, set_var *var);
910
bool update(THD *thd, set_var *var);
913
class sys_var_log_output :public sys_var
918
sys_var_log_output(sys_var_chain *chain, const char *name_arg, ulong *value_arg,
919
TYPELIB *typelib, sys_after_update_func func)
920
:sys_var(name_arg,func), value(value_arg), enum_names(typelib)
922
chain_sys_var(chain);
923
set_allow_empty_value(FALSE);
925
virtual bool check(THD *thd, set_var *var)
927
return check_set(thd, var, enum_names);
929
bool update(THD *thd, set_var *var);
930
uchar *value_ptr(THD *thd, enum_var_type type, LEX_STRING *base);
931
bool check_update_type(Item_result type __attribute__((__unused__)))
933
void set_default(THD *thd, enum_var_type type);
934
SHOW_TYPE show_type() { return SHOW_CHAR; }
738
938
/* Variable that you can only read from */
740
940
class sys_var_readonly: public sys_var
943
enum_var_type var_type;
744
944
SHOW_TYPE show_type_value;
745
945
sys_value_ptr_func value_ptr_func;
746
sys_var_readonly(sys_var_chain *chain, const char *name_arg, sql_var_t type,
946
sys_var_readonly(sys_var_chain *chain, const char *name_arg, enum_var_type type,
747
947
SHOW_TYPE show_type_arg,
748
948
sys_value_ptr_func value_ptr_func_arg)
749
:sys_var(name_arg), var_type(type),
949
:sys_var(name_arg), var_type(type),
750
950
show_type_value(show_type_arg), value_ptr_func(value_ptr_func_arg)
751
951
{ 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,
952
bool update(THD *thd __attribute__((__unused__)),
953
set_var *var __attribute__((__unused__)))
955
bool check_default(enum_var_type type __attribute__((__unused__)))
957
bool check_type(enum_var_type type) { return type != var_type; }
958
bool check_update_type(Item_result type __attribute__((__unused__)))
960
uchar *value_ptr(THD *thd, enum_var_type type __attribute__((__unused__)),
961
LEX_STRING *base __attribute__((__unused__)))
762
return (*value_ptr_func)(session);
963
return (*value_ptr_func)(thd);
764
965
SHOW_TYPE show_type(void) { return show_type_value; }
765
966
bool is_readonly(void) const { return 1; }
769
class sys_var_session_time_zone :public sys_var_session
772
sys_var_session_time_zone(sys_var_chain *chain, const char *name_arg)
773
:sys_var_session(name_arg, NULL)
970
class sys_var_have_option: public sys_var
973
virtual SHOW_COMP_OPTION get_option() = 0;
975
sys_var_have_option(sys_var_chain *chain, const char *variable_name):
976
sys_var(variable_name)
977
{ chain_sys_var(chain); }
978
uchar *value_ptr(THD *thd __attribute__((__unused__)),
979
enum_var_type type __attribute__((__unused__)),
980
LEX_STRING *base __attribute__((__unused__)))
982
return (uchar*) show_comp_option_name[get_option()];
984
bool update(THD *thd __attribute__((__unused__)),
985
set_var *var __attribute__((__unused__))) { return 1; }
986
bool check_default(enum_var_type type __attribute__((__unused__)))
988
bool check_type(enum_var_type type) { return type != OPT_GLOBAL; }
989
bool check_update_type(Item_result type __attribute__((__unused__)))
991
SHOW_TYPE show_type() { return SHOW_CHAR; }
992
bool is_readonly() const { return 1; }
996
class sys_var_have_variable: public sys_var_have_option
998
SHOW_COMP_OPTION *have_variable;
1001
sys_var_have_variable(sys_var_chain *chain, const char *variable_name,
1002
SHOW_COMP_OPTION *have_variable_arg):
1003
sys_var_have_option(chain, variable_name),
1004
have_variable(have_variable_arg)
1006
SHOW_COMP_OPTION get_option() { return *have_variable; }
1010
class sys_var_have_plugin: public sys_var_have_option
1012
const char *plugin_name_str;
1013
const uint plugin_name_len;
1014
const int plugin_type;
1017
sys_var_have_plugin(sys_var_chain *chain, const char *variable_name,
1018
const char *plugin_name_str_arg, uint plugin_name_len_arg,
1019
int plugin_type_arg):
1020
sys_var_have_option(chain, variable_name),
1021
plugin_name_str(plugin_name_str_arg), plugin_name_len(plugin_name_len_arg),
1022
plugin_type(plugin_type_arg)
1024
/* the following method is declared in sql_plugin.cc */
1025
SHOW_COMP_OPTION get_option();
1029
class sys_var_thd_time_zone :public sys_var_thd
1032
sys_var_thd_time_zone(sys_var_chain *chain, const char *name_arg,
1033
Binlog_status_enum binlog_status_arg= NOT_IN_BINLOG)
1034
:sys_var_thd(name_arg, NULL, binlog_status_arg)
1036
no_support_one_shot= 0;
775
1037
chain_sys_var(chain);
777
bool check(Session *session, set_var *var);
1039
bool check(THD *thd, set_var *var);
778
1040
SHOW_TYPE show_type() { return SHOW_CHAR; }
779
1041
bool check_update_type(Item_result type)
781
1043
return type != STRING_RESULT; /* Only accept strings */
783
bool check_default(sql_var_t)
1045
bool check_default(enum_var_type type __attribute__((__unused__)))
785
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);
792
class sys_var_microseconds :public sys_var_session
794
uint64_t system_variables::*offset;
1047
bool update(THD *thd, set_var *var);
1048
uchar *value_ptr(THD *thd, enum_var_type type, LEX_STRING *base);
1049
virtual void set_default(THD *thd, enum_var_type type);
1053
class sys_var_max_user_conn : public sys_var_thd
1056
sys_var_max_user_conn(sys_var_chain *chain, const char *name_arg):
1057
sys_var_thd(name_arg)
1058
{ chain_sys_var(chain); }
1059
bool check(THD *thd, set_var *var);
1060
bool update(THD *thd, set_var *var);
1061
bool check_default(enum_var_type type)
1063
return type != OPT_GLOBAL || !option_limits;
1065
void set_default(THD *thd, enum_var_type type);
1066
SHOW_TYPE show_type() { return SHOW_INT; }
1067
uchar *value_ptr(THD *thd, enum_var_type type, LEX_STRING *base);
1071
class sys_var_microseconds :public sys_var_thd
1073
ulonglong SV::*offset;
796
1075
sys_var_microseconds(sys_var_chain *chain, const char *name_arg,
797
uint64_t system_variables::*offset_arg):
798
sys_var_session(name_arg), offset(offset_arg)
1076
ulonglong SV::*offset_arg):
1077
sys_var_thd(name_arg), offset(offset_arg)
799
1078
{ chain_sys_var(chain); }
800
bool check(Session *, set_var *) {return 0;}
801
bool update(Session *session, set_var *var);
802
void set_default(Session *session, sql_var_t type);
1079
bool check(THD *thd __attribute__((__unused__)),
1080
set_var *var __attribute__((__unused__))) {return 0;}
1081
bool update(THD *thd, set_var *var);
1082
void set_default(THD *thd, enum_var_type type);
803
1083
SHOW_TYPE show_type() { return SHOW_DOUBLE; }
804
1084
bool check_update_type(Item_result type)
806
1086
return (type != INT_RESULT && type != REAL_RESULT && type != DECIMAL_RESULT);
810
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)
1088
uchar *value_ptr(THD *thd, enum_var_type type, LEX_STRING *base);
1092
class sys_var_trust_routine_creators :public sys_var_bool_ptr
1094
/* We need a derived class only to have a warn_deprecated() */
1096
sys_var_trust_routine_creators(sys_var_chain *chain,
1097
const char *name_arg, my_bool *value_arg) :
1098
sys_var_bool_ptr(chain, name_arg, value_arg) {};
1099
void warn_deprecated(THD *thd);
1100
void set_default(THD *thd, enum_var_type type);
1101
bool update(THD *thd, set_var *var);
1105
Handler for setting the system variable --read-only.
1108
class sys_var_opt_readonly :public sys_var_bool_ptr
1111
sys_var_opt_readonly(sys_var_chain *chain, const char *name_arg,
1112
my_bool *value_arg) :
1113
sys_var_bool_ptr(chain, name_arg, value_arg) {};
1114
~sys_var_opt_readonly() {};
1115
bool update(THD *thd, set_var *var);
1119
class sys_var_thd_lc_time_names :public sys_var_thd
1122
sys_var_thd_lc_time_names(sys_var_chain *chain, const char *name_arg,
1123
Binlog_status_enum binlog_status_arg= NOT_IN_BINLOG)
1124
: sys_var_thd(name_arg, NULL, binlog_status_arg)
1126
#if MYSQL_VERSION_ID < 50000
1127
no_support_one_shot= 0;
816
1129
chain_sys_var(chain);
818
bool check(Session *session, set_var *var);
1131
bool check(THD *thd, set_var *var);
819
1132
SHOW_TYPE show_type() { return SHOW_CHAR; }
820
1133
bool check_update_type(Item_result type)
822
1135
return ((type != STRING_RESULT) && (type != INT_RESULT));
824
bool check_default(sql_var_t)
1137
bool check_default(enum_var_type type __attribute__((__unused__)))
826
bool update(Session *session, set_var *var);
827
unsigned char *value_ptr(Session *session, sql_var_t type,
828
const LEX_STRING *base);
829
virtual void set_default(Session *session, sql_var_t type);
1139
bool update(THD *thd, set_var *var);
1140
uchar *value_ptr(THD *thd, enum_var_type type, LEX_STRING *base);
1141
virtual void set_default(THD *thd, enum_var_type type);
1145
extern void fix_binlog_format_after_update(THD *thd, enum_var_type type);
1147
class sys_var_thd_binlog_format :public sys_var_thd_enum
1150
sys_var_thd_binlog_format(sys_var_chain *chain, const char *name_arg,
1151
ulong SV::*offset_arg)
1152
:sys_var_thd_enum(chain, name_arg, offset_arg,
1153
&binlog_format_typelib,
1154
fix_binlog_format_after_update)
1156
bool is_readonly() const;
833
1159
/****************************************************************************
834
1160
Classes for parsing of the SET command
835
1161
****************************************************************************/
837
class set_var_base :public memory::SqlAlloc
1163
class set_var_base :public Sql_alloc
840
1166
set_var_base() {}
841
1167
virtual ~set_var_base() {}
842
virtual int check(Session *session)=0; /* To check privileges etc. */
843
virtual int update(Session *session)=0; /* To set the value */
1168
virtual int check(THD *thd)=0; /* To check privileges etc. */
1169
virtual int update(THD *thd)=0; /* To set the value */
844
1170
/* light check for PS */
1171
virtual bool no_support_one_shot() { return 1; }
847
/* MySQL internal variables */
1175
/* MySQL internal variables, like query_cache_size */
848
1177
class set_var :public set_var_base
856
const CHARSET_INFO *charset;
857
uint32_t uint32_t_value;
858
uint64_t uint64_t_value;
860
plugin::StorageEngine *storage_engine;
1185
CHARSET_INFO *charset;
1187
ulonglong ulonglong_value;
1189
DATE_TIME_FORMAT *date_time_format;
861
1190
Time_zone *time_zone;
862
1191
MY_LOCALE *locale_value;
864
1193
LEX_STRING base; /* for structs */
866
set_var(sql_var_t type_arg, sys_var *var_arg,
1195
set_var(enum_var_type type_arg, sys_var *var_arg,
867
1196
const LEX_STRING *base_name_arg, Item *value_arg)
868
1197
:var(var_arg), type(type_arg), base(*base_name_arg)