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>
27
#include "drizzled/function/func.h"
28
#include "drizzled/function/set_user_var.h"
29
#include "drizzled/item/string.h"
30
#include "drizzled/item/field.h"
32
#include "drizzled/constrained_value.h"
33
#include "drizzled/set_var.h"
34
#include "drizzled/show_type.h"
35
#include "drizzled/typelib.h"
36
#include "drizzled/item_result.h"
37
#include "drizzled/base.h"
38
#include "drizzled/global_charset_info.h"
39
#include "drizzled/lex_string.h"
45
class sys_var_pluginvar; /* opaque */
41
47
typedef struct my_locale_st MY_LOCALE;
42
typedef struct st_typelib TYPELIB;
49
extern TYPELIB bool_typelib;
44
51
typedef int (*sys_check_func)(Session *, set_var *);
45
52
typedef bool (*sys_update_func)(Session *, set_var *);
56
63
extern const char *in_left_expr_name;
57
64
extern const char *in_additional_cond;
58
65
extern const char *in_having_cond;
66
extern char glob_hostname[FN_REFLEN];
59
67
extern boost::filesystem::path basedir;
60
68
extern boost::filesystem::path pid_file;
61
69
extern boost::filesystem::path secure_file_priv;
70
extern char system_time_zone[30];
62
71
extern char *opt_tc_log_file;
63
72
extern uint64_t session_startup_options;
64
73
extern uint32_t global_thread_id;
65
74
extern uint64_t table_cache_size;
75
extern uint64_t max_connect_errors;
66
76
extern back_log_constraints back_log;
67
77
extern uint32_t ha_open_options;
68
78
extern char *drizzled_bind_host;
71
81
extern uint32_t volatile thread_running;
72
82
extern uint32_t volatile global_read_lock;
73
83
extern bool opt_readonly;
84
extern char *default_tz_name;
74
85
extern const char *opt_scheduler;
75
extern size_t transaction_message_threshold;
77
87
uint64_t fix_unsigned(Session *, uint64_t, const struct option *);
79
const std::string &getServerHostname();
80
89
int sys_var_init();
83
92
* A class which represents a variable, either global or
86
class DRIZZLED_API sys_var
89
98
std::string name; /**< The name of the variable */
90
sys_check_func check_func;
91
99
sys_after_update_func after_update; /**< Function pointer triggered after the variable's value is updated */
92
100
struct option *option_limits; /**< Updated by by sys_var_init() */
93
101
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)
103
sys_var(const std::string name_arg, sys_after_update_func func= NULL)
100
check_func(check_func_arg),
101
106
after_update(func),
103
107
m_allow_empty_value(true)
105
109
virtual ~sys_var() {}
222
230
{ 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
234
class sys_var_uint64_t_ptr :public sys_var
250
const uint64_t default_value;
251
bool have_default_value;
253
sys_var_uint64_t_ptr(const char *name_arg, uint64_t *value_ptr_arg) :
255
value(value_ptr_arg),
257
have_default_value(false)
260
sys_var_uint64_t_ptr(const char *name_arg,
261
uint64_t *value_ptr_arg,
262
const uint64_t default_value_in) :
264
value(value_ptr_arg),
265
default_value(default_value_in),
266
have_default_value(true)
269
sys_var_uint64_t_ptr(const char *name_arg,
270
uint64_t *value_ptr_arg,
271
sys_after_update_func func) :
272
sys_var(name_arg,func),
273
value(value_ptr_arg),
275
have_default_value(false)
278
sys_var_uint64_t_ptr(const char *name_arg,
279
uint64_t *value_ptr_arg,
280
sys_after_update_func func,
281
const uint64_t default_value_in) :
282
sys_var(name_arg,func),
283
value(value_ptr_arg),
284
default_value(default_value_in),
285
have_default_value(true)
238
sys_var_uint64_t_ptr(const char *name_arg, uint64_t *value_ptr_arg)
239
:sys_var(name_arg),value(value_ptr_arg)
241
sys_var_uint64_t_ptr(const char *name_arg, uint64_t *value_ptr_arg,
242
sys_after_update_func func)
243
:sys_var(name_arg,func), value(value_ptr_arg)
288
245
bool update(Session *session, set_var *var);
289
246
void set_default(Session *session, sql_var_t type);
290
virtual bool check_default(sql_var_t)
292
return (not have_default_value) && option_limits == 0;
294
247
SHOW_TYPE show_type() { return SHOW_LONGLONG; }
295
248
unsigned char *value_ptr(Session *, sql_var_t,
296
249
const LEX_STRING *)
297
250
{ return (unsigned char*) value; }
300
class DRIZZLED_API sys_var_size_t_ptr :public sys_var
253
class sys_var_size_t_ptr :public sys_var
315
268
{ 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
271
class sys_var_bool_ptr :public sys_var
333
sys_var_bool_ptr(const std::string &name_arg, bool *value_arg,
334
sys_after_update_func func= NULL) :
335
sys_var(name_arg, func), default_value(*value_arg), value(value_arg)
337
bool check(Session *session, set_var *var);
338
virtual bool check_default(sql_var_t)
275
sys_var_bool_ptr(const char *name_arg, bool *value_arg)
276
:sys_var(name_arg),value(value_arg)
278
bool check(Session *session, set_var *var)
280
return check_enum(session, var, &bool_typelib);
342
282
bool update(Session *session, set_var *var);
343
283
void set_default(Session *session, sql_var_t type);
362
class DRIZZLED_API sys_var_str :public sys_var
302
class sys_var_str :public sys_var
365
305
char *value; // Pointer to allocated string
366
306
uint32_t value_length;
307
sys_check_func check_func;
367
308
sys_update_func update_func;
368
309
sys_set_default_func set_default_func;
369
310
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)
311
sys_check_func check_func_arg,
312
sys_update_func update_func_arg,
313
sys_set_default_func set_default_func_arg,
315
:sys_var(name_arg), value(value_arg), check_func(check_func_arg),
316
update_func(update_func_arg),set_default_func(set_default_func_arg)
379
318
bool check(Session *session, set_var *var);
380
319
bool update(Session *session, set_var *var)
439
378
constrained_value<T> &value;
381
bool have_default_value;
443
383
sys_var_constrained_value(const char *name_arg,
444
384
constrained_value<T> &value_arg) :
445
385
sys_var(name_arg),
446
386
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())
388
have_default_value(false)
391
sys_var_constrained_value(const char *name_arg,
392
constrained_value<T> &value_arg,
393
T default_value_arg) :
396
default_value(default_value_arg),
397
have_default_value(true)
522
468
inline bool sys_var_constrained_value<uint64_t>::update(Session *, set_var *var)
524
value= var->getInteger();
470
value= var->save_result.uint64_t_value;
529
475
inline bool sys_var_constrained_value<uint32_t>::update(Session *, set_var *var)
531
value= uint32_t(var->getInteger());
477
value= var->save_result.uint32_t_value;
536
class sys_var_constrained_value_readonly :
537
public sys_var_constrained_value<T>
540
sys_var_constrained_value_readonly(const char *name_arg,
541
constrained_value<T> &value_arg) :
542
sys_var_constrained_value<T>(name_arg, value_arg)
545
sys_var_constrained_value_readonly(const char *name_arg,
546
constrained_value<T> &value_arg,
547
T default_value_arg) :
548
sys_var_constrained_value<T>(name_arg, value_arg, default_value_arg)
552
bool is_readonly() const
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 :
482
inline unsigned char *sys_var_constrained_value<const uint64_t>::value_ptr(Session *, sql_var_t, const LEX_STRING *)
484
return (unsigned char*)&basic_value;
488
inline unsigned char *sys_var_constrained_value<const uint32_t>::value_ptr(Session *, sql_var_t, const LEX_STRING *)
490
return (unsigned char*)&basic_value;
493
class sys_var_const_string :
618
496
const std::string &value;
902
780
SHOW_TYPE show_type() { return SHOW_MY_BOOL; }
903
781
unsigned char *value_ptr(Session *session, sql_var_t type,
904
782
const LEX_STRING *base);
905
bool check(Session *session, set_var *var);
783
bool check(Session *session, set_var *var)
785
return check_enum(session, var, &bool_typelib);
906
787
bool check_update_type(Item_result)
911
class DRIZZLED_API sys_var_session_enum :public sys_var_session
792
class sys_var_session_enum :public sys_var_session
914
795
uint32_t drizzle_system_variables::*offset;
1018
class DRIZZLED_API sys_var_collation :public sys_var_session
900
class sys_var_collation :public sys_var_session
1021
903
sys_var_collation(const char *name_arg)
1022
904
:sys_var_session(name_arg, NULL)
906
bool check(Session *session, set_var *var);
1024
907
SHOW_TYPE show_type() { return SHOW_CHAR; }
1025
908
bool check_update_type(Item_result type)
1079
962
bool is_readonly(void) const { return 1; }
1082
class DRIZZLED_API sys_var_microseconds :public sys_var_session
966
class sys_var_session_time_zone :public sys_var_session
969
sys_var_session_time_zone(const char *name_arg)
970
:sys_var_session(name_arg, NULL)
974
bool check(Session *session, set_var *var);
975
SHOW_TYPE show_type() { return SHOW_CHAR; }
976
bool check_update_type(Item_result type)
978
return type != STRING_RESULT; /* Only accept strings */
980
bool check_default(sql_var_t)
982
bool update(Session *session, set_var *var);
983
unsigned char *value_ptr(Session *session, sql_var_t type,
984
const LEX_STRING *base);
985
virtual void set_default(Session *session, sql_var_t type);
989
class sys_var_microseconds :public sys_var_session
1084
991
uint64_t drizzle_system_variables::*offset;
1134
1042
drizzle_show_var* enumerate_sys_vars(Session *session);
1043
void drizzle_add_plugin_sysvar(sys_var_pluginvar *var);
1044
void drizzle_del_plugin_sysvar();
1135
1045
void add_sys_var_to_list(sys_var *var, struct option *long_options);
1136
1046
void add_sys_var_to_list(sys_var *var);
1137
sys_var *find_sys_var(const std::string &name);
1047
sys_var *find_sys_var(Session *session, const char *str, uint32_t length=0);
1048
bool not_all_support_one_shot(List<set_var_base> *var_list);
1049
extern sys_var_session_time_zone sys_time_zone;
1138
1050
extern sys_var_session_bit sys_autocommit;
1139
1051
const CHARSET_INFO *get_old_charset_by_name(const char *old_name);