1
1
/* -*- mode: c++; c-basic-offset: 2; indent-tabs-mode: nil; -*-
2
2
* vim:expandtab:shiftwidth=2:tabstop=2:smarttab:
4
* Copyright (C) 2008 Sun Microsystems, Inc.
4
* Copyright (C) 2008 Sun Microsystems
6
6
* This program is free software; you can redistribute it and/or modify
7
7
* it under the terms of the GNU General Public License as published by
24
24
#include <boost/filesystem.hpp>
26
#include <drizzled/constrained_value.h>
27
#include <drizzled/set_var.h>
28
#include <drizzled/show_type.h>
29
#include <drizzled/item_result.h>
30
#include <drizzled/base.h>
31
#include <drizzled/global_charset_info.h>
32
#include <drizzled/lex_string.h>
34
#include <drizzled/visibility.h>
26
#include "drizzled/constrained_value.h"
27
#include "drizzled/set_var.h"
28
#include "drizzled/show_type.h"
29
#include "drizzled/typelib.h"
30
#include "drizzled/item_result.h"
31
#include "drizzled/base.h"
32
#include "drizzled/global_charset_info.h"
33
#include "drizzled/lex_string.h"
39
class sys_var_pluginvar; /* opaque */
41
41
typedef struct my_locale_st MY_LOCALE;
42
typedef struct st_typelib TYPELIB;
43
extern TYPELIB bool_typelib;
44
45
typedef int (*sys_check_func)(Session *, set_var *);
45
46
typedef bool (*sys_update_func)(Session *, set_var *);
56
57
extern const char *in_left_expr_name;
57
58
extern const char *in_additional_cond;
58
59
extern const char *in_having_cond;
60
extern char glob_hostname[FN_REFLEN];
59
61
extern boost::filesystem::path basedir;
60
62
extern boost::filesystem::path pid_file;
61
63
extern boost::filesystem::path secure_file_priv;
64
extern char system_time_zone[30];
62
65
extern char *opt_tc_log_file;
63
66
extern uint64_t session_startup_options;
64
67
extern uint32_t global_thread_id;
65
68
extern uint64_t table_cache_size;
69
extern uint64_t max_connect_errors;
66
70
extern back_log_constraints back_log;
67
71
extern uint32_t ha_open_options;
68
72
extern char *drizzled_bind_host;
71
75
extern uint32_t volatile thread_running;
72
76
extern uint32_t volatile global_read_lock;
73
77
extern bool opt_readonly;
78
extern char *default_tz_name;
74
79
extern const char *opt_scheduler;
75
extern size_t transaction_message_threshold;
77
81
uint64_t fix_unsigned(Session *, uint64_t, const struct option *);
79
const std::string &getServerHostname();
80
83
int sys_var_init();
83
86
* A class which represents a variable, either global or
86
class DRIZZLED_API sys_var
89
92
std::string name; /**< The name of the variable */
90
sys_check_func check_func;
91
93
sys_after_update_func after_update; /**< Function pointer triggered after the variable's value is updated */
92
94
struct option *option_limits; /**< Updated by by sys_var_init() */
93
95
bool m_allow_empty_value; /**< Does variable allow an empty value? */
95
sys_var(const std::string &name_arg,
96
sys_after_update_func func= NULL,
97
sys_check_func check_func_arg= NULL)
97
sys_var(const std::string &name_arg, sys_after_update_func func= NULL)
100
check_func(check_func_arg),
101
100
after_update(func),
102
101
option_limits(NULL),
103
102
m_allow_empty_value(true)
183
virtual sys_var_pluginvar *cast_pluginvar()
187
190
* A base class for all variables that require its access to
188
191
* be guarded with a mutex.
190
class DRIZZLED_API sys_var_global: public sys_var
193
class sys_var_global: public sys_var
193
196
pthread_mutex_t *guard;
222
225
{ return (unsigned char*) value; }
225
class DRIZZLED_API sys_var_uint32_t_ptr_readonly :
226
public sys_var_uint32_t_ptr
229
sys_var_uint32_t_ptr_readonly(const char *name_arg,
230
uint32_t *value_ptr_arg) :
231
sys_var_uint32_t_ptr(name_arg, value_ptr_arg)
234
sys_var_uint32_t_ptr_readonly(const char *name_arg,
235
uint32_t *value_ptr_arg,
236
sys_after_update_func func) :
237
sys_var_uint32_t_ptr(name_arg, value_ptr_arg, func)
240
bool is_readonly() const
247
class DRIZZLED_API sys_var_uint64_t_ptr :public sys_var
229
class sys_var_uint64_t_ptr :public sys_var
250
232
const uint64_t default_value;
315
297
{ return (unsigned char*) value; }
318
class DRIZZLED_API sys_var_size_t_ptr_readonly :public sys_var_size_t_ptr
321
sys_var_size_t_ptr_readonly(const char *name_arg,
323
:sys_var_size_t_ptr(name_arg, value_arg)
325
bool is_readonly() const { return 1; }
328
class DRIZZLED_API sys_var_bool_ptr :public sys_var
300
class sys_var_bool_ptr :public sys_var
333
304
sys_var_bool_ptr(const std::string &name_arg, bool *value_arg,
334
305
sys_after_update_func func= NULL) :
335
sys_var(name_arg, func), default_value(*value_arg), value(value_arg)
306
sys_var(name_arg, func), value(value_arg)
337
bool check(Session *session, set_var *var);
338
virtual bool check_default(sql_var_t)
308
bool check(Session *session, set_var *var)
310
return check_enum(session, var, &bool_typelib);
342
312
bool update(Session *session, set_var *var);
343
313
void set_default(Session *session, sql_var_t type);
362
class DRIZZLED_API sys_var_str :public sys_var
332
class sys_var_str :public sys_var
365
335
char *value; // Pointer to allocated string
366
336
uint32_t value_length;
337
sys_check_func check_func;
367
338
sys_update_func update_func;
368
339
sys_set_default_func set_default_func;
369
340
sys_var_str(const char *name_arg,
370
sys_check_func check_func_arg,
371
sys_update_func update_func_arg,
372
sys_set_default_func set_default_func_arg,
374
sys_var(name_arg, NULL, check_func_arg),
376
update_func(update_func_arg),
377
set_default_func(set_default_func_arg)
341
sys_check_func check_func_arg,
342
sys_update_func update_func_arg,
343
sys_set_default_func set_default_func_arg,
345
:sys_var(name_arg), value(value_arg), check_func(check_func_arg),
346
update_func(update_func_arg),set_default_func(set_default_func_arg)
379
348
bool check(Session *session, set_var *var);
380
349
bool update(Session *session, set_var *var)
439
408
constrained_value<T> &value;
411
bool have_default_value;
443
413
sys_var_constrained_value(const char *name_arg,
444
414
constrained_value<T> &value_arg) :
445
415
sys_var(name_arg),
446
416
value(value_arg),
447
default_value(value_arg.get())
450
sys_var_constrained_value(const char *name_arg,
451
constrained_value<T> &value_arg,
452
sys_after_update_func after_update_func_arg) :
453
sys_var(name_arg, after_update_func_arg),
455
default_value(value_arg.get())
458
sys_var_constrained_value(const char *name_arg,
459
constrained_value<T> &value_arg,
460
sys_check_func check_func_arg) :
461
sys_var(name_arg, NULL, check_func_arg),
463
default_value(value_arg.get())
418
have_default_value(false)
421
sys_var_constrained_value(const char *name_arg,
422
constrained_value<T> &value_arg,
423
T default_value_arg) :
426
default_value(default_value_arg),
427
have_default_value(true)
474
438
bool update(Session *, set_var *var)
476
value= uint32_t(var->getInteger());
440
value= var->save_result.uint32_t_value;
480
444
bool check_default(sql_var_t)
446
return not have_default_value;
485
449
void set_default(Session *, sql_var_t)
522
486
inline bool sys_var_constrained_value<uint64_t>::update(Session *, set_var *var)
524
value= var->getInteger();
488
value= var->save_result.uint64_t_value;
529
493
inline bool sys_var_constrained_value<uint32_t>::update(Session *, set_var *var)
531
value= uint32_t(var->getInteger());
495
value= var->save_result.uint32_t_value;
558
class DRIZZLED_API sys_var_std_string :
562
sys_check_func check_func;
563
sys_update_func update_func;
564
sys_set_default_func set_default_func;
566
sys_var_std_string(const std::string &name_arg,
567
std::string &value_arg,
568
sys_check_func check_func_arg= NULL,
569
sys_update_func update_func_arg= NULL) :
572
check_func(check_func_arg),
573
update_func(update_func_arg)
576
inline void set(char *val_in)
581
void set_check_func(sys_check_func check_func_arg= NULL)
583
check_func= check_func_arg;
586
void set_update_func(sys_update_func update_func_arg= NULL)
588
update_func= update_func_arg;
591
bool check(Session *session, set_var *var);
593
bool update(Session *session, set_var *var)
595
if (update_func != NULL)
597
return (*update_func)(session, var);
601
SHOW_TYPE show_type() { return SHOW_CHAR; }
602
unsigned char *value_ptr(Session *, sql_var_t, const LEX_STRING *)
604
return (unsigned char*)(value.c_str());
606
bool check_update_type(Item_result type)
608
return type != STRING_RESULT; /* Only accept strings */
610
bool check_default(sql_var_t)
612
bool is_readonly() const { return false; }
615
class DRIZZLED_API sys_var_const_string :
522
class sys_var_const_string :
618
525
const std::string &value;
902
809
SHOW_TYPE show_type() { return SHOW_MY_BOOL; }
903
810
unsigned char *value_ptr(Session *session, sql_var_t type,
904
811
const LEX_STRING *base);
905
bool check(Session *session, set_var *var);
812
bool check(Session *session, set_var *var)
814
return check_enum(session, var, &bool_typelib);
906
816
bool check_update_type(Item_result)
911
class DRIZZLED_API sys_var_session_enum :public sys_var_session
821
class sys_var_session_enum :public sys_var_session
914
824
uint32_t drizzle_system_variables::*offset;
948
858
plugin::StorageEngine *drizzle_system_variables::*offset_arg)
949
859
:sys_var_session(name_arg), offset(offset_arg)
861
bool check(Session *session, set_var *var);
951
862
SHOW_TYPE show_type() { return SHOW_CHAR; }
952
863
bool check_update_type(Item_result type)
1018
class DRIZZLED_API sys_var_collation :public sys_var_session
929
class sys_var_collation :public sys_var_session
1021
932
sys_var_collation(const char *name_arg)
1022
933
:sys_var_session(name_arg, NULL)
935
bool check(Session *session, set_var *var);
1024
936
SHOW_TYPE show_type() { return SHOW_CHAR; }
1025
937
bool check_update_type(Item_result type)
1030
942
virtual void set_default(Session *session, sql_var_t type)= 0;
1033
class DRIZZLED_API sys_var_collation_sv :public sys_var_collation
945
class sys_var_collation_sv :public sys_var_collation
1035
947
const CHARSET_INFO *drizzle_system_variables::*offset;
1036
948
const CHARSET_INFO **global_default;
1079
991
bool is_readonly(void) const { return 1; }
1082
class DRIZZLED_API sys_var_microseconds :public sys_var_session
995
class sys_var_session_time_zone :public sys_var_session
998
sys_var_session_time_zone(const char *name_arg)
999
:sys_var_session(name_arg, NULL)
1003
bool check(Session *session, set_var *var);
1004
SHOW_TYPE show_type() { return SHOW_CHAR; }
1005
bool check_update_type(Item_result type)
1007
return type != STRING_RESULT; /* Only accept strings */
1009
bool check_default(sql_var_t)
1011
bool update(Session *session, set_var *var);
1012
unsigned char *value_ptr(Session *session, sql_var_t type,
1013
const LEX_STRING *base);
1014
virtual void set_default(Session *session, sql_var_t type);
1018
class sys_var_microseconds :public sys_var_session
1084
1020
uint64_t drizzle_system_variables::*offset;
1134
1071
drizzle_show_var* enumerate_sys_vars(Session *session);
1072
void drizzle_add_plugin_sysvar(sys_var_pluginvar *var);
1073
void drizzle_del_plugin_sysvar();
1135
1074
void add_sys_var_to_list(sys_var *var, struct option *long_options);
1136
1075
void add_sys_var_to_list(sys_var *var);
1137
sys_var *find_sys_var(const std::string &name);
1076
sys_var *find_sys_var(Session *session, const char *str, uint32_t length=0);
1077
bool not_all_support_one_shot(List<set_var_base> *var_list);
1078
extern sys_var_session_time_zone sys_time_zone;
1138
1079
extern sys_var_session_bit sys_autocommit;
1139
1080
const CHARSET_INFO *get_old_charset_by_name(const char *old_name);