23 #include <boost/filesystem.hpp>
25 #include <drizzled/common_fwd.h>
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/charset.h>
32 #include <drizzled/lex_string.h>
37 typedef int (*sys_check_func)(Session *, set_var *);
38 typedef bool (*sys_update_func)(Session *, set_var *);
39 typedef void (*sys_after_update_func)(Session *, sql_var_t);
40 typedef void (*sys_set_default_func)(Session *, sql_var_t);
41 typedef unsigned char *(*sys_value_ptr_func)(Session *session);
43 static const std::vector<std::string> empty_aliases;
44 extern struct drizzle_system_variables max_system_variables;
45 extern size_t table_def_size;
47 extern std::string drizzle_tmpdir;
48 extern const char *first_keyword;
51 extern const char *in_having_cond;
52 extern boost::filesystem::path basedir;
53 extern boost::filesystem::path pid_file;
54 extern boost::filesystem::path secure_file_priv;
55 extern uint64_t session_startup_options;
56 extern uint32_t global_thread_id;
57 extern uint64_t table_cache_size;
58 extern back_log_constraints back_log;
59 extern uint32_t ha_open_options;
60 extern const char *drizzled_bind_host;
61 extern uint32_t dropping_tables;
62 extern bool opt_endinfo;
63 extern uint32_t
volatile thread_running;
64 extern uint32_t
volatile global_read_lock;
65 extern bool opt_readonly;
66 extern const char *opt_scheduler;
67 extern size_t transaction_message_threshold;
69 uint64_t fix_unsigned(Session*, uint64_t,
const option&);
82 sys_check_func check_func;
87 sys_var(
const std::string &name_arg,
88 sys_after_update_func func= NULL,
89 sys_check_func check_func_arg= NULL)
92 check_func(check_func_arg),
95 m_allow_empty_value(true)
99 void setName(
const std::string &name_in)
111 inline const std::string &getName()
const
119 const std::vector<std::string>& getAliases()
const
121 return empty_aliases;
126 inline struct option *getOptionLimits()
const
128 return option_limits;
135 inline void setOptionLimits(
struct option *in_option_limits)
137 option_limits= in_option_limits;
142 inline sys_after_update_func getAfterUpdateTrigger()
const
149 virtual void set_default(
Session *, sql_var_t)
151 virtual SHOW_TYPE show_type()
155 virtual unsigned char *value_ptr(Session*, sql_var_t) = 0;
156 virtual bool check_type(sql_var_t type)
158 return type != OPT_GLOBAL;
160 virtual bool check_update_type(Item_result type)
162 return type != INT_RESULT;
164 virtual bool check_default(sql_var_t)
166 return option_limits == 0;
168 Item *item(Session*, sql_var_t);
169 virtual bool is_readonly()
const
182 pthread_mutex_t *guard;
184 sys_var_global(
const char *name_arg, sys_after_update_func after_update_arg, pthread_mutex_t *guard_arg) :
185 sys_var(name_arg, after_update_arg),
195 sys_var(name_arg), value(value_ptr_arg)
197 sys_var_uint32_t_ptr(
const char *name_arg, uint32_t *value_ptr_arg, sys_after_update_func func) :
198 sys_var(name_arg,func), value(value_ptr_arg)
202 void set_default(
Session *session, sql_var_t type);
203 SHOW_TYPE show_type() {
return SHOW_INT; }
204 unsigned char *value_ptr(
Session *, sql_var_t)
205 {
return (
unsigned char*) value; }
216 uint32_t *value_ptr_arg,
217 sys_after_update_func func) :
221 bool is_readonly()
const
231 const uint64_t default_value;
232 bool have_default_value;
236 value(value_ptr_arg),
238 have_default_value(
false)
242 uint64_t *value_ptr_arg,
243 const uint64_t default_value_in) :
245 value(value_ptr_arg),
246 default_value(default_value_in),
247 have_default_value(
true)
251 uint64_t *value_ptr_arg,
252 sys_after_update_func func) :
254 value(value_ptr_arg),
256 have_default_value(
false)
260 uint64_t *value_ptr_arg,
261 sys_after_update_func func,
262 const uint64_t default_value_in) :
264 value(value_ptr_arg),
265 default_value(default_value_in),
266 have_default_value(
true)
270 void set_default(
Session *session, sql_var_t type);
271 virtual bool check_default(sql_var_t)
273 return (not have_default_value) && option_limits == 0;
275 SHOW_TYPE show_type() {
return SHOW_LONGLONG; }
276 unsigned char *value_ptr(
Session *, sql_var_t)
277 {
return (
unsigned char*) value; }
285 :
sys_var(name_arg),value(value_ptr_arg)
288 sys_after_update_func func)
289 :
sys_var(name_arg,func), value(value_ptr_arg)
292 void set_default(
Session *session, sql_var_t type);
293 SHOW_TYPE show_type() {
return SHOW_SIZE; }
294 unsigned char *value_ptr(
Session *, sql_var_t)
295 {
return (
unsigned char*) value; }
305 bool is_readonly()
const {
return 1; }
314 sys_after_update_func func= NULL) :
315 sys_var(name_arg, func), default_value(*value_arg), value(value_arg)
318 virtual bool check_default(sql_var_t)
323 void set_default(
Session *session, sql_var_t type);
324 SHOW_TYPE show_type() {
return SHOW_MY_BOOL; }
325 unsigned char *value_ptr(
Session *, sql_var_t)
326 {
return (
unsigned char*) value; }
327 bool check_update_type(Item_result)
338 bool is_readonly()
const {
return 1; }
346 uint32_t value_length;
347 sys_update_func update_func;
348 sys_set_default_func set_default_func;
350 sys_check_func check_func_arg,
351 sys_update_func update_func_arg,
352 sys_set_default_func set_default_func_arg,
354 sys_var(name_arg, NULL, check_func_arg),
356 update_func(update_func_arg),
357 set_default_func(set_default_func_arg)
362 return (*update_func)(session, var);
364 void set_default(
Session *session, sql_var_t type)
366 (*set_default_func)(session, type);
368 SHOW_TYPE show_type() {
return SHOW_CHAR; }
369 unsigned char *value_ptr(
Session *, sql_var_t)
370 {
return (
unsigned char*) value; }
371 bool check_update_type(Item_result type)
373 return type != STRING_RESULT;
375 bool check_default(sql_var_t)
383 const boost::filesystem::path &value;
386 const boost::filesystem::path& value_arg) :
391 inline void set(
char *)
402 SHOW_TYPE show_type() {
return SHOW_CHAR; }
403 unsigned char *value_ptr(
Session *, sql_var_t)
405 return (
unsigned char*)(value.file_string().c_str());
407 bool check_update_type(Item_result)
411 bool check_default(sql_var_t) {
return true; }
412 bool is_readonly()
const {
return true; }
427 default_value(value_arg.get())
432 sys_after_update_func after_update_func_arg) :
433 sys_var(name_arg, after_update_func_arg),
435 default_value(value_arg.get())
440 sys_check_func check_func_arg) :
441 sys_var(name_arg, NULL, check_func_arg),
443 default_value(value_arg.get())
447 bool is_readonly()
const
452 SHOW_TYPE show_type() {
return SHOW_INT; }
456 value= uint32_t(var->getInteger());
460 bool check_default(sql_var_t)
465 void set_default(
Session *, sql_var_t)
467 value= default_value;
470 unsigned char *value_ptr(
Session *, sql_var_t)
472 basic_value= value.get();
473 return (
unsigned char*)&basic_value;
480 return SHOW_LONGLONG;
484 inline SHOW_TYPE sys_var_constrained_value<int64_t>::show_type()
486 return SHOW_LONGLONG;
490 inline SHOW_TYPE sys_var_constrained_value<uint32_t>::show_type()
496 inline SHOW_TYPE sys_var_constrained_value<int32_t>::show_type()
502 inline bool sys_var_constrained_value<uint64_t>::update(Session *, set_var *var)
504 value= var->getInteger();
509 inline bool sys_var_constrained_value<uint32_t>::update(Session *, set_var *var)
511 value= uint32_t(var->getInteger());
527 T default_value_arg) :
532 bool is_readonly()
const
542 sys_check_func check_func;
543 sys_update_func update_func;
544 sys_set_default_func set_default_func;
547 std::string &value_arg,
548 sys_check_func check_func_arg= NULL,
549 sys_update_func update_func_arg= NULL) :
552 check_func(check_func_arg),
553 update_func(update_func_arg)
556 inline void set(
char *val_in)
561 void set_check_func(sys_check_func check_func_arg= NULL)
563 check_func= check_func_arg;
566 void set_update_func(sys_update_func update_func_arg= NULL)
568 update_func= update_func_arg;
575 if (update_func != NULL)
577 return (*update_func)(session, var);
581 SHOW_TYPE show_type() {
return SHOW_CHAR; }
582 unsigned char *value_ptr(
Session *, sql_var_t)
584 return (
unsigned char*)(value.c_str());
586 bool check_update_type(Item_result type)
588 return type != STRING_RESULT;
590 bool check_default(sql_var_t)
592 bool is_readonly()
const {
return false; }
598 const std::string &value;
601 const std::string& value_arg) :
606 inline void set(
char *)
617 SHOW_TYPE show_type() {
return SHOW_CHAR; }
618 unsigned char *value_ptr(
Session *, sql_var_t)
620 return (
unsigned char*)(value.c_str());
622 bool check_update_type(Item_result)
626 bool check_default(sql_var_t) {
return true; }
627 bool is_readonly()
const {
return true; }
633 const std::string value;
636 const std::string& value_arg) :
641 inline void set(
char *)
652 SHOW_TYPE show_type() {
return SHOW_CHAR; }
653 unsigned char *value_ptr(
Session *, sql_var_t)
655 return (
unsigned char*)(value.c_str());
657 bool check_update_type(Item_result)
661 bool check_default(sql_var_t) {
return true; }
662 bool is_readonly()
const {
return true; }
670 const char *value_arg)
671 :
sys_var(name_arg), value((
char*) value_arg)
673 inline void set (
char *new_value)
685 SHOW_TYPE show_type() {
return SHOW_CHAR; }
686 unsigned char *value_ptr(
Session *, sql_var_t)
688 return (
unsigned char*) value;
690 bool check_update_type(Item_result)
694 bool check_default(sql_var_t)
696 bool is_readonly()
const {
return 1; }
705 :
sys_var(name_arg),value(value_arg)
715 SHOW_TYPE show_type() {
return SHOW_CHAR; }
716 unsigned char *value_ptr(
Session *, sql_var_t)
718 return (
unsigned char*) *value;
720 bool check_update_type(Item_result)
724 bool check_default(sql_var_t)
726 bool is_readonly(
void)
const {
return 1; }
734 sys_after_update_func func= NULL)
737 bool check_type(sql_var_t)
739 bool check_default(sql_var_t type)
741 return type == OPT_GLOBAL && !option_limits;
747 sys_check_func check_func;
752 sys_check_func c_func= NULL,
753 sys_after_update_func au_func= NULL)
759 void set_default(
Session *session, sql_var_t type);
760 SHOW_TYPE show_type() {
return SHOW_INT; }
761 unsigned char *value_ptr(
Session *session, sql_var_t type);
775 sys_after_update_func func)
779 void set_default(
Session *session, sql_var_t type);
780 SHOW_TYPE show_type() {
return SHOW_HA_ROWS; }
781 unsigned char *value_ptr(
Session *session, sql_var_t type);
787 sys_check_func check_func;
792 const char *name_arg,
794 sys_after_update_func au_func= NULL,
795 sys_check_func c_func= NULL)
802 sys_after_update_func func,
803 bool only_global_arg,
804 sys_check_func cfunc= NULL)
808 only_global(only_global_arg)
811 void set_default(
Session *session, sql_var_t type);
812 SHOW_TYPE show_type() {
return SHOW_LONGLONG; }
813 unsigned char *value_ptr(
Session *session, sql_var_t type);
815 bool check_default(sql_var_t type)
817 return type == OPT_GLOBAL && !option_limits;
819 bool check_type(sql_var_t type)
821 return (only_global && type != OPT_GLOBAL);
827 sys_check_func check_func;
833 sys_after_update_func au_func= NULL,
834 sys_check_func c_func= NULL)
841 sys_after_update_func func,
842 bool only_global_arg,
843 sys_check_func cfunc= NULL)
847 only_global(only_global_arg)
850 void set_default(
Session *session, sql_var_t type);
851 SHOW_TYPE show_type() {
return SHOW_SIZE; }
852 unsigned char *value_ptr(
Session *session, sql_var_t type);
854 bool check_default(sql_var_t type)
856 return type == OPT_GLOBAL && !option_limits;
858 bool check_type(sql_var_t type)
860 return (only_global && type != OPT_GLOBAL);
873 sys_after_update_func func)
877 void set_default(
Session *session, sql_var_t type);
878 SHOW_TYPE show_type() {
return SHOW_MY_BOOL; }
879 unsigned char *value_ptr(
Session *session, sql_var_t type);
881 bool check_update_type(Item_result)
891 sys_check_func check_func;
895 sys_after_update_func func= NULL,
896 sys_check_func check_f= NULL)
898 enum_names(typelib), check_func(check_f)
904 ret= (*check_func)(session, var);
905 return ret ? ret : check_enum(session, var, enum_names);
908 void set_default(
Session *session, sql_var_t type);
909 SHOW_TYPE show_type() {
return SHOW_CHAR; }
910 unsigned char *value_ptr(
Session *session, sql_var_t type);
911 bool check_update_type(Item_result)
925 SHOW_TYPE show_type() {
return SHOW_CHAR; }
926 bool check_update_type(Item_result type)
928 return type != STRING_RESULT;
930 void set_default(
Session *session, sql_var_t type);
932 unsigned char *value_ptr(
Session *session, sql_var_t type);
937 sys_check_func check_func;
938 sys_update_func update_func;
943 sys_check_func c_func, sys_update_func u_func,
944 uint64_t bit,
bool reverse_arg=0)
946 update_func(u_func), bit_flag(bit), reverse(reverse_arg)
950 bool check_update_type(Item_result)
952 bool check_type(sql_var_t type) {
return type == OPT_GLOBAL; }
953 SHOW_TYPE show_type() {
return SHOW_MY_BOOL; }
954 unsigned char *value_ptr(
Session *session, sql_var_t type);
966 void set_default(
Session *session, sql_var_t type);
967 bool check_type(sql_var_t type) {
return type == OPT_GLOBAL; }
968 bool check_default(sql_var_t)
970 SHOW_TYPE show_type(
void) {
return SHOW_LONG; }
971 unsigned char *value_ptr(
Session *session, sql_var_t type);
982 bool check_type(sql_var_t type) {
return type == OPT_GLOBAL; }
983 SHOW_TYPE show_type() {
return SHOW_LONGLONG; }
984 unsigned char *value_ptr(
Session *session, sql_var_t type);
994 SHOW_TYPE show_type() {
return SHOW_CHAR; }
995 bool check_update_type(Item_result type)
997 return ((type != STRING_RESULT) && (type != INT_RESULT));
999 bool check_default(sql_var_t) {
return 0; }
1000 virtual void set_default(
Session *session, sql_var_t type)= 0;
1012 offset(offset_arg), global_default(global_default_arg)
1017 void set_default(
Session *session, sql_var_t type);
1018 unsigned char *value_ptr(
Session *session, sql_var_t type);
1027 SHOW_TYPE show_type_value;
1028 sys_value_ptr_func value_ptr_func;
1030 SHOW_TYPE show_type_arg,
1031 sys_value_ptr_func value_ptr_func_arg)
1032 :
sys_var(name_arg), var_type(type),
1033 show_type_value(show_type_arg), value_ptr_func(value_ptr_func_arg)
1037 bool check_default(sql_var_t)
1039 bool check_type(sql_var_t type) {
return type != var_type; }
1040 bool check_update_type(Item_result)
1042 unsigned char *value_ptr(
Session *session, sql_var_t)
1044 return (*value_ptr_func)(session);
1046 SHOW_TYPE show_type(
void) {
return show_type_value; }
1047 bool is_readonly(
void)
const {
return 1; }
1060 void set_default(
Session *session, sql_var_t type);
1061 SHOW_TYPE show_type() {
return SHOW_DOUBLE; }
1062 bool check_update_type(Item_result type)
1064 return (type != INT_RESULT && type != REAL_RESULT && type != DECIMAL_RESULT);
1076 SHOW_TYPE show_type() {
return SHOW_CHAR; }
1077 bool check_update_type(Item_result type)
1079 return ((type != STRING_RESULT) && (type != INT_RESULT));
1081 bool check_default(sql_var_t)
1084 unsigned char *value_ptr(
Session *session, sql_var_t type);
1085 virtual void set_default(
Session *session, sql_var_t type);
1101 void add_sys_var_to_list(
sys_var*);
1104 extern sys_var_str sys_var_general_log_path, sys_var_slow_log_path;