148
class sys_var_uint32_t_ptr :public sys_var
152
sys_var_uint32_t_ptr(sys_var_chain *chain, const char *name_arg,
153
uint32_t *value_ptr_arg)
154
:sys_var(name_arg),value(value_ptr_arg)
155
{ chain_sys_var(chain); }
156
sys_var_uint32_t_ptr(sys_var_chain *chain, const char *name_arg,
157
uint32_t *value_ptr_arg,
158
sys_after_update_func func)
159
:sys_var(name_arg,func), value(value_ptr_arg)
160
{ chain_sys_var(chain); }
161
bool check(Session *session, set_var *var);
162
bool update(Session *session, set_var *var);
163
void set_default(Session *session, enum_var_type type);
164
SHOW_TYPE show_type() { return SHOW_INT; }
165
unsigned char *value_ptr(Session *, enum_var_type, const LEX_STRING *)
166
{ return (unsigned char*) value; }
170
class sys_var_uint64_t_ptr :public sys_var
174
sys_var_uint64_t_ptr(sys_var_chain *chain, const char *name_arg, uint64_t *value_ptr_arg)
175
:sys_var(name_arg),value(value_ptr_arg)
176
{ chain_sys_var(chain); }
177
sys_var_uint64_t_ptr(sys_var_chain *chain, const char *name_arg, uint64_t *value_ptr_arg,
143
A global-only ulong variable that requires its access to be
144
protected with a mutex.
147
class sys_var_long_ptr_global: public sys_var_global
151
sys_var_long_ptr_global(sys_var_chain *chain, const char *name_arg,
152
ulong *value_ptr_arg,
153
pthread_mutex_t *guard_arg,
154
sys_after_update_func after_update_arg= NULL)
155
:sys_var_global(name_arg, after_update_arg, guard_arg),
157
{ chain_sys_var(chain); }
158
bool check(THD *thd, set_var *var);
159
bool update(THD *thd, set_var *var);
160
void set_default(THD *thd, enum_var_type type);
161
SHOW_TYPE show_type() { return SHOW_LONG; }
162
uchar *value_ptr(THD *thd, enum_var_type type, LEX_STRING *base)
163
{ return (uchar*) value; }
168
A global ulong variable that is protected by LOCK_global_system_variables
171
class sys_var_long_ptr :public sys_var_long_ptr_global
174
sys_var_long_ptr(sys_var_chain *chain, const char *name_arg, ulong *value_ptr,
175
sys_after_update_func after_update_arg= NULL);
179
class sys_var_ulonglong_ptr :public sys_var
183
sys_var_ulonglong_ptr(sys_var_chain *chain, const char *name_arg, ulonglong *value_ptr_arg)
184
:sys_var(name_arg),value(value_ptr_arg)
185
{ chain_sys_var(chain); }
186
sys_var_ulonglong_ptr(sys_var_chain *chain, const char *name_arg, ulonglong *value_ptr_arg,
178
187
sys_after_update_func func)
179
188
:sys_var(name_arg,func), value(value_ptr_arg)
180
189
{ chain_sys_var(chain); }
181
bool update(Session *session, set_var *var);
182
void set_default(Session *session, enum_var_type type);
190
bool update(THD *thd, set_var *var);
191
void set_default(THD *thd, enum_var_type type);
183
192
SHOW_TYPE show_type() { return SHOW_LONGLONG; }
184
unsigned char *value_ptr(Session *, enum_var_type,
186
{ return (unsigned char*) value; }
193
uchar *value_ptr(THD *thd, enum_var_type type, LEX_STRING *base)
194
{ return (uchar*) value; }
189
class sys_var_size_t_ptr :public sys_var
193
sys_var_size_t_ptr(sys_var_chain *chain, const char *name_arg, size_t *value_ptr_arg)
194
:sys_var(name_arg),value(value_ptr_arg)
195
{ chain_sys_var(chain); }
196
sys_var_size_t_ptr(sys_var_chain *chain, const char *name_arg, size_t *value_ptr_arg,
197
sys_after_update_func func)
198
:sys_var(name_arg,func), value(value_ptr_arg)
199
{ chain_sys_var(chain); }
200
bool update(Session *session, set_var *var);
201
void set_default(Session *session, enum_var_type type);
202
SHOW_TYPE show_type() { return SHOW_SIZE; }
203
unsigned char *value_ptr(Session *, enum_var_type, const LEX_STRING *)
204
{ return (unsigned char*) value; }
207
198
class sys_var_bool_ptr :public sys_var
211
sys_var_bool_ptr(sys_var_chain *chain, const char *name_arg, bool *value_arg)
202
sys_var_bool_ptr(sys_var_chain *chain, const char *name_arg, my_bool *value_arg)
212
203
:sys_var(name_arg),value(value_arg)
213
204
{ chain_sys_var(chain); }
214
bool check(Session *session, set_var *var)
205
bool check(THD *thd, set_var *var)
216
return check_enum(session, var, &bool_typelib);
207
return check_enum(thd, var, &bool_typelib);
218
bool update(Session *session, set_var *var);
219
void set_default(Session *session, enum_var_type type);
209
bool update(THD *thd, set_var *var);
210
void set_default(THD *thd, enum_var_type type);
220
211
SHOW_TYPE show_type() { return SHOW_MY_BOOL; }
221
unsigned char *value_ptr(Session *, enum_var_type, const LEX_STRING *)
222
{ return (unsigned char*) value; }
223
bool check_update_type(Item_result)
212
uchar *value_ptr(THD *thd, enum_var_type type, LEX_STRING *base)
213
{ return (uchar*) value; }
214
bool check_update_type(Item_result type) { return 0; }
227
218
class sys_var_bool_ptr_readonly :public sys_var_bool_ptr
230
221
sys_var_bool_ptr_readonly(sys_var_chain *chain, const char *name_arg,
232
223
:sys_var_bool_ptr(chain, name_arg, value_arg)
234
225
bool is_readonly() const { return 1; }
314
303
sys_var_const_str_ptr(sys_var_chain *chain, const char *name_arg, char **value_arg)
315
304
:sys_var(name_arg),value(value_arg)
316
305
{ chain_sys_var(chain); }
317
bool check(Session *, set_var *)
306
bool check(THD *thd, set_var *var)
321
bool update(Session *, set_var *)
310
bool update(THD *thd, set_var *var)
325
314
SHOW_TYPE show_type() { return SHOW_CHAR; }
326
unsigned char *value_ptr(Session *, enum_var_type, const LEX_STRING *)
315
uchar *value_ptr(THD *thd, enum_var_type type, LEX_STRING *base)
328
return (unsigned char*) *value;
317
return (uchar*) *value;
330
bool check_update_type(Item_result)
319
bool check_update_type(Item_result type)
334
bool check_default(enum_var_type)
336
bool is_readonly(void) const { return 1; }
323
bool check_default(enum_var_type type) { return 1; }
324
bool is_readonly() const { return 1; }
340
328
class sys_var_enum :public sys_var
343
331
TYPELIB *enum_names;
345
sys_var_enum(sys_var_chain *chain, const char *name_arg, uint32_t *value_arg,
333
sys_var_enum(sys_var_chain *chain, const char *name_arg, uint *value_arg,
346
334
TYPELIB *typelib, sys_after_update_func func)
347
335
:sys_var(name_arg,func), value(value_arg), enum_names(typelib)
348
336
{ chain_sys_var(chain); }
349
bool check(Session *session, set_var *var)
337
bool check(THD *thd, set_var *var)
351
return check_enum(session, var, enum_names);
339
return check_enum(thd, var, enum_names);
353
bool update(Session *session, set_var *var);
341
bool update(THD *thd, set_var *var);
354
342
SHOW_TYPE show_type() { return SHOW_CHAR; }
355
unsigned char *value_ptr(Session *session, enum_var_type type,
356
const LEX_STRING *base);
357
bool check_update_type(Item_result)
343
uchar *value_ptr(THD *thd, enum_var_type type, LEX_STRING *base);
344
bool check_update_type(Item_result type) { return 0; }
362
348
class sys_var_enum_const :public sys_var
364
uint32_t SV::*offset;
365
351
TYPELIB *enum_names;
367
sys_var_enum_const(sys_var_chain *chain, const char *name_arg, uint32_t SV::*offset_arg,
353
sys_var_enum_const(sys_var_chain *chain, const char *name_arg, ulong SV::*offset_arg,
368
354
TYPELIB *typelib, sys_after_update_func func)
369
355
:sys_var(name_arg,func), offset(offset_arg), enum_names(typelib)
370
356
{ chain_sys_var(chain); }
371
bool check(Session *, set_var *)
373
bool update(Session *, set_var *)
357
bool check(THD *thd, set_var *var) { return 1; }
358
bool update(THD *thd, set_var *var) { return 1; }
375
359
SHOW_TYPE show_type() { return SHOW_CHAR; }
376
bool check_update_type(Item_result)
360
bool check_update_type(Item_result type) { return 1; }
378
361
bool is_readonly() const { return 1; }
379
unsigned char *value_ptr(Session *session, enum_var_type type,
380
const LEX_STRING *base);
362
uchar *value_ptr(THD *thd, enum_var_type type, LEX_STRING *base);
384
class sys_var_session :public sys_var
366
class sys_var_thd :public sys_var
387
sys_var_session(const char *name_arg,
369
sys_var_thd(const char *name_arg,
388
370
sys_after_update_func func= NULL,
389
Binlog_status_enum bl_status= NOT_IN_BINLOG)
390
:sys_var(name_arg, func, bl_status)
371
Binlog_status_enum binlog_status= NOT_IN_BINLOG)
372
:sys_var(name_arg, func, binlog_status)
392
bool check_type(enum_var_type)
374
bool check_type(enum_var_type type) { return 0; }
394
375
bool check_default(enum_var_type type)
396
377
return type == OPT_GLOBAL && !option_limits;
400
class sys_var_session_uint32_t :public sys_var_session
382
class sys_var_thd_ulong :public sys_var_thd
402
384
sys_check_func check_func;
404
uint32_t SV::*offset;
405
sys_var_session_uint32_t(sys_var_chain *chain, const char *name_arg,
406
uint32_t SV::*offset_arg,
407
sys_check_func c_func= NULL,
408
sys_after_update_func au_func= NULL,
409
Binlog_status_enum binlog_status_arg= NOT_IN_BINLOG)
410
:sys_var_session(name_arg, au_func, binlog_status_arg), check_func(c_func),
387
sys_var_thd_ulong(sys_var_chain *chain, const char *name_arg,
388
ulong SV::*offset_arg,
389
sys_check_func c_func= NULL,
390
sys_after_update_func au_func= NULL,
391
Binlog_status_enum binlog_status_arg= NOT_IN_BINLOG)
392
:sys_var_thd(name_arg, au_func, binlog_status_arg), check_func(c_func),
411
393
offset(offset_arg)
412
394
{ chain_sys_var(chain); }
413
bool check(Session *session, set_var *var);
414
bool update(Session *session, set_var *var);
415
void set_default(Session *session, enum_var_type type);
416
SHOW_TYPE show_type() { return SHOW_INT; }
417
unsigned char *value_ptr(Session *session, enum_var_type type,
418
const LEX_STRING *base);
395
bool check(THD *thd, set_var *var);
396
bool update(THD *thd, set_var *var);
397
void set_default(THD *thd, enum_var_type type);
398
SHOW_TYPE show_type() { return SHOW_LONG; }
399
uchar *value_ptr(THD *thd, enum_var_type type, LEX_STRING *base);
422
class sys_var_session_ha_rows :public sys_var_session
403
class sys_var_thd_ha_rows :public sys_var_thd
425
406
ha_rows SV::*offset;
426
sys_var_session_ha_rows(sys_var_chain *chain, const char *name_arg,
407
sys_var_thd_ha_rows(sys_var_chain *chain, const char *name_arg,
427
408
ha_rows SV::*offset_arg)
428
:sys_var_session(name_arg), offset(offset_arg)
409
:sys_var_thd(name_arg), offset(offset_arg)
429
410
{ chain_sys_var(chain); }
430
sys_var_session_ha_rows(sys_var_chain *chain, const char *name_arg,
411
sys_var_thd_ha_rows(sys_var_chain *chain, const char *name_arg,
431
412
ha_rows SV::*offset_arg,
432
413
sys_after_update_func func)
433
:sys_var_session(name_arg,func), offset(offset_arg)
414
:sys_var_thd(name_arg,func), offset(offset_arg)
434
415
{ chain_sys_var(chain); }
435
bool update(Session *session, set_var *var);
436
void set_default(Session *session, enum_var_type type);
416
bool update(THD *thd, set_var *var);
417
void set_default(THD *thd, enum_var_type type);
437
418
SHOW_TYPE show_type() { return SHOW_HA_ROWS; }
438
unsigned char *value_ptr(Session *session, enum_var_type type,
439
const LEX_STRING *base);
419
uchar *value_ptr(THD *thd, enum_var_type type, LEX_STRING *base);
443
class sys_var_session_uint64_t :public sys_var_session
423
class sys_var_thd_ulonglong :public sys_var_thd
445
sys_check_func check_func;
447
uint64_t SV::*offset;
426
ulonglong SV::*offset;
448
427
bool only_global;
449
sys_var_session_uint64_t(sys_var_chain *chain, const char *name_arg,
450
uint64_t SV::*offset_arg,
451
sys_after_update_func au_func= NULL,
452
sys_check_func c_func= NULL,
453
Binlog_status_enum binlog_status_arg= NOT_IN_BINLOG)
454
:sys_var_session(name_arg, au_func, binlog_status_arg),
428
sys_var_thd_ulonglong(sys_var_chain *chain, const char *name_arg,
429
ulonglong SV::*offset_arg)
430
:sys_var_thd(name_arg), offset(offset_arg)
457
431
{ chain_sys_var(chain); }
458
sys_var_session_uint64_t(sys_var_chain *chain,
459
const char *name_arg,
460
uint64_t SV::*offset_arg,
461
sys_after_update_func func,
462
bool only_global_arg,
463
sys_check_func cfunc= NULL)
464
:sys_var_session(name_arg, func),
432
sys_var_thd_ulonglong(sys_var_chain *chain, const char *name_arg,
433
ulonglong SV::*offset_arg,
434
sys_after_update_func func, bool only_global_arg)
435
:sys_var_thd(name_arg, func), offset(offset_arg),
467
436
only_global(only_global_arg)
468
437
{ chain_sys_var(chain); }
469
bool update(Session *session, set_var *var);
470
void set_default(Session *session, enum_var_type type);
438
bool update(THD *thd, set_var *var);
439
void set_default(THD *thd, enum_var_type type);
471
440
SHOW_TYPE show_type() { return SHOW_LONGLONG; }
472
unsigned char *value_ptr(Session *session, enum_var_type type,
473
const LEX_STRING *base);
474
bool check(Session *session, set_var *var);
475
bool check_default(enum_var_type type)
477
return type == OPT_GLOBAL && !option_limits;
479
bool check_type(enum_var_type type)
481
return (only_global && type != OPT_GLOBAL);
485
class sys_var_session_size_t :public sys_var_session
487
sys_check_func check_func;
491
sys_var_session_size_t(sys_var_chain *chain, const char *name_arg,
492
size_t SV::*offset_arg,
493
sys_after_update_func au_func= NULL,
494
sys_check_func c_func= NULL,
495
Binlog_status_enum binlog_status_arg= NOT_IN_BINLOG)
496
:sys_var_session(name_arg, au_func, binlog_status_arg),
499
{ chain_sys_var(chain); }
500
sys_var_session_size_t(sys_var_chain *chain,
501
const char *name_arg,
502
size_t SV::*offset_arg,
503
sys_after_update_func func,
504
bool only_global_arg,
505
sys_check_func cfunc= NULL)
506
:sys_var_session(name_arg, func),
509
only_global(only_global_arg)
510
{ chain_sys_var(chain); }
511
bool update(Session *session, set_var *var);
512
void set_default(Session *session, enum_var_type type);
513
SHOW_TYPE show_type() { return SHOW_SIZE; }
514
unsigned char *value_ptr(Session *session, enum_var_type type,
515
const LEX_STRING *base);
516
bool check(Session *session, set_var *var);
517
bool check_default(enum_var_type type)
519
return type == OPT_GLOBAL && !option_limits;
521
bool check_type(enum_var_type type)
523
return (only_global && type != OPT_GLOBAL);
528
class sys_var_session_bool :public sys_var_session
532
sys_var_session_bool(sys_var_chain *chain, const char *name_arg, bool SV::*offset_arg)
533
:sys_var_session(name_arg), offset(offset_arg)
534
{ chain_sys_var(chain); }
535
sys_var_session_bool(sys_var_chain *chain, const char *name_arg, bool SV::*offset_arg,
441
uchar *value_ptr(THD *thd, enum_var_type type, LEX_STRING *base);
442
bool check(THD *thd, set_var *var);
443
bool check_default(enum_var_type type)
445
return type == OPT_GLOBAL && !option_limits;
447
bool check_type(enum_var_type type)
449
return (only_global && type != OPT_GLOBAL);
454
class sys_var_thd_bool :public sys_var_thd
458
sys_var_thd_bool(sys_var_chain *chain, const char *name_arg, my_bool SV::*offset_arg)
459
:sys_var_thd(name_arg), offset(offset_arg)
460
{ chain_sys_var(chain); }
461
sys_var_thd_bool(sys_var_chain *chain, const char *name_arg, my_bool SV::*offset_arg,
536
462
sys_after_update_func func)
537
:sys_var_session(name_arg,func), offset(offset_arg)
463
:sys_var_thd(name_arg,func), offset(offset_arg)
538
464
{ chain_sys_var(chain); }
539
bool update(Session *session, set_var *var);
540
void set_default(Session *session, enum_var_type type);
465
bool update(THD *thd, set_var *var);
466
void set_default(THD *thd, enum_var_type type);
541
467
SHOW_TYPE show_type() { return SHOW_MY_BOOL; }
542
unsigned char *value_ptr(Session *session, enum_var_type type,
543
const LEX_STRING *base);
544
bool check(Session *session, set_var *var)
468
uchar *value_ptr(THD *thd, enum_var_type type, LEX_STRING *base);
469
bool check(THD *thd, set_var *var)
546
return check_enum(session, var, &bool_typelib);
471
return check_enum(thd, var, &bool_typelib);
548
bool check_update_type(Item_result)
473
bool check_update_type(Item_result type) { return 0; }
553
class sys_var_session_enum :public sys_var_session
477
class sys_var_thd_enum :public sys_var_thd
556
uint32_t SV::*offset;
557
481
TYPELIB *enum_names;
558
482
sys_check_func check_func;
560
sys_var_session_enum(sys_var_chain *chain, const char *name_arg,
561
uint32_t SV::*offset_arg, TYPELIB *typelib,
484
sys_var_thd_enum(sys_var_chain *chain, const char *name_arg,
485
ulong SV::*offset_arg, TYPELIB *typelib,
562
486
sys_after_update_func func= NULL,
563
sys_check_func check_f= NULL)
564
:sys_var_session(name_arg, func), offset(offset_arg),
565
enum_names(typelib), check_func(check_f)
487
sys_check_func check= NULL)
488
:sys_var_thd(name_arg, func), offset(offset_arg),
489
enum_names(typelib), check_func(check)
566
490
{ chain_sys_var(chain); }
567
bool check(Session *session, set_var *var)
491
bool check(THD *thd, set_var *var)
571
ret= (*check_func)(session, var);
572
return ret ? ret : check_enum(session, var, enum_names);
495
ret= (*check_func)(thd, var);
496
return ret ? ret : check_enum(thd, var, enum_names);
574
bool update(Session *session, set_var *var);
575
void set_default(Session *session, enum_var_type type);
498
bool update(THD *thd, set_var *var);
499
void set_default(THD *thd, enum_var_type type);
576
500
SHOW_TYPE show_type() { return SHOW_CHAR; }
577
unsigned char *value_ptr(Session *session, enum_var_type type,
578
const LEX_STRING *base);
579
bool check_update_type(Item_result)
501
uchar *value_ptr(THD *thd, enum_var_type type, LEX_STRING *base);
502
bool check_update_type(Item_result type) { return 0; }
585
class sys_var_session_optimizer_switch :public sys_var_session_enum
507
class sys_var_thd_optimizer_switch :public sys_var_thd_enum
588
sys_var_session_optimizer_switch(sys_var_chain *chain, const char *name_arg,
589
uint32_t SV::*offset_arg)
590
:sys_var_session_enum(chain, name_arg, offset_arg, &optimizer_switch_typelib)
510
sys_var_thd_optimizer_switch(sys_var_chain *chain, const char *name_arg,
511
ulong SV::*offset_arg)
512
:sys_var_thd_enum(chain, name_arg, offset_arg, &optimizer_switch_typelib)
592
bool check(Session *session, set_var *var)
514
bool check(THD *thd, set_var *var)
594
return check_set(session, var, enum_names);
516
return check_set(thd, var, enum_names);
596
void set_default(Session *session, enum_var_type type);
597
unsigned char *value_ptr(Session *session, enum_var_type type,
598
const LEX_STRING *base);
599
static bool symbolic_mode_representation(Session *session, uint32_t sql_mode,
518
void set_default(THD *thd, enum_var_type type);
519
uchar *value_ptr(THD *thd, enum_var_type type, LEX_STRING *base);
520
static bool symbolic_mode_representation(THD *thd, ulonglong sql_mode,
600
521
LEX_STRING *rep);
604
class sys_var_session_storage_engine :public sys_var_session
525
class sys_var_thd_storage_engine :public sys_var_thd
607
StorageEngine *SV::*offset;
528
plugin_ref SV::*offset;
609
sys_var_session_storage_engine(sys_var_chain *chain, const char *name_arg,
610
StorageEngine *SV::*offset_arg)
611
:sys_var_session(name_arg), offset(offset_arg)
530
sys_var_thd_storage_engine(sys_var_chain *chain, const char *name_arg,
531
plugin_ref SV::*offset_arg)
532
:sys_var_thd(name_arg), offset(offset_arg)
612
533
{ chain_sys_var(chain); }
613
bool check(Session *session, set_var *var);
534
bool check(THD *thd, set_var *var);
614
535
SHOW_TYPE show_type() { return SHOW_CHAR; }
615
536
bool check_update_type(Item_result type)
617
538
return type != STRING_RESULT; /* Only accept strings */
619
void set_default(Session *session, enum_var_type type);
620
bool update(Session *session, set_var *var);
621
unsigned char *value_ptr(Session *session, enum_var_type type,
622
const LEX_STRING *base);
540
void set_default(THD *thd, enum_var_type type);
541
bool update(THD *thd, set_var *var);
542
uchar *value_ptr(THD *thd, enum_var_type type, LEX_STRING *base);
625
class sys_var_session_bit :public sys_var_session
545
class sys_var_thd_bit :public sys_var_thd
627
547
sys_check_func check_func;
628
548
sys_update_func update_func;
632
sys_var_session_bit(sys_var_chain *chain, const char *name_arg,
552
sys_var_thd_bit(sys_var_chain *chain, const char *name_arg,
633
553
sys_check_func c_func, sys_update_func u_func,
634
uint64_t bit, bool reverse_arg=0,
554
ulonglong bit, bool reverse_arg=0,
635
555
Binlog_status_enum binlog_status_arg= NOT_IN_BINLOG)
636
:sys_var_session(name_arg, NULL, binlog_status_arg), check_func(c_func),
556
:sys_var_thd(name_arg, NULL, binlog_status_arg), check_func(c_func),
637
557
update_func(u_func), bit_flag(bit), reverse(reverse_arg)
638
558
{ chain_sys_var(chain); }
639
bool check(Session *session, set_var *var);
640
bool update(Session *session, set_var *var);
641
bool check_update_type(Item_result)
559
bool check(THD *thd, set_var *var);
560
bool update(THD *thd, set_var *var);
561
bool check_update_type(Item_result type) { return 0; }
643
562
bool check_type(enum_var_type type) { return type == OPT_GLOBAL; }
644
563
SHOW_TYPE show_type() { return SHOW_MY_BOOL; }
645
unsigned char *value_ptr(Session *session, enum_var_type type,
646
const LEX_STRING *base);
564
uchar *value_ptr(THD *thd, enum_var_type type, LEX_STRING *base);
567
class sys_var_thd_dbug :public sys_var_thd
570
sys_var_thd_dbug(sys_var_chain *chain, const char *name_arg)
571
:sys_var_thd(name_arg)
572
{ chain_sys_var(chain); }
573
bool check_update_type(Item_result type) { return type != STRING_RESULT; }
574
SHOW_TYPE show_type() { return SHOW_CHAR; }
575
bool update(THD *thd, set_var *var);
576
void set_default(THD *thd, enum_var_type type) { DBUG_POP(); }
577
uchar *value_ptr(THD *thd, enum_var_type type, LEX_STRING *b);
649
582
/* some variables that require special handling */
673
604
Binlog_status_enum binlog_status_arg= NOT_IN_BINLOG)
674
605
:sys_var(name_arg, NULL, binlog_status_arg)
675
606
{ chain_sys_var(chain); }
676
bool update(Session *session, set_var *var);
677
bool check_type(enum_var_type type) { return type == OPT_GLOBAL; }
678
SHOW_TYPE show_type() { return SHOW_LONGLONG; }
679
unsigned char *value_ptr(Session *session, enum_var_type type,
680
const LEX_STRING *base);
684
class sys_var_collation :public sys_var_session
607
bool update(THD *thd, set_var *var);
608
bool check_type(enum_var_type type) { return type == OPT_GLOBAL; }
609
SHOW_TYPE show_type() { return SHOW_LONGLONG; }
610
uchar *value_ptr(THD *thd, enum_var_type type, LEX_STRING *base);
614
class sys_var_insert_id :public sys_var
617
sys_var_insert_id(sys_var_chain *chain, const char *name_arg)
619
{ chain_sys_var(chain); }
620
bool update(THD *thd, set_var *var);
621
bool check_type(enum_var_type type) { return type == OPT_GLOBAL; }
622
SHOW_TYPE show_type() { return SHOW_LONGLONG; }
623
uchar *value_ptr(THD *thd, enum_var_type type, LEX_STRING *base);
627
class sys_var_rand_seed1 :public sys_var
630
sys_var_rand_seed1(sys_var_chain *chain, const char *name_arg,
631
Binlog_status_enum binlog_status_arg= NOT_IN_BINLOG)
632
:sys_var(name_arg, NULL, binlog_status_arg)
633
{ chain_sys_var(chain); }
634
bool update(THD *thd, set_var *var);
635
bool check_type(enum_var_type type) { return type == OPT_GLOBAL; }
638
class sys_var_rand_seed2 :public sys_var
641
sys_var_rand_seed2(sys_var_chain *chain, const char *name_arg,
642
Binlog_status_enum binlog_status_arg= NOT_IN_BINLOG)
643
:sys_var(name_arg, NULL, binlog_status_arg)
644
{ chain_sys_var(chain); }
645
bool update(THD *thd, set_var *var);
646
bool check_type(enum_var_type type) { return type == OPT_GLOBAL; }
650
class sys_var_collation :public sys_var_thd
687
653
sys_var_collation(const char *name_arg,
688
654
Binlog_status_enum binlog_status_arg= NOT_IN_BINLOG)
689
:sys_var_session(name_arg, NULL, binlog_status_arg)
655
:sys_var_thd(name_arg, NULL, binlog_status_arg)
657
no_support_one_shot= 0;
659
bool check(THD *thd, set_var *var);
660
SHOW_TYPE show_type() { return SHOW_CHAR; }
661
bool check_update_type(Item_result type)
663
return ((type != STRING_RESULT) && (type != INT_RESULT));
665
bool check_default(enum_var_type type) { return 0; }
666
virtual void set_default(THD *thd, enum_var_type type)= 0;
669
class sys_var_character_set :public sys_var_thd
673
sys_var_character_set(const char *name_arg, bool is_nullable= 0,
674
Binlog_status_enum binlog_status_arg= NOT_IN_BINLOG)
675
:sys_var_thd(name_arg, NULL, binlog_status_arg), nullable(is_nullable)
678
In fact only almost all variables derived from sys_var_character_set
679
support ONE_SHOT; character_set_results doesn't. But that's good enough.
681
no_support_one_shot= 0;
683
bool check(THD *thd, set_var *var);
684
SHOW_TYPE show_type() { return SHOW_CHAR; }
685
bool check_update_type(Item_result type)
687
return ((type != STRING_RESULT) && (type != INT_RESULT));
689
bool check_default(enum_var_type type) { return 0; }
690
bool update(THD *thd, set_var *var);
691
uchar *value_ptr(THD *thd, enum_var_type type, LEX_STRING *base);
692
virtual void set_default(THD *thd, enum_var_type type)= 0;
693
virtual CHARSET_INFO **ci_ptr(THD *thd, enum_var_type type)= 0;
696
class sys_var_character_set_sv :public sys_var_character_set
698
CHARSET_INFO *SV::*offset;
699
CHARSET_INFO **global_default;
701
sys_var_character_set_sv(sys_var_chain *chain, const char *name_arg,
702
CHARSET_INFO *SV::*offset_arg,
703
CHARSET_INFO **global_default_arg,
705
Binlog_status_enum binlog_status_arg= NOT_IN_BINLOG)
706
: sys_var_character_set(name_arg, is_nullable, binlog_status_arg),
707
offset(offset_arg), global_default(global_default_arg)
708
{ chain_sys_var(chain); }
709
void set_default(THD *thd, enum_var_type type);
710
CHARSET_INFO **ci_ptr(THD *thd, enum_var_type type);
714
class sys_var_character_set_client: public sys_var_character_set_sv
717
sys_var_character_set_client(sys_var_chain *chain, const char *name_arg,
718
CHARSET_INFO *SV::*offset_arg,
719
CHARSET_INFO **global_default_arg,
720
Binlog_status_enum binlog_status_arg)
721
: sys_var_character_set_sv(chain, name_arg, offset_arg, global_default_arg,
722
0, binlog_status_arg)
691
bool check(Session *session, set_var *var);
692
SHOW_TYPE show_type() { return SHOW_CHAR; }
693
bool check_update_type(Item_result type)
695
return ((type != STRING_RESULT) && (type != INT_RESULT));
697
bool check_default(enum_var_type) { return 0; }
698
virtual void set_default(Session *session, enum_var_type type)= 0;
724
bool check(THD *thd, set_var *var);
728
class sys_var_character_set_database :public sys_var_character_set
731
sys_var_character_set_database(sys_var_chain *chain, const char *name_arg,
732
Binlog_status_enum binlog_status_arg=
734
: sys_var_character_set(name_arg, 0, binlog_status_arg)
735
{ chain_sys_var(chain); }
736
void set_default(THD *thd, enum_var_type type);
737
CHARSET_INFO **ci_ptr(THD *thd, enum_var_type type);
701
740
class sys_var_collation_sv :public sys_var_collation
703
const CHARSET_INFO *SV::*offset;
704
const CHARSET_INFO **global_default;
742
CHARSET_INFO *SV::*offset;
743
CHARSET_INFO **global_default;
706
745
sys_var_collation_sv(sys_var_chain *chain, const char *name_arg,
707
const CHARSET_INFO *SV::*offset_arg,
708
const CHARSET_INFO **global_default_arg,
746
CHARSET_INFO *SV::*offset_arg,
747
CHARSET_INFO **global_default_arg,
709
748
Binlog_status_enum binlog_status_arg= NOT_IN_BINLOG)
710
749
:sys_var_collation(name_arg, binlog_status_arg),
711
750
offset(offset_arg), global_default(global_default_arg)
713
752
chain_sys_var(chain);
715
bool update(Session *session, set_var *var);
716
void set_default(Session *session, enum_var_type type);
717
unsigned char *value_ptr(Session *session, enum_var_type type,
718
const LEX_STRING *base);
754
bool update(THD *thd, set_var *var);
755
void set_default(THD *thd, enum_var_type type);
756
uchar *value_ptr(THD *thd, enum_var_type type, LEX_STRING *base);
743
779
:sys_var_key_cache_param(chain, name_arg,
744
780
offsetof(KEY_CACHE, param_buff_size))
746
bool update(Session *session, set_var *var);
782
bool update(THD *thd, set_var *var);
747
783
SHOW_TYPE show_type() { return SHOW_LONGLONG; }
751
class sys_var_key_cache_uint32_t :public sys_var_key_cache_param
787
class sys_var_key_cache_long :public sys_var_key_cache_param
754
sys_var_key_cache_uint32_t(sys_var_chain *chain, const char *name_arg, size_t offset_arg)
790
sys_var_key_cache_long(sys_var_chain *chain, const char *name_arg, size_t offset_arg)
755
791
:sys_var_key_cache_param(chain, name_arg, offset_arg)
757
bool update(Session *session, set_var *var);
758
SHOW_TYPE show_type() { return SHOW_INT; }
793
bool update(THD *thd, set_var *var);
794
SHOW_TYPE show_type() { return SHOW_LONG; }
798
class sys_var_thd_date_time_format :public sys_var_thd
800
DATE_TIME_FORMAT *SV::*offset;
801
timestamp_type date_time_type;
803
sys_var_thd_date_time_format(sys_var_chain *chain, const char *name_arg,
804
DATE_TIME_FORMAT *SV::*offset_arg,
805
timestamp_type date_time_type_arg)
806
:sys_var_thd(name_arg), offset(offset_arg),
807
date_time_type(date_time_type_arg)
808
{ chain_sys_var(chain); }
809
SHOW_TYPE show_type() { return SHOW_CHAR; }
810
bool check_update_type(Item_result type)
812
return type != STRING_RESULT; /* Only accept strings */
814
bool check_default(enum_var_type type) { return 0; }
815
bool check(THD *thd, set_var *var);
816
bool update(THD *thd, set_var *var);
817
void update2(THD *thd, enum_var_type type, DATE_TIME_FORMAT *new_value);
818
uchar *value_ptr(THD *thd, enum_var_type type, LEX_STRING *base);
819
void set_default(THD *thd, enum_var_type type);
823
class sys_var_log_state :public sys_var_bool_ptr
827
sys_var_log_state(sys_var_chain *chain, const char *name_arg, my_bool *value_arg,
829
:sys_var_bool_ptr(chain, name_arg, value_arg), log_type(log_type_arg) {}
830
bool update(THD *thd, set_var *var);
831
void set_default(THD *thd, enum_var_type type);
835
class sys_var_set :public sys_var
841
sys_var_set(sys_var_chain *chain, const char *name_arg, ulong *value_arg,
842
TYPELIB *typelib, sys_after_update_func func)
843
:sys_var(name_arg, func), value(value_arg), enum_names(typelib)
844
{ chain_sys_var(chain); }
845
virtual bool check(THD *thd, set_var *var)
847
return check_set(thd, var, enum_names);
849
virtual void set_default(THD *thd, enum_var_type type)
853
bool update(THD *thd, set_var *var);
854
uchar *value_ptr(THD *thd, enum_var_type type, LEX_STRING *base);
855
bool check_update_type(Item_result type) { return 0; }
856
SHOW_TYPE show_type() { return SHOW_CHAR; }
859
class sys_var_set_slave_mode :public sys_var_set
862
sys_var_set_slave_mode(sys_var_chain *chain, const char *name_arg,
864
TYPELIB *typelib, sys_after_update_func func) :
865
sys_var_set(chain, name_arg, value_arg, typelib, func) {}
866
void set_default(THD *thd, enum_var_type type);
867
bool check(THD *thd, set_var *var);
868
bool update(THD *thd, set_var *var);
871
class sys_var_log_output :public sys_var
876
sys_var_log_output(sys_var_chain *chain, const char *name_arg, ulong *value_arg,
877
TYPELIB *typelib, sys_after_update_func func)
878
:sys_var(name_arg,func), value(value_arg), enum_names(typelib)
880
chain_sys_var(chain);
881
set_allow_empty_value(FALSE);
883
virtual bool check(THD *thd, set_var *var)
885
return check_set(thd, var, enum_names);
887
bool update(THD *thd, set_var *var);
888
uchar *value_ptr(THD *thd, enum_var_type type, LEX_STRING *base);
889
bool check_update_type(Item_result type) { return 0; }
890
void set_default(THD *thd, enum_var_type type);
891
SHOW_TYPE show_type() { return SHOW_CHAR; }
761
895
/* Variable that you can only read from */
849
class sys_var_session_time_zone :public sys_var_session
976
class sys_var_thd_time_zone :public sys_var_thd
852
sys_var_session_time_zone(sys_var_chain *chain, const char *name_arg,
979
sys_var_thd_time_zone(sys_var_chain *chain, const char *name_arg,
853
980
Binlog_status_enum binlog_status_arg= NOT_IN_BINLOG)
854
:sys_var_session(name_arg, NULL, binlog_status_arg)
981
:sys_var_thd(name_arg, NULL, binlog_status_arg)
983
no_support_one_shot= 0;
856
984
chain_sys_var(chain);
858
bool check(Session *session, set_var *var);
986
bool check(THD *thd, set_var *var);
859
987
SHOW_TYPE show_type() { return SHOW_CHAR; }
860
988
bool check_update_type(Item_result type)
862
990
return type != STRING_RESULT; /* Only accept strings */
864
bool check_default(enum_var_type)
866
bool update(Session *session, set_var *var);
867
unsigned char *value_ptr(Session *session, enum_var_type type,
868
const LEX_STRING *base);
869
virtual void set_default(Session *session, enum_var_type type);
873
class sys_var_microseconds :public sys_var_session
875
uint64_t SV::*offset;
992
bool check_default(enum_var_type type) { return 0; }
993
bool update(THD *thd, set_var *var);
994
uchar *value_ptr(THD *thd, enum_var_type type, LEX_STRING *base);
995
virtual void set_default(THD *thd, enum_var_type type);
999
class sys_var_max_user_conn : public sys_var_thd
1002
sys_var_max_user_conn(sys_var_chain *chain, const char *name_arg):
1003
sys_var_thd(name_arg)
1004
{ chain_sys_var(chain); }
1005
bool check(THD *thd, set_var *var);
1006
bool update(THD *thd, set_var *var);
1007
bool check_default(enum_var_type type)
1009
return type != OPT_GLOBAL || !option_limits;
1011
void set_default(THD *thd, enum_var_type type);
1012
SHOW_TYPE show_type() { return SHOW_INT; }
1013
uchar *value_ptr(THD *thd, enum_var_type type, LEX_STRING *base);
1017
class sys_var_microseconds :public sys_var_thd
1019
ulonglong SV::*offset;
877
1021
sys_var_microseconds(sys_var_chain *chain, const char *name_arg,
878
uint64_t SV::*offset_arg):
879
sys_var_session(name_arg), offset(offset_arg)
1022
ulonglong SV::*offset_arg):
1023
sys_var_thd(name_arg), offset(offset_arg)
880
1024
{ chain_sys_var(chain); }
881
bool check(Session *, set_var *) {return 0;}
882
bool update(Session *session, set_var *var);
883
void set_default(Session *session, enum_var_type type);
1025
bool check(THD *thd, set_var *var) {return 0;}
1026
bool update(THD *thd, set_var *var);
1027
void set_default(THD *thd, enum_var_type type);
884
1028
SHOW_TYPE show_type() { return SHOW_DOUBLE; }
885
1029
bool check_update_type(Item_result type)
887
1031
return (type != INT_RESULT && type != REAL_RESULT && type != DECIMAL_RESULT);
889
unsigned char *value_ptr(Session *session, enum_var_type type,
890
const LEX_STRING *base);
893
class sys_var_session_lc_time_names :public sys_var_session
896
sys_var_session_lc_time_names(sys_var_chain *chain, const char *name_arg,
1033
uchar *value_ptr(THD *thd, enum_var_type type, LEX_STRING *base);
1037
class sys_var_trust_routine_creators :public sys_var_bool_ptr
1039
/* We need a derived class only to have a warn_deprecated() */
1041
sys_var_trust_routine_creators(sys_var_chain *chain,
1042
const char *name_arg, my_bool *value_arg) :
1043
sys_var_bool_ptr(chain, name_arg, value_arg) {};
1044
void warn_deprecated(THD *thd);
1045
void set_default(THD *thd, enum_var_type type);
1046
bool update(THD *thd, set_var *var);
1050
Handler for setting the system variable --read-only.
1053
class sys_var_opt_readonly :public sys_var_bool_ptr
1056
sys_var_opt_readonly(sys_var_chain *chain, const char *name_arg,
1057
my_bool *value_arg) :
1058
sys_var_bool_ptr(chain, name_arg, value_arg) {};
1059
~sys_var_opt_readonly() {};
1060
bool update(THD *thd, set_var *var);
1064
class sys_var_thd_lc_time_names :public sys_var_thd
1067
sys_var_thd_lc_time_names(sys_var_chain *chain, const char *name_arg,
897
1068
Binlog_status_enum binlog_status_arg= NOT_IN_BINLOG)
898
: sys_var_session(name_arg, NULL, binlog_status_arg)
1069
: sys_var_thd(name_arg, NULL, binlog_status_arg)
1071
#if MYSQL_VERSION_ID < 50000
1072
no_support_one_shot= 0;
900
1074
chain_sys_var(chain);
902
bool check(Session *session, set_var *var);
1076
bool check(THD *thd, set_var *var);
903
1077
SHOW_TYPE show_type() { return SHOW_CHAR; }
904
1078
bool check_update_type(Item_result type)
906
1080
return ((type != STRING_RESULT) && (type != INT_RESULT));
908
bool check_default(enum_var_type)
910
bool update(Session *session, set_var *var);
911
unsigned char *value_ptr(Session *session, enum_var_type type,
912
const LEX_STRING *base);
913
virtual void set_default(Session *session, enum_var_type type);
1082
bool check_default(enum_var_type type) { return 0; }
1083
bool update(THD *thd, set_var *var);
1084
uchar *value_ptr(THD *thd, enum_var_type type, LEX_STRING *base);
1085
virtual void set_default(THD *thd, enum_var_type type);
1089
extern void fix_binlog_format_after_update(THD *thd, enum_var_type type);
1091
class sys_var_thd_binlog_format :public sys_var_thd_enum
1094
sys_var_thd_binlog_format(sys_var_chain *chain, const char *name_arg,
1095
ulong SV::*offset_arg)
1096
:sys_var_thd_enum(chain, name_arg, offset_arg,
1097
&binlog_format_typelib,
1098
fix_binlog_format_after_update)
1100
bool is_readonly() const;
917
1103
/****************************************************************************
918
1104
Classes for parsing of the SET command