~drizzle-trunk/drizzle/development

390.1.2 by Monty Taylor
Fixed copyright headers in drizzled/
1
/* -*- mode: c++; c-basic-offset: 2; indent-tabs-mode: nil; -*-
2
 *  vim:expandtab:shiftwidth=2:tabstop=2:smarttab:
3
 *
4
 *  Copyright (C) 2008 Sun Microsystems
5
 *
6
 *  This program is free software; you can redistribute it and/or modify
7
 *  it under the terms of the GNU General Public License as published by
8
 *  the Free Software Foundation; version 2 of the License.
9
 *
10
 *  This program is distributed in the hope that it will be useful,
11
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
12
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13
 *  GNU General Public License for more details.
14
 *
15
 *  You should have received a copy of the GNU General Public License
16
 *  along with this program; if not, write to the Free Software
17
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
18
 */
1 by brian
clean slate
19
1878.3.1 by Monty Taylor
Split set_var.* into sys_var.* and set_var.*
20
#ifndef DRIZZLED_SYS_VAR_H
21
#define DRIZZLED_SYS_VAR_H
584.1.15 by Monty Taylor
The mega-patch from hell. Renamed sql_class to session (since that's what it is) and removed it and field and table from common_includes.
22
656.1.34 by Monty Taylor
Got closer...
23
#include <string>
1813.2.1 by Monty Taylor
Migrated --basedir to feed a path.
24
#include <boost/filesystem.hpp>
656.1.34 by Monty Taylor
Got closer...
25
1863.1.4 by Monty Taylor
Made basic type for set_var_constrained_value.
26
#include "drizzled/constrained_value.h"
1878.3.1 by Monty Taylor
Split set_var.* into sys_var.* and set_var.*
27
#include "drizzled/set_var.h"
1878.3.2 by Monty Taylor
Split out show_type into its own header and made sys_var work through
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"
1122.2.13 by Monty Taylor
Header cleanup.
34
1280.1.10 by Monty Taylor
Put everything in drizzled into drizzled namespace.
35
namespace drizzled
36
{
1122.2.13 by Monty Taylor
Header cleanup.
37
1 by brian
clean slate
38
class sys_var;
39
class sys_var_pluginvar; /* opaque */
584.1.15 by Monty Taylor
The mega-patch from hell. Renamed sql_class to session (since that's what it is) and removed it and field and table from common_includes.
40
class Time_zone;
1 by brian
clean slate
41
typedef struct my_locale_st MY_LOCALE;
42
1055.2.18 by Jay Pipes
Removes dead variables in set_var.h
43
extern TYPELIB bool_typelib;
1 by brian
clean slate
44
520.1.21 by Brian Aker
THD -> Session rename
45
typedef int (*sys_check_func)(Session *,  set_var *);
46
typedef bool (*sys_update_func)(Session *, set_var *);
1273.13.24 by Brian Aker
Updating style, simplified code.
47
typedef void (*sys_after_update_func)(Session *, sql_var_t);
48
typedef void (*sys_set_default_func)(Session *, sql_var_t);
520.1.22 by Brian Aker
Second pass of thd cleanup
49
typedef unsigned char *(*sys_value_ptr_func)(Session *session);
1 by brian
clean slate
50
1022.2.37 by Monty Taylor
Moved more tolower calls to setup rather than during runtime.
51
static const std::vector<std::string> empty_aliases;
1878.3.2 by Monty Taylor
Split out show_type into its own header and made sys_var work through
52
extern struct drizzle_system_variables max_system_variables;
1241.9.33 by Monty Taylor
Moved most of the global vars to set_var where they belong.
53
extern size_t table_def_size;
54
1556.1.1 by Brian Aker
Updates for moving temporary directory.
55
extern std::string drizzle_tmpdir;
1241.9.33 by Monty Taylor
Moved most of the global vars to set_var where they belong.
56
extern const char *first_keyword;
57
extern const char *in_left_expr_name;
58
extern const char *in_additional_cond;
59
extern const char *in_having_cond;
60
extern char glob_hostname[FN_REFLEN];
1813.2.1 by Monty Taylor
Migrated --basedir to feed a path.
61
extern boost::filesystem::path basedir;
1813.2.2 by Monty Taylor
Replaced pid-file with fs::path.
62
extern boost::filesystem::path pid_file;
1813.2.6 by Monty Taylor
Made secure_file_priv be an fs::path from the beginning.
63
extern boost::filesystem::path secure_file_priv;
1241.9.33 by Monty Taylor
Moved most of the global vars to set_var where they belong.
64
extern char system_time_zone[30];
65
extern char *opt_tc_log_file;
66
extern uint64_t session_startup_options;
67
extern uint32_t global_thread_id;
68
extern uint64_t table_cache_size;
69
extern uint64_t max_connect_errors;
1863.1.7 by Monty Taylor
Add a constrained_value class which allows us to set compile-time
70
extern back_log_constraints back_log;
1241.9.33 by Monty Taylor
Moved most of the global vars to set_var where they belong.
71
extern uint32_t ha_open_options;
72
extern char *drizzled_bind_host;
73
extern uint32_t dropping_tables;
74
extern bool opt_endinfo;
75
extern uint32_t volatile thread_running;
76
extern uint32_t volatile global_read_lock;
77
extern bool opt_readonly;
78
extern char *default_tz_name;
1794.3.2 by Andrew Hutchings
Re-enabled scheduler option.
79
extern const char *opt_scheduler;
1022.2.37 by Monty Taylor
Moved more tolower calls to setup rather than during runtime.
80
1410.3.4 by Djellel E. Difallah
update references to old my_'s
81
uint64_t fix_unsigned(Session *, uint64_t, const struct option *);
1280.1.10 by Monty Taylor
Put everything in drizzled into drizzled namespace.
82
1878.3.1 by Monty Taylor
Split set_var.* into sys_var.* and set_var.*
83
int sys_var_init();
1863.1.4 by Monty Taylor
Made basic type for set_var_constrained_value.
84
1055.2.20 by Jay Pipes
Refactors sys_var class -- doxygenates and documents the class members and functions. Protects all member variables and adds public getters/setters.
85
/**
86
 * A class which represents a variable, either global or 
87
 * session-local.
88
 */
1 by brian
clean slate
89
class sys_var
90
{
1055.2.20 by Jay Pipes
Refactors sys_var class -- doxygenates and documents the class members and functions. Protects all member variables and adds public getters/setters.
91
protected:
1857.3.1 by Monty Taylor
Added support for registering regular sys_var instances via module::Context.
92
  std::string name; /**< The name of the variable */
1055.2.20 by Jay Pipes
Refactors sys_var class -- doxygenates and documents the class members and functions. Protects all member variables and adds public getters/setters.
93
  sys_after_update_func after_update; /**< Function pointer triggered after the variable's value is updated */
1878.3.1 by Monty Taylor
Split set_var.* into sys_var.* and set_var.*
94
  struct option *option_limits; /**< Updated by by sys_var_init() */
1055.2.20 by Jay Pipes
Refactors sys_var class -- doxygenates and documents the class members and functions. Protects all member variables and adds public getters/setters.
95
  bool m_allow_empty_value; /**< Does variable allow an empty value? */
96
public:
1897.4.10 by Monty Taylor
Converted transaction_log.
97
  sys_var(const std::string &name_arg, sys_after_update_func func= NULL)
1055.2.20 by Jay Pipes
Refactors sys_var class -- doxygenates and documents the class members and functions. Protects all member variables and adds public getters/setters.
98
    :
99
    name(name_arg),
100
    after_update(func),
1897.4.14 by Monty Taylor
Update to support default values and properly throw warnings on value
101
    option_limits(NULL),
51.1.46 by Jay Pipes
Removed/replaced DBUG symbols and standardized TRUE/FALSE
102
    m_allow_empty_value(true)
1 by brian
clean slate
103
  {}
104
  virtual ~sys_var() {}
1022.2.37 by Monty Taylor
Moved more tolower calls to setup rather than during runtime.
105
1857.3.1 by Monty Taylor
Added support for registering regular sys_var instances via module::Context.
106
  void setName(const std::string &name_in)
107
  {
108
    name= name_in;
109
  }
110
1055.2.20 by Jay Pipes
Refactors sys_var class -- doxygenates and documents the class members and functions. Protects all member variables and adds public getters/setters.
111
  /** 
112
   * Returns the name of the variable.
113
   *
114
   * @note 
115
   *
116
   * So that we can exist in a Registry. We really need to formalize that 
117
   */
118
  inline const std::string &getName() const
119
  {
120
    return name;
121
  }
122
  /**
123
   * Returns a vector of strings representing aliases
124
   * for this variable's name.
125
   */
126
  const std::vector<std::string>& getAliases() const
127
  {
128
    return empty_aliases;
129
  }
130
  /**
131
   * Returns a pointer to the variable's option limits
132
   */
1410.3.4 by Djellel E. Difallah
update references to old my_'s
133
  inline struct option *getOptionLimits() const
1055.2.20 by Jay Pipes
Refactors sys_var class -- doxygenates and documents the class members and functions. Protects all member variables and adds public getters/setters.
134
  {
135
    return option_limits;
136
  }
137
  /**
138
   * Sets the pointer to the variable's option limits
139
   *
1410.3.4 by Djellel E. Difallah
update references to old my_'s
140
   * @param Pointer to the option limits option variable
1055.2.20 by Jay Pipes
Refactors sys_var class -- doxygenates and documents the class members and functions. Protects all member variables and adds public getters/setters.
141
   */
1410.3.4 by Djellel E. Difallah
update references to old my_'s
142
  inline void setOptionLimits(struct option *in_option_limits)
1055.2.20 by Jay Pipes
Refactors sys_var class -- doxygenates and documents the class members and functions. Protects all member variables and adds public getters/setters.
143
  {
144
    option_limits= in_option_limits;
145
  }
146
  /** 
147
   * Returns the function pointer for after update trigger, or NULL if none.
148
   */
149
  inline sys_after_update_func getAfterUpdateTrigger() const
150
  {
151
    return after_update;
152
  }
520.1.22 by Brian Aker
Second pass of thd cleanup
153
  virtual bool check(Session *session, set_var *var);
154
  bool check_enum(Session *session, set_var *var, const TYPELIB *enum_names);
155
  virtual bool update(Session *session, set_var *var)=0;
1273.13.24 by Brian Aker
Updating style, simplified code.
156
  virtual void set_default(Session *, sql_var_t)
77.1.7 by Monty Taylor
Heap builds clean.
157
  {}
1055.2.20 by Jay Pipes
Refactors sys_var class -- doxygenates and documents the class members and functions. Protects all member variables and adds public getters/setters.
158
  virtual SHOW_TYPE show_type()
159
  {
160
    return SHOW_UNDEF;
161
  }
1273.13.24 by Brian Aker
Updating style, simplified code.
162
  virtual unsigned char *value_ptr(Session *, sql_var_t, const LEX_STRING *)
1055.2.20 by Jay Pipes
Refactors sys_var class -- doxygenates and documents the class members and functions. Protects all member variables and adds public getters/setters.
163
  {
164
    return 0;
165
  }
1273.13.24 by Brian Aker
Updating style, simplified code.
166
  virtual bool check_type(sql_var_t type)
1055.2.20 by Jay Pipes
Refactors sys_var class -- doxygenates and documents the class members and functions. Protects all member variables and adds public getters/setters.
167
  {
168
    return type != OPT_GLOBAL;
169
  }		/* Error if not GLOBAL */
1 by brian
clean slate
170
  virtual bool check_update_type(Item_result type)
1055.2.20 by Jay Pipes
Refactors sys_var class -- doxygenates and documents the class members and functions. Protects all member variables and adds public getters/setters.
171
  {
172
    return type != INT_RESULT;
173
  }		/* Assume INT */
1273.13.24 by Brian Aker
Updating style, simplified code.
174
  virtual bool check_default(sql_var_t)
1055.2.20 by Jay Pipes
Refactors sys_var class -- doxygenates and documents the class members and functions. Protects all member variables and adds public getters/setters.
175
  {
176
    return option_limits == 0;
177
  }
1273.13.24 by Brian Aker
Updating style, simplified code.
178
  Item *item(Session *session, sql_var_t type, const LEX_STRING *base);
1055.2.20 by Jay Pipes
Refactors sys_var class -- doxygenates and documents the class members and functions. Protects all member variables and adds public getters/setters.
179
  virtual bool is_readonly() const
180
  {
181
    return 0;
182
  }
183
  virtual sys_var_pluginvar *cast_pluginvar()
184
  {
185
    return 0;
186
  }
1 by brian
clean slate
187
};
188
1055.2.20 by Jay Pipes
Refactors sys_var class -- doxygenates and documents the class members and functions. Protects all member variables and adds public getters/setters.
189
/**
190
 * A base class for all variables that require its access to
191
 * be guarded with a mutex.
192
 */
1 by brian
clean slate
193
class sys_var_global: public sys_var
194
{
195
protected:
196
  pthread_mutex_t *guard;
197
public:
1055.2.20 by Jay Pipes
Refactors sys_var class -- doxygenates and documents the class members and functions. Protects all member variables and adds public getters/setters.
198
  sys_var_global(const char *name_arg,
199
                 sys_after_update_func after_update_arg,
1 by brian
clean slate
200
                 pthread_mutex_t *guard_arg)
1055.2.20 by Jay Pipes
Refactors sys_var class -- doxygenates and documents the class members and functions. Protects all member variables and adds public getters/setters.
201
    :
202
      sys_var(name_arg, after_update_arg), 
203
      guard(guard_arg) 
204
  {}
1 by brian
clean slate
205
};
206
520.4.14 by Monty Taylor
Removed korr.h and tztime.h from common_includes. Also removed the HAVE_DTRACE block and stuck it in autoconf.
207
class sys_var_uint32_t_ptr :public sys_var
208
{
209
  uint32_t *value;
210
public:
1851.1.1 by Monty Taylor
Removed sys_var_chain.
211
  sys_var_uint32_t_ptr(const char *name_arg,
520.4.14 by Monty Taylor
Removed korr.h and tztime.h from common_includes. Also removed the HAVE_DTRACE block and stuck it in autoconf.
212
                       uint32_t *value_ptr_arg)
213
    :sys_var(name_arg),value(value_ptr_arg)
1851.1.1 by Monty Taylor
Removed sys_var_chain.
214
  {  }
215
  sys_var_uint32_t_ptr(const char *name_arg,
520.4.14 by Monty Taylor
Removed korr.h and tztime.h from common_includes. Also removed the HAVE_DTRACE block and stuck it in autoconf.
216
                       uint32_t *value_ptr_arg,
217
                       sys_after_update_func func)
218
    :sys_var(name_arg,func), value(value_ptr_arg)
1851.1.1 by Monty Taylor
Removed sys_var_chain.
219
  {  }
910.4.10 by Stewart Smith
fix system variables for correct endian architectures.
220
  bool check(Session *session, set_var *var);
520.4.14 by Monty Taylor
Removed korr.h and tztime.h from common_includes. Also removed the HAVE_DTRACE block and stuck it in autoconf.
221
  bool update(Session *session, set_var *var);
1273.13.24 by Brian Aker
Updating style, simplified code.
222
  void set_default(Session *session, sql_var_t type);
910.4.18 by Stewart Smith
fix alignment of variables (incl key cache). fixes SIGBUS on SPARC64
223
  SHOW_TYPE show_type() { return SHOW_INT; }
1273.13.24 by Brian Aker
Updating style, simplified code.
224
  unsigned char *value_ptr(Session *, sql_var_t, const LEX_STRING *)
520.4.14 by Monty Taylor
Removed korr.h and tztime.h from common_includes. Also removed the HAVE_DTRACE block and stuck it in autoconf.
225
  { return (unsigned char*) value; }
226
};
227
1964.2.9 by Monty Taylor
All protocol stuff except for the buffer_length. WTF?
228
class sys_var_uint32_t_ptr_readonly :
229
  public sys_var_uint32_t_ptr
230
{
231
public:
232
  sys_var_uint32_t_ptr_readonly(const char *name_arg,
233
                                uint32_t *value_ptr_arg) :
234
    sys_var_uint32_t_ptr(name_arg, value_ptr_arg)
235
  {}
236
237
  sys_var_uint32_t_ptr_readonly(const char *name_arg,
238
                                uint32_t *value_ptr_arg,
239
                                sys_after_update_func func) :
240
    sys_var_uint32_t_ptr(name_arg, value_ptr_arg, func)
241
  {}
242
243
  bool is_readonly() const
244
  {
245
    return true;
246
  }
247
};
248
520.4.14 by Monty Taylor
Removed korr.h and tztime.h from common_includes. Also removed the HAVE_DTRACE block and stuck it in autoconf.
249
151 by Brian Aker
Ulonglong to uint64_t
250
class sys_var_uint64_t_ptr :public sys_var
1 by brian
clean slate
251
{
151 by Brian Aker
Ulonglong to uint64_t
252
  uint64_t *value;
1897.4.14 by Monty Taylor
Update to support default values and properly throw warnings on value
253
  const uint64_t default_value;
254
  bool have_default_value;
10 by Brian Aker
Start of var cleanup (really.... looking at this code the entire thing needs
255
public:
1897.4.14 by Monty Taylor
Update to support default values and properly throw warnings on value
256
  sys_var_uint64_t_ptr(const char *name_arg, uint64_t *value_ptr_arg) :
257
    sys_var(name_arg),
258
    value(value_ptr_arg),
259
    default_value(0),
260
    have_default_value(false)
261
  {  }
262
263
  sys_var_uint64_t_ptr(const char *name_arg,
264
                       uint64_t *value_ptr_arg,
265
                       const uint64_t default_value_in) :
266
    sys_var(name_arg),
267
    value(value_ptr_arg),
268
    default_value(default_value_in),
269
    have_default_value(true)
270
  {  }
271
272
  sys_var_uint64_t_ptr(const char *name_arg,
273
                       uint64_t *value_ptr_arg,
274
                       sys_after_update_func func) :
275
    sys_var(name_arg,func),
276
    value(value_ptr_arg),
277
    default_value(0),
278
    have_default_value(false)
279
  {  }
280
281
  sys_var_uint64_t_ptr(const char *name_arg,
282
                       uint64_t *value_ptr_arg,
283
                       sys_after_update_func func,
284
                       const uint64_t default_value_in) :
285
    sys_var(name_arg,func),
286
    value(value_ptr_arg),
287
    default_value(default_value_in),
288
    have_default_value(true)
289
  {  }
290
520.1.22 by Brian Aker
Second pass of thd cleanup
291
  bool update(Session *session, set_var *var);
1273.13.24 by Brian Aker
Updating style, simplified code.
292
  void set_default(Session *session, sql_var_t type);
1897.4.14 by Monty Taylor
Update to support default values and properly throw warnings on value
293
  virtual bool check_default(sql_var_t)
294
  {
295
    return (not have_default_value) && option_limits == 0;
296
  }
1 by brian
clean slate
297
  SHOW_TYPE show_type() { return SHOW_LONGLONG; }
1273.13.24 by Brian Aker
Updating style, simplified code.
298
  unsigned char *value_ptr(Session *, sql_var_t,
779.3.10 by Monty Taylor
Turned on -Wshadow.
299
                           const LEX_STRING *)
481 by Brian Aker
Remove all of uchar.
300
  { return (unsigned char*) value; }
1 by brian
clean slate
301
};
302
629.4.1 by Monty Taylor
First step in support size_t sys_var stuff.
303
class sys_var_size_t_ptr :public sys_var
304
{
305
  size_t *value;
306
public:
1851.1.1 by Monty Taylor
Removed sys_var_chain.
307
  sys_var_size_t_ptr(const char *name_arg, size_t *value_ptr_arg)
629.4.1 by Monty Taylor
First step in support size_t sys_var stuff.
308
    :sys_var(name_arg),value(value_ptr_arg)
1851.1.1 by Monty Taylor
Removed sys_var_chain.
309
  {  }
310
  sys_var_size_t_ptr(const char *name_arg, size_t *value_ptr_arg,
629.4.1 by Monty Taylor
First step in support size_t sys_var stuff.
311
                     sys_after_update_func func)
312
    :sys_var(name_arg,func), value(value_ptr_arg)
1851.1.1 by Monty Taylor
Removed sys_var_chain.
313
  {  }
629.4.1 by Monty Taylor
First step in support size_t sys_var stuff.
314
  bool update(Session *session, set_var *var);
1273.13.24 by Brian Aker
Updating style, simplified code.
315
  void set_default(Session *session, sql_var_t type);
629.4.1 by Monty Taylor
First step in support size_t sys_var stuff.
316
  SHOW_TYPE show_type() { return SHOW_SIZE; }
1273.13.24 by Brian Aker
Updating style, simplified code.
317
  unsigned char *value_ptr(Session *, sql_var_t, const LEX_STRING *)
629.4.1 by Monty Taylor
First step in support size_t sys_var stuff.
318
  { return (unsigned char*) value; }
319
};
1 by brian
clean slate
320
321
class sys_var_bool_ptr :public sys_var
322
{
1964.2.16 by Monty Taylor
took care of innodb SessionVAR usage.
323
  bool default_value;
1 by brian
clean slate
324
public:
146 by Brian Aker
my_bool cleanup.
325
  bool *value;
1897.4.10 by Monty Taylor
Converted transaction_log.
326
  sys_var_bool_ptr(const std::string &name_arg, bool *value_arg,
327
                   sys_after_update_func func= NULL) :
1964.2.16 by Monty Taylor
took care of innodb SessionVAR usage.
328
    sys_var(name_arg, func), default_value(*value_arg), value(value_arg)
1897.4.10 by Monty Taylor
Converted transaction_log.
329
  { }
520.1.22 by Brian Aker
Second pass of thd cleanup
330
  bool check(Session *session, set_var *var)
146 by Brian Aker
my_bool cleanup.
331
  {
520.1.22 by Brian Aker
Second pass of thd cleanup
332
    return check_enum(session, var, &bool_typelib);
146 by Brian Aker
my_bool cleanup.
333
  }
1964.2.16 by Monty Taylor
took care of innodb SessionVAR usage.
334
  virtual bool check_default(sql_var_t)
335
  {
336
    return false;
337
  }
520.1.22 by Brian Aker
Second pass of thd cleanup
338
  bool update(Session *session, set_var *var);
1273.13.24 by Brian Aker
Updating style, simplified code.
339
  void set_default(Session *session, sql_var_t type);
146 by Brian Aker
my_bool cleanup.
340
  SHOW_TYPE show_type() { return SHOW_MY_BOOL; }
1273.13.24 by Brian Aker
Updating style, simplified code.
341
  unsigned char *value_ptr(Session *, sql_var_t, const LEX_STRING *)
481 by Brian Aker
Remove all of uchar.
342
  { return (unsigned char*) value; }
644 by Brian Aker
Clean up warnings for Solaris.
343
  bool check_update_type(Item_result)
146 by Brian Aker
my_bool cleanup.
344
  { return 0; }
345
};
346
1 by brian
clean slate
347
class sys_var_bool_ptr_readonly :public sys_var_bool_ptr
348
{
349
public:
1851.1.1 by Monty Taylor
Removed sys_var_chain.
350
  sys_var_bool_ptr_readonly(const char *name_arg,
147 by Brian Aker
More my_bool conversion. This time the set_var class.
351
                            bool *value_arg)
1851.1.1 by Monty Taylor
Removed sys_var_chain.
352
    :sys_var_bool_ptr(name_arg, value_arg)
1 by brian
clean slate
353
  {}
354
  bool is_readonly() const { return 1; }
355
};
356
357
358
class sys_var_str :public sys_var
359
{
360
public:
361
  char *value;					// Pointer to allocated string
482 by Brian Aker
Remove uint.
362
  uint32_t value_length;
1 by brian
clean slate
363
  sys_check_func check_func;
364
  sys_update_func update_func;
365
  sys_set_default_func set_default_func;
1851.1.1 by Monty Taylor
Removed sys_var_chain.
366
  sys_var_str(const char *name_arg,
1964.1.1 by Monty Taylor
Updated more sys_vars.
367
              sys_check_func check_func_arg,
368
              sys_update_func update_func_arg,
369
              sys_set_default_func set_default_func_arg,
1 by brian
clean slate
370
              char *value_arg)
371
    :sys_var(name_arg), value(value_arg), check_func(check_func_arg),
372
    update_func(update_func_arg),set_default_func(set_default_func_arg)
1851.1.1 by Monty Taylor
Removed sys_var_chain.
373
  {  }
520.1.22 by Brian Aker
Second pass of thd cleanup
374
  bool check(Session *session, set_var *var);
375
  bool update(Session *session, set_var *var)
1 by brian
clean slate
376
  {
520.1.22 by Brian Aker
Second pass of thd cleanup
377
    return (*update_func)(session, var);
1 by brian
clean slate
378
  }
1273.13.24 by Brian Aker
Updating style, simplified code.
379
  void set_default(Session *session, sql_var_t type)
1 by brian
clean slate
380
  {
520.1.22 by Brian Aker
Second pass of thd cleanup
381
    (*set_default_func)(session, type);
1 by brian
clean slate
382
  }
383
  SHOW_TYPE show_type() { return SHOW_CHAR; }
1273.13.24 by Brian Aker
Updating style, simplified code.
384
  unsigned char *value_ptr(Session *, sql_var_t, const LEX_STRING *)
481 by Brian Aker
Remove all of uchar.
385
  { return (unsigned char*) value; }
1 by brian
clean slate
386
  bool check_update_type(Item_result type)
387
  {
388
    return type != STRING_RESULT;		/* Only accept strings */
389
  }
1273.13.24 by Brian Aker
Updating style, simplified code.
390
  bool check_default(sql_var_t)
77.1.7 by Monty Taylor
Heap builds clean.
391
  { return 0; }
1 by brian
clean slate
392
};
393
394
1813.2.1 by Monty Taylor
Migrated --basedir to feed a path.
395
class sys_var_fs_path :
396
  public sys_var
397
{
398
  const boost::filesystem::path &value;
399
public:
1851.1.1 by Monty Taylor
Removed sys_var_chain.
400
  sys_var_fs_path(const char *name_arg,
1813.2.1 by Monty Taylor
Migrated --basedir to feed a path.
401
                  const boost::filesystem::path& value_arg) :
402
    sys_var(name_arg),
403
    value(value_arg)
1851.1.1 by Monty Taylor
Removed sys_var_chain.
404
  { }
1813.2.1 by Monty Taylor
Migrated --basedir to feed a path.
405
406
  inline void set(char *)
407
  { }
408
409
  bool check(Session *, set_var *)
410
  {
411
    return true;
412
  }
413
  bool update(Session *, set_var *)
414
  {
415
    return true;
416
  }
417
  SHOW_TYPE show_type() { return SHOW_CHAR; }
418
  unsigned char *value_ptr(Session *, sql_var_t, const LEX_STRING *)
419
  {
420
    return (unsigned char*)(value.file_string().c_str());
421
  }
422
  bool check_update_type(Item_result)
423
  {
424
    return true;
425
  }
426
  bool check_default(sql_var_t) { return true; }
427
  bool is_readonly() const { return true; }
428
};
429
1863.1.4 by Monty Taylor
Made basic type for set_var_constrained_value.
430
template<class T>
431
class sys_var_constrained_value :
432
  public sys_var
433
{
434
  constrained_value<T> &value;
435
  T basic_value;
436
  T default_value;
437
public:
438
  sys_var_constrained_value(const char *name_arg,
439
                            constrained_value<T> &value_arg) :
440
    sys_var(name_arg),
441
    value(value_arg),
1964.2.10 by Monty Taylor
Changed show SHOW_INT works ... man, trying to cast things as a method of data storage is lame.
442
    default_value(value_arg.get())
1863.1.4 by Monty Taylor
Made basic type for set_var_constrained_value.
443
  { }
444
445
  sys_var_constrained_value(const char *name_arg,
446
                            constrained_value<T> &value_arg,
1964.1.1 by Monty Taylor
Updated more sys_vars.
447
                            sys_after_update_func after_update_func_arg) :
448
    sys_var(name_arg, after_update_func_arg),
449
    value(value_arg),
1964.2.10 by Monty Taylor
Changed show SHOW_INT works ... man, trying to cast things as a method of data storage is lame.
450
    default_value(value_arg.get())
1964.1.1 by Monty Taylor
Updated more sys_vars.
451
  { }
452
1863.1.4 by Monty Taylor
Made basic type for set_var_constrained_value.
453
454
public:
455
  bool is_readonly() const
456
  {
457
    return false;
458
  }
459
460
  SHOW_TYPE show_type() { return SHOW_INT; }
461
462
  bool update(Session *, set_var *var)
463
  {
1897.4.17 by Monty Taylor
Reverted a debugging change that snuck in.
464
    value= var->save_result.uint32_t_value;
1863.1.4 by Monty Taylor
Made basic type for set_var_constrained_value.
465
    return false;
466
  }
467
468
  bool check_default(sql_var_t)
469
  {
1964.2.10 by Monty Taylor
Changed show SHOW_INT works ... man, trying to cast things as a method of data storage is lame.
470
    return false;
1863.1.4 by Monty Taylor
Made basic type for set_var_constrained_value.
471
  }
472
473
  void set_default(Session *, sql_var_t)
474
  {
1897.4.17 by Monty Taylor
Reverted a debugging change that snuck in.
475
    value= default_value;
1863.1.4 by Monty Taylor
Made basic type for set_var_constrained_value.
476
  }
477
478
  unsigned char *value_ptr(Session *, sql_var_t, const LEX_STRING *)
479
  {
1964.2.10 by Monty Taylor
Changed show SHOW_INT works ... man, trying to cast things as a method of data storage is lame.
480
    basic_value= value.get();
1863.1.4 by Monty Taylor
Made basic type for set_var_constrained_value.
481
    return (unsigned char*)&basic_value;
482
  }
483
};
484
485
template<>
1863.1.6 by Monty Taylor
Template specialization functions sort of want that inline keyword.
486
inline SHOW_TYPE sys_var_constrained_value<uint64_t>::show_type()
487
{
488
  return SHOW_LONGLONG;
489
}
490
491
template<>
492
inline SHOW_TYPE sys_var_constrained_value<int64_t>::show_type()
493
{
494
  return SHOW_LONGLONG;
495
}
496
497
template<>
498
inline SHOW_TYPE sys_var_constrained_value<uint32_t>::show_type()
499
{
1964.2.10 by Monty Taylor
Changed show SHOW_INT works ... man, trying to cast things as a method of data storage is lame.
500
  return SHOW_INT;
1863.1.6 by Monty Taylor
Template specialization functions sort of want that inline keyword.
501
}
502
503
template<>
504
inline SHOW_TYPE sys_var_constrained_value<int32_t>::show_type()
505
{
506
  return SHOW_LONG;
507
}
508
509
template<>
510
inline bool sys_var_constrained_value<uint64_t>::update(Session *, set_var *var)
1863.1.4 by Monty Taylor
Made basic type for set_var_constrained_value.
511
{
512
  value= var->save_result.uint64_t_value;
513
  return false;
514
}
515
516
template<>
1863.1.6 by Monty Taylor
Template specialization functions sort of want that inline keyword.
517
inline bool sys_var_constrained_value<uint32_t>::update(Session *, set_var *var)
1863.1.4 by Monty Taylor
Made basic type for set_var_constrained_value.
518
{
519
  value= var->save_result.uint32_t_value;
520
  return false;
521
}
522
1897.4.1 by Monty Taylor
Added readonly constrained_value class.
523
template<class T>
524
class sys_var_constrained_value_readonly :
525
  public sys_var_constrained_value<T>
526
{
527
public:
528
  sys_var_constrained_value_readonly(const char *name_arg,
529
                                     constrained_value<T> &value_arg) :
530
    sys_var_constrained_value<T>(name_arg, value_arg)
531
  { }
532
533
  sys_var_constrained_value_readonly(const char *name_arg,
534
                                     constrained_value<T> &value_arg,
535
                                     T default_value_arg) :
536
    sys_var_constrained_value<T>(name_arg, value_arg, default_value_arg)
537
  { }
538
539
public:
540
  bool is_readonly() const
541
  {
542
    return true;
543
  }
544
};
1863.1.11 by Monty Taylor
Put in template specializations to make ICC happy.
545
1945.1.2 by Monty Taylor
Add better support in constrained_check for min/max support. Add string ref class.
546
class sys_var_std_string :
547
  public sys_var
548
{
549
  std::string &value;
550
  sys_check_func check_func;
551
  sys_update_func update_func;
552
  sys_set_default_func set_default_func;
553
public:
554
  sys_var_std_string(const std::string &name_arg,
555
                     std::string &value_arg,
556
                     sys_check_func check_func_arg= NULL,
557
                     sys_update_func update_func_arg= NULL) :
558
    sys_var(name_arg),
559
    value(value_arg),
560
    check_func(check_func_arg),
561
    update_func(update_func_arg)
562
  {  }
563
564
  inline void set(char *val_in)
565
  {
566
    value= val_in; 
567
  }
568
569
  void set_check_func(sys_check_func check_func_arg= NULL)
570
  {
571
    check_func= check_func_arg;
572
  }
573
574
  void set_update_func(sys_update_func update_func_arg= NULL)
575
  {
576
    update_func= update_func_arg;
577
  }
578
579
  bool check(Session *session, set_var *var);
580
    
581
  bool update(Session *session, set_var *var)
582
  {
583
    if (update_func != NULL)
584
    {
585
      return (*update_func)(session, var);
586
    }
587
    return false;
588
  }
589
  SHOW_TYPE show_type() { return SHOW_CHAR; }
590
  unsigned char *value_ptr(Session *, sql_var_t, const LEX_STRING *)
591
  {
592
    return (unsigned char*)(value.c_str());
593
  }
594
  bool check_update_type(Item_result type)
595
  {
596
    return type != STRING_RESULT;		/* Only accept strings */
597
  }
598
  bool check_default(sql_var_t)
599
  { return true; }
600
  bool is_readonly() const { return false; }
601
};
602
1857.4.1 by Monty Taylor
Added string sys_var type.
603
class sys_var_const_string :
604
  public sys_var
605
{
606
  const std::string &value;
607
public:
608
  sys_var_const_string(const char *name_arg,
609
                       const std::string& value_arg) :
610
    sys_var(name_arg),
611
    value(value_arg)
612
  { }
613
614
  inline void set(char *)
615
  { }
616
617
  bool check(Session *, set_var *)
618
  {
619
    return true;
620
  }
621
  bool update(Session *, set_var *)
622
  {
623
    return true;
624
  }
625
  SHOW_TYPE show_type() { return SHOW_CHAR; }
626
  unsigned char *value_ptr(Session *, sql_var_t, const LEX_STRING *)
627
  {
628
    return (unsigned char*)(value.c_str());
629
  }
630
  bool check_update_type(Item_result)
631
  {
632
    return true;
633
  }
634
  bool check_default(sql_var_t) { return true; }
635
  bool is_readonly() const { return true; }
636
};
637
638
class sys_var_const_string_val :
639
  public sys_var
640
{
641
  const std::string value;
642
public:
643
  sys_var_const_string_val(const char *name_arg,
644
                           const std::string& value_arg) :
645
    sys_var(name_arg),
646
    value(value_arg)
647
  { }
648
649
  inline void set(char *)
650
  { }
651
652
  bool check(Session *, set_var *)
653
  {
654
    return true;
655
  }
656
  bool update(Session *, set_var *)
657
  {
658
    return true;
659
  }
660
  SHOW_TYPE show_type() { return SHOW_CHAR; }
661
  unsigned char *value_ptr(Session *, sql_var_t, const LEX_STRING *)
662
  {
663
    return (unsigned char*)(value.c_str());
664
  }
665
  bool check_update_type(Item_result)
666
  {
667
    return true;
668
  }
669
  bool check_default(sql_var_t) { return true; }
670
  bool is_readonly() const { return true; }
671
};
672
1 by brian
clean slate
673
class sys_var_const_str :public sys_var
674
{
675
  char *value;					// Pointer to const value
10 by Brian Aker
Start of var cleanup (really.... looking at this code the entire thing needs
676
public:
1851.1.1 by Monty Taylor
Removed sys_var_chain.
677
  sys_var_const_str(const char *name_arg,
1 by brian
clean slate
678
                    const char *value_arg)
679
    :sys_var(name_arg), value((char*) value_arg)
1851.1.1 by Monty Taylor
Removed sys_var_chain.
680
  {  }
10 by Brian Aker
Start of var cleanup (really.... looking at this code the entire thing needs
681
  inline void set (char *new_value)
682
  {
683
    value= new_value;
684
  }
644 by Brian Aker
Clean up warnings for Solaris.
685
  bool check(Session *, set_var *)
1 by brian
clean slate
686
  {
687
    return 1;
688
  }
644 by Brian Aker
Clean up warnings for Solaris.
689
  bool update(Session *, set_var *)
1 by brian
clean slate
690
  {
691
    return 1;
692
  }
693
  SHOW_TYPE show_type() { return SHOW_CHAR; }
1273.13.24 by Brian Aker
Updating style, simplified code.
694
  unsigned char *value_ptr(Session *, sql_var_t, const LEX_STRING *)
1 by brian
clean slate
695
  {
481 by Brian Aker
Remove all of uchar.
696
    return (unsigned char*) value;
1 by brian
clean slate
697
  }
644 by Brian Aker
Clean up warnings for Solaris.
698
  bool check_update_type(Item_result)
1 by brian
clean slate
699
  {
700
    return 1;
701
  }
1273.13.24 by Brian Aker
Updating style, simplified code.
702
  bool check_default(sql_var_t)
77.1.7 by Monty Taylor
Heap builds clean.
703
  { return 1; }
1 by brian
clean slate
704
  bool is_readonly() const { return 1; }
705
};
706
707
708
class sys_var_const_str_ptr :public sys_var
709
{
710
  char **value;					// Pointer to const value
10 by Brian Aker
Start of var cleanup (really.... looking at this code the entire thing needs
711
public:
1851.1.1 by Monty Taylor
Removed sys_var_chain.
712
  sys_var_const_str_ptr(const char *name_arg, char **value_arg)
1 by brian
clean slate
713
    :sys_var(name_arg),value(value_arg)
1851.1.1 by Monty Taylor
Removed sys_var_chain.
714
  {  }
644 by Brian Aker
Clean up warnings for Solaris.
715
  bool check(Session *, set_var *)
1 by brian
clean slate
716
  {
717
    return 1;
718
  }
644 by Brian Aker
Clean up warnings for Solaris.
719
  bool update(Session *, set_var *)
1 by brian
clean slate
720
  {
721
    return 1;
722
  }
723
  SHOW_TYPE show_type() { return SHOW_CHAR; }
1273.13.24 by Brian Aker
Updating style, simplified code.
724
  unsigned char *value_ptr(Session *, sql_var_t, const LEX_STRING *)
1 by brian
clean slate
725
  {
481 by Brian Aker
Remove all of uchar.
726
    return (unsigned char*) *value;
1 by brian
clean slate
727
  }
644 by Brian Aker
Clean up warnings for Solaris.
728
  bool check_update_type(Item_result)
1 by brian
clean slate
729
  {
730
    return 1;
731
  }
1273.13.24 by Brian Aker
Updating style, simplified code.
732
  bool check_default(sql_var_t)
77.1.7 by Monty Taylor
Heap builds clean.
733
  { return 1; }
734
  bool is_readonly(void) const { return 1; }
1 by brian
clean slate
735
};
736
737
520.1.22 by Brian Aker
Second pass of thd cleanup
738
class sys_var_session :public sys_var
1 by brian
clean slate
739
{
740
public:
660.1.3 by Eric Herman
removed trailing whitespace with simple script:
741
  sys_var_session(const char *name_arg,
1018 by Brian Aker
Remove "BINLOG" from variables (we don't need this for our replication).
742
              sys_after_update_func func= NULL)
743
    :sys_var(name_arg, func)
1 by brian
clean slate
744
  {}
1273.13.24 by Brian Aker
Updating style, simplified code.
745
  bool check_type(sql_var_t)
77.1.7 by Monty Taylor
Heap builds clean.
746
  { return 0; }
1273.13.24 by Brian Aker
Updating style, simplified code.
747
  bool check_default(sql_var_t type)
1 by brian
clean slate
748
  {
749
    return type == OPT_GLOBAL && !option_limits;
750
  }
751
};
752
615 by Brian Aker
Added 32bit system variable support
753
class sys_var_session_uint32_t :public sys_var_session
754
{
755
  sys_check_func check_func;
756
public:
1878.3.2 by Monty Taylor
Split out show_type into its own header and made sys_var work through
757
  uint32_t drizzle_system_variables::*offset;
1851.1.1 by Monty Taylor
Removed sys_var_chain.
758
  sys_var_session_uint32_t(const char *name_arg,
1878.3.2 by Monty Taylor
Split out show_type into its own header and made sys_var work through
759
                           uint32_t drizzle_system_variables::*offset_arg,
615 by Brian Aker
Added 32bit system variable support
760
                           sys_check_func c_func= NULL,
1018 by Brian Aker
Remove "BINLOG" from variables (we don't need this for our replication).
761
                           sys_after_update_func au_func= NULL)
762
    :sys_var_session(name_arg, au_func), check_func(c_func),
615 by Brian Aker
Added 32bit system variable support
763
    offset(offset_arg)
1851.1.1 by Monty Taylor
Removed sys_var_chain.
764
  {  }
615 by Brian Aker
Added 32bit system variable support
765
  bool check(Session *session, set_var *var);
766
  bool update(Session *session, set_var *var);
1273.13.24 by Brian Aker
Updating style, simplified code.
767
  void set_default(Session *session, sql_var_t type);
910.4.18 by Stewart Smith
fix alignment of variables (incl key cache). fixes SIGBUS on SPARC64
768
  SHOW_TYPE show_type() { return SHOW_INT; }
1273.13.24 by Brian Aker
Updating style, simplified code.
769
  unsigned char *value_ptr(Session *session, sql_var_t type,
779.3.10 by Monty Taylor
Turned on -Wshadow.
770
                           const LEX_STRING *base);
615 by Brian Aker
Added 32bit system variable support
771
};
772
1 by brian
clean slate
773
520.1.22 by Brian Aker
Second pass of thd cleanup
774
class sys_var_session_ha_rows :public sys_var_session
1 by brian
clean slate
775
{
776
public:
1878.3.2 by Monty Taylor
Split out show_type into its own header and made sys_var work through
777
  ha_rows drizzle_system_variables::*offset;
1851.1.1 by Monty Taylor
Removed sys_var_chain.
778
  sys_var_session_ha_rows(const char *name_arg,
1878.3.2 by Monty Taylor
Split out show_type into its own header and made sys_var work through
779
                      ha_rows drizzle_system_variables::*offset_arg)
520.1.22 by Brian Aker
Second pass of thd cleanup
780
    :sys_var_session(name_arg), offset(offset_arg)
1851.1.1 by Monty Taylor
Removed sys_var_chain.
781
  {  }
782
  sys_var_session_ha_rows(const char *name_arg,
1878.3.2 by Monty Taylor
Split out show_type into its own header and made sys_var work through
783
                      ha_rows drizzle_system_variables::*offset_arg,
1 by brian
clean slate
784
		      sys_after_update_func func)
520.1.22 by Brian Aker
Second pass of thd cleanup
785
    :sys_var_session(name_arg,func), offset(offset_arg)
1851.1.1 by Monty Taylor
Removed sys_var_chain.
786
  {  }
520.1.22 by Brian Aker
Second pass of thd cleanup
787
  bool update(Session *session, set_var *var);
1273.13.24 by Brian Aker
Updating style, simplified code.
788
  void set_default(Session *session, sql_var_t type);
1 by brian
clean slate
789
  SHOW_TYPE show_type() { return SHOW_HA_ROWS; }
1273.13.24 by Brian Aker
Updating style, simplified code.
790
  unsigned char *value_ptr(Session *session, sql_var_t type,
779.3.10 by Monty Taylor
Turned on -Wshadow.
791
                           const LEX_STRING *base);
1 by brian
clean slate
792
};
793
794
520.1.22 by Brian Aker
Second pass of thd cleanup
795
class sys_var_session_uint64_t :public sys_var_session
1 by brian
clean slate
796
{
555 by Monty
Fixed 32-bit issues.
797
  sys_check_func check_func;
1 by brian
clean slate
798
public:
1878.3.2 by Monty Taylor
Split out show_type into its own header and made sys_var work through
799
  uint64_t drizzle_system_variables::*offset;
1 by brian
clean slate
800
  bool only_global;
1851.1.1 by Monty Taylor
Removed sys_var_chain.
801
  sys_var_session_uint64_t(
1018 by Brian Aker
Remove "BINLOG" from variables (we don't need this for our replication).
802
                           const char *name_arg,
1878.3.2 by Monty Taylor
Split out show_type into its own header and made sys_var work through
803
                           uint64_t drizzle_system_variables::*offset_arg,
555 by Monty
Fixed 32-bit issues.
804
                           sys_after_update_func au_func= NULL,
1018 by Brian Aker
Remove "BINLOG" from variables (we don't need this for our replication).
805
                           sys_check_func c_func= NULL)
806
    :sys_var_session(name_arg, au_func),
617 by Brian Aker
ulong fixes
807
    check_func(c_func),
808
    offset(offset_arg)
1851.1.1 by Monty Taylor
Removed sys_var_chain.
809
  {  }
810
  sys_var_session_uint64_t(const char *name_arg,
1878.3.2 by Monty Taylor
Split out show_type into its own header and made sys_var work through
811
                           uint64_t drizzle_system_variables::*offset_arg,
660.1.3 by Eric Herman
removed trailing whitespace with simple script:
812
                           sys_after_update_func func,
617 by Brian Aker
ulong fixes
813
                           bool only_global_arg,
814
                           sys_check_func cfunc= NULL)
555 by Monty
Fixed 32-bit issues.
815
    :sys_var_session(name_arg, func),
816
    check_func(cfunc),
817
    offset(offset_arg),
1 by brian
clean slate
818
    only_global(only_global_arg)
1851.1.1 by Monty Taylor
Removed sys_var_chain.
819
  {  }
520.1.22 by Brian Aker
Second pass of thd cleanup
820
  bool update(Session *session, set_var *var);
1273.13.24 by Brian Aker
Updating style, simplified code.
821
  void set_default(Session *session, sql_var_t type);
1 by brian
clean slate
822
  SHOW_TYPE show_type() { return SHOW_LONGLONG; }
1273.13.24 by Brian Aker
Updating style, simplified code.
823
  unsigned char *value_ptr(Session *session, sql_var_t type,
779.3.10 by Monty Taylor
Turned on -Wshadow.
824
                           const LEX_STRING *base);
520.1.22 by Brian Aker
Second pass of thd cleanup
825
  bool check(Session *session, set_var *var);
1273.13.24 by Brian Aker
Updating style, simplified code.
826
  bool check_default(sql_var_t type)
1 by brian
clean slate
827
  {
828
    return type == OPT_GLOBAL && !option_limits;
829
  }
1273.13.24 by Brian Aker
Updating style, simplified code.
830
  bool check_type(sql_var_t type)
1 by brian
clean slate
831
  {
832
    return (only_global && type != OPT_GLOBAL);
833
  }
834
};
835
629.4.1 by Monty Taylor
First step in support size_t sys_var stuff.
836
class sys_var_session_size_t :public sys_var_session
837
{
838
  sys_check_func check_func;
839
public:
1878.3.2 by Monty Taylor
Split out show_type into its own header and made sys_var work through
840
  size_t drizzle_system_variables::*offset;
629.4.1 by Monty Taylor
First step in support size_t sys_var stuff.
841
  bool only_global;
1851.1.1 by Monty Taylor
Removed sys_var_chain.
842
  sys_var_session_size_t(const char *name_arg,
1878.3.2 by Monty Taylor
Split out show_type into its own header and made sys_var work through
843
                         size_t drizzle_system_variables::*offset_arg,
629.4.1 by Monty Taylor
First step in support size_t sys_var stuff.
844
                         sys_after_update_func au_func= NULL,
1018 by Brian Aker
Remove "BINLOG" from variables (we don't need this for our replication).
845
                         sys_check_func c_func= NULL)
846
    :sys_var_session(name_arg, au_func),
629.4.1 by Monty Taylor
First step in support size_t sys_var stuff.
847
     check_func(c_func),
848
     offset(offset_arg)
1851.1.1 by Monty Taylor
Removed sys_var_chain.
849
  {  }
850
  sys_var_session_size_t(const char *name_arg,
1878.3.2 by Monty Taylor
Split out show_type into its own header and made sys_var work through
851
                         size_t drizzle_system_variables::*offset_arg,
660.1.3 by Eric Herman
removed trailing whitespace with simple script:
852
                         sys_after_update_func func,
629.4.1 by Monty Taylor
First step in support size_t sys_var stuff.
853
                         bool only_global_arg,
854
                         sys_check_func cfunc= NULL)
855
    :sys_var_session(name_arg, func),
856
     check_func(cfunc),
857
     offset(offset_arg),
858
     only_global(only_global_arg)
1851.1.1 by Monty Taylor
Removed sys_var_chain.
859
  {  }
629.4.1 by Monty Taylor
First step in support size_t sys_var stuff.
860
  bool update(Session *session, set_var *var);
1273.13.24 by Brian Aker
Updating style, simplified code.
861
  void set_default(Session *session, sql_var_t type);
629.4.1 by Monty Taylor
First step in support size_t sys_var stuff.
862
  SHOW_TYPE show_type() { return SHOW_SIZE; }
1273.13.24 by Brian Aker
Updating style, simplified code.
863
  unsigned char *value_ptr(Session *session, sql_var_t type,
779.3.10 by Monty Taylor
Turned on -Wshadow.
864
                           const LEX_STRING *base);
629.4.1 by Monty Taylor
First step in support size_t sys_var stuff.
865
  bool check(Session *session, set_var *var);
1273.13.24 by Brian Aker
Updating style, simplified code.
866
  bool check_default(sql_var_t type)
629.4.1 by Monty Taylor
First step in support size_t sys_var stuff.
867
  {
868
    return type == OPT_GLOBAL && !option_limits;
869
  }
1273.13.24 by Brian Aker
Updating style, simplified code.
870
  bool check_type(sql_var_t type)
629.4.1 by Monty Taylor
First step in support size_t sys_var stuff.
871
  {
872
    return (only_global && type != OPT_GLOBAL);
873
  }
874
};
875
1 by brian
clean slate
876
520.1.22 by Brian Aker
Second pass of thd cleanup
877
class sys_var_session_bool :public sys_var_session
1 by brian
clean slate
878
{
879
public:
1878.3.2 by Monty Taylor
Split out show_type into its own header and made sys_var work through
880
  bool drizzle_system_variables::*offset;
881
  sys_var_session_bool(const char *name_arg, bool drizzle_system_variables::*offset_arg)
520.1.22 by Brian Aker
Second pass of thd cleanup
882
    :sys_var_session(name_arg), offset(offset_arg)
1851.1.1 by Monty Taylor
Removed sys_var_chain.
883
  {  }
1878.3.2 by Monty Taylor
Split out show_type into its own header and made sys_var work through
884
  sys_var_session_bool(const char *name_arg, bool drizzle_system_variables::*offset_arg,
1 by brian
clean slate
885
		   sys_after_update_func func)
520.1.22 by Brian Aker
Second pass of thd cleanup
886
    :sys_var_session(name_arg,func), offset(offset_arg)
1851.1.1 by Monty Taylor
Removed sys_var_chain.
887
  {  }
520.1.22 by Brian Aker
Second pass of thd cleanup
888
  bool update(Session *session, set_var *var);
1273.13.24 by Brian Aker
Updating style, simplified code.
889
  void set_default(Session *session, sql_var_t type);
1 by brian
clean slate
890
  SHOW_TYPE show_type() { return SHOW_MY_BOOL; }
1273.13.24 by Brian Aker
Updating style, simplified code.
891
  unsigned char *value_ptr(Session *session, sql_var_t type,
779.3.10 by Monty Taylor
Turned on -Wshadow.
892
                           const LEX_STRING *base);
520.1.22 by Brian Aker
Second pass of thd cleanup
893
  bool check(Session *session, set_var *var)
1 by brian
clean slate
894
  {
520.1.22 by Brian Aker
Second pass of thd cleanup
895
    return check_enum(session, var, &bool_typelib);
1 by brian
clean slate
896
  }
644 by Brian Aker
Clean up warnings for Solaris.
897
  bool check_update_type(Item_result)
77.1.7 by Monty Taylor
Heap builds clean.
898
  { return 0; }
1 by brian
clean slate
899
};
900
901
520.1.22 by Brian Aker
Second pass of thd cleanup
902
class sys_var_session_enum :public sys_var_session
1 by brian
clean slate
903
{
904
protected:
1878.3.2 by Monty Taylor
Split out show_type into its own header and made sys_var work through
905
  uint32_t drizzle_system_variables::*offset;
1 by brian
clean slate
906
  TYPELIB *enum_names;
907
  sys_check_func check_func;
908
public:
1851.1.1 by Monty Taylor
Removed sys_var_chain.
909
  sys_var_session_enum(const char *name_arg,
1878.3.2 by Monty Taylor
Split out show_type into its own header and made sys_var work through
910
                   uint32_t drizzle_system_variables::*offset_arg, TYPELIB *typelib,
1 by brian
clean slate
911
                   sys_after_update_func func= NULL,
801.1.1 by Brian Aker
Solaris build error fix.
912
                   sys_check_func check_f= NULL)
520.1.22 by Brian Aker
Second pass of thd cleanup
913
    :sys_var_session(name_arg, func), offset(offset_arg),
801.1.1 by Brian Aker
Solaris build error fix.
914
    enum_names(typelib), check_func(check_f)
1851.1.1 by Monty Taylor
Removed sys_var_chain.
915
  {  }
520.1.22 by Brian Aker
Second pass of thd cleanup
916
  bool check(Session *session, set_var *var)
1 by brian
clean slate
917
  {
918
    int ret= 0;
919
    if (check_func)
520.1.22 by Brian Aker
Second pass of thd cleanup
920
      ret= (*check_func)(session, var);
921
    return ret ? ret : check_enum(session, var, enum_names);
1 by brian
clean slate
922
  }
520.1.22 by Brian Aker
Second pass of thd cleanup
923
  bool update(Session *session, set_var *var);
1273.13.24 by Brian Aker
Updating style, simplified code.
924
  void set_default(Session *session, sql_var_t type);
1 by brian
clean slate
925
  SHOW_TYPE show_type() { return SHOW_CHAR; }
1273.13.24 by Brian Aker
Updating style, simplified code.
926
  unsigned char *value_ptr(Session *session, sql_var_t type,
779.3.10 by Monty Taylor
Turned on -Wshadow.
927
                           const LEX_STRING *base);
644 by Brian Aker
Clean up warnings for Solaris.
928
  bool check_update_type(Item_result)
77.1.7 by Monty Taylor
Heap builds clean.
929
  { return 0; }
1 by brian
clean slate
930
};
931
932
520.1.22 by Brian Aker
Second pass of thd cleanup
933
class sys_var_session_storage_engine :public sys_var_session
1 by brian
clean slate
934
{
935
protected:
1878.3.2 by Monty Taylor
Split out show_type into its own header and made sys_var work through
936
  plugin::StorageEngine *drizzle_system_variables::*offset;
1 by brian
clean slate
937
public:
1851.1.1 by Monty Taylor
Removed sys_var_chain.
938
  sys_var_session_storage_engine(const char *name_arg,
1878.3.2 by Monty Taylor
Split out show_type into its own header and made sys_var work through
939
                                 plugin::StorageEngine *drizzle_system_variables::*offset_arg)
520.1.22 by Brian Aker
Second pass of thd cleanup
940
    :sys_var_session(name_arg), offset(offset_arg)
1851.1.1 by Monty Taylor
Removed sys_var_chain.
941
  {  }
520.1.22 by Brian Aker
Second pass of thd cleanup
942
  bool check(Session *session, set_var *var);
1 by brian
clean slate
943
  SHOW_TYPE show_type() { return SHOW_CHAR; }
944
  bool check_update_type(Item_result type)
945
  {
946
    return type != STRING_RESULT;		/* Only accept strings */
947
  }
1273.13.24 by Brian Aker
Updating style, simplified code.
948
  void set_default(Session *session, sql_var_t type);
520.1.22 by Brian Aker
Second pass of thd cleanup
949
  bool update(Session *session, set_var *var);
1273.13.24 by Brian Aker
Updating style, simplified code.
950
  unsigned char *value_ptr(Session *session, sql_var_t type,
779.3.10 by Monty Taylor
Turned on -Wshadow.
951
                           const LEX_STRING *base);
1 by brian
clean slate
952
};
953
520.1.22 by Brian Aker
Second pass of thd cleanup
954
class sys_var_session_bit :public sys_var_session
1 by brian
clean slate
955
{
956
  sys_check_func check_func;
957
  sys_update_func update_func;
958
public:
151 by Brian Aker
Ulonglong to uint64_t
959
  uint64_t bit_flag;
1 by brian
clean slate
960
  bool reverse;
1851.1.1 by Monty Taylor
Removed sys_var_chain.
961
  sys_var_session_bit(const char *name_arg,
1 by brian
clean slate
962
                  sys_check_func c_func, sys_update_func u_func,
1018 by Brian Aker
Remove "BINLOG" from variables (we don't need this for our replication).
963
                  uint64_t bit, bool reverse_arg=0)
964
    :sys_var_session(name_arg, NULL), check_func(c_func),
1 by brian
clean slate
965
    update_func(u_func), bit_flag(bit), reverse(reverse_arg)
1851.1.1 by Monty Taylor
Removed sys_var_chain.
966
  {  }
520.1.22 by Brian Aker
Second pass of thd cleanup
967
  bool check(Session *session, set_var *var);
968
  bool update(Session *session, set_var *var);
644 by Brian Aker
Clean up warnings for Solaris.
969
  bool check_update_type(Item_result)
77.1.7 by Monty Taylor
Heap builds clean.
970
  { return 0; }
1273.13.24 by Brian Aker
Updating style, simplified code.
971
  bool check_type(sql_var_t type) { return type == OPT_GLOBAL; }
1 by brian
clean slate
972
  SHOW_TYPE show_type() { return SHOW_MY_BOOL; }
1273.13.24 by Brian Aker
Updating style, simplified code.
973
  unsigned char *value_ptr(Session *session, sql_var_t type,
779.3.10 by Monty Taylor
Turned on -Wshadow.
974
                           const LEX_STRING *base);
1 by brian
clean slate
975
};
976
977
/* some variables that require special handling */
978
979
class sys_var_timestamp :public sys_var
980
{
981
public:
1851.1.1 by Monty Taylor
Removed sys_var_chain.
982
  sys_var_timestamp(const char *name_arg)
1018 by Brian Aker
Remove "BINLOG" from variables (we don't need this for our replication).
983
    :sys_var(name_arg, NULL)
1851.1.1 by Monty Taylor
Removed sys_var_chain.
984
  {  }
520.1.22 by Brian Aker
Second pass of thd cleanup
985
  bool update(Session *session, set_var *var);
1273.13.24 by Brian Aker
Updating style, simplified code.
986
  void set_default(Session *session, sql_var_t type);
987
  bool check_type(sql_var_t type)    { return type == OPT_GLOBAL; }
988
  bool check_default(sql_var_t)
77.1.7 by Monty Taylor
Heap builds clean.
989
  { return 0; }
990
  SHOW_TYPE show_type(void) { return SHOW_LONG; }
1273.13.24 by Brian Aker
Updating style, simplified code.
991
  unsigned char *value_ptr(Session *session, sql_var_t type,
779.3.10 by Monty Taylor
Turned on -Wshadow.
992
                           const LEX_STRING *base);
1 by brian
clean slate
993
};
994
995
996
class sys_var_last_insert_id :public sys_var
997
{
998
public:
1851.1.1 by Monty Taylor
Removed sys_var_chain.
999
  sys_var_last_insert_id(const char *name_arg)
1018 by Brian Aker
Remove "BINLOG" from variables (we don't need this for our replication).
1000
    :sys_var(name_arg, NULL)
1851.1.1 by Monty Taylor
Removed sys_var_chain.
1001
  {  }
520.1.22 by Brian Aker
Second pass of thd cleanup
1002
  bool update(Session *session, set_var *var);
1273.13.24 by Brian Aker
Updating style, simplified code.
1003
  bool check_type(sql_var_t type) { return type == OPT_GLOBAL; }
1 by brian
clean slate
1004
  SHOW_TYPE show_type() { return SHOW_LONGLONG; }
1273.13.24 by Brian Aker
Updating style, simplified code.
1005
  unsigned char *value_ptr(Session *session, sql_var_t type,
779.3.10 by Monty Taylor
Turned on -Wshadow.
1006
                           const LEX_STRING *base);
1 by brian
clean slate
1007
};
1008
1009
520.1.22 by Brian Aker
Second pass of thd cleanup
1010
class sys_var_collation :public sys_var_session
1 by brian
clean slate
1011
{
1012
public:
1018 by Brian Aker
Remove "BINLOG" from variables (we don't need this for our replication).
1013
  sys_var_collation(const char *name_arg)
1014
    :sys_var_session(name_arg, NULL)
744 by Brian Aker
Removing dead code around one shot.
1015
  { }
520.1.22 by Brian Aker
Second pass of thd cleanup
1016
  bool check(Session *session, set_var *var);
1 by brian
clean slate
1017
  SHOW_TYPE show_type() { return SHOW_CHAR; }
1018
  bool check_update_type(Item_result type)
1019
  {
1020
    return ((type != STRING_RESULT) && (type != INT_RESULT));
1021
  }
1273.13.24 by Brian Aker
Updating style, simplified code.
1022
  bool check_default(sql_var_t) { return 0; }
1023
  virtual void set_default(Session *session, sql_var_t type)= 0;
1 by brian
clean slate
1024
};
1025
1026
class sys_var_collation_sv :public sys_var_collation
1027
{
1878.3.2 by Monty Taylor
Split out show_type into its own header and made sys_var work through
1028
  const CHARSET_INFO *drizzle_system_variables::*offset;
264.2.6 by Andrey Hristov
Constify the usage of CHARSET_INFO almost to the last place in the code.
1029
  const CHARSET_INFO **global_default;
1 by brian
clean slate
1030
public:
1851.1.1 by Monty Taylor
Removed sys_var_chain.
1031
  sys_var_collation_sv(const char *name_arg,
1878.3.2 by Monty Taylor
Split out show_type into its own header and made sys_var work through
1032
                       const CHARSET_INFO *drizzle_system_variables::*offset_arg,
1018 by Brian Aker
Remove "BINLOG" from variables (we don't need this for our replication).
1033
                       const CHARSET_INFO **global_default_arg)
1034
    :sys_var_collation(name_arg),
1 by brian
clean slate
1035
    offset(offset_arg), global_default(global_default_arg)
1036
  {
1851.1.1 by Monty Taylor
Removed sys_var_chain.
1037
    
1 by brian
clean slate
1038
  }
520.1.22 by Brian Aker
Second pass of thd cleanup
1039
  bool update(Session *session, set_var *var);
1273.13.24 by Brian Aker
Updating style, simplified code.
1040
  void set_default(Session *session, sql_var_t type);
1041
  unsigned char *value_ptr(Session *session, sql_var_t type,
779.3.10 by Monty Taylor
Turned on -Wshadow.
1042
                           const LEX_STRING *base);
1 by brian
clean slate
1043
};
1044
1045
/* Variable that you can only read from */
1046
1047
class sys_var_readonly: public sys_var
1048
{
1049
public:
1273.13.24 by Brian Aker
Updating style, simplified code.
1050
  sql_var_t var_type;
1 by brian
clean slate
1051
  SHOW_TYPE show_type_value;
1052
  sys_value_ptr_func value_ptr_func;
1851.1.1 by Monty Taylor
Removed sys_var_chain.
1053
  sys_var_readonly(const char *name_arg, sql_var_t type,
1 by brian
clean slate
1054
		   SHOW_TYPE show_type_arg,
1055
		   sys_value_ptr_func value_ptr_func_arg)
660.1.3 by Eric Herman
removed trailing whitespace with simple script:
1056
    :sys_var(name_arg), var_type(type),
1 by brian
clean slate
1057
       show_type_value(show_type_arg), value_ptr_func(value_ptr_func_arg)
1851.1.1 by Monty Taylor
Removed sys_var_chain.
1058
  {  }
644 by Brian Aker
Clean up warnings for Solaris.
1059
  bool update(Session *, set_var *)
77.1.7 by Monty Taylor
Heap builds clean.
1060
  { return 1; }
1273.13.24 by Brian Aker
Updating style, simplified code.
1061
  bool check_default(sql_var_t)
77.1.7 by Monty Taylor
Heap builds clean.
1062
  { return 1; }
1273.13.24 by Brian Aker
Updating style, simplified code.
1063
  bool check_type(sql_var_t type) { return type != var_type; }
644 by Brian Aker
Clean up warnings for Solaris.
1064
  bool check_update_type(Item_result)
77.1.7 by Monty Taylor
Heap builds clean.
1065
  { return 1; }
1273.13.24 by Brian Aker
Updating style, simplified code.
1066
  unsigned char *value_ptr(Session *session, sql_var_t,
779.3.10 by Monty Taylor
Turned on -Wshadow.
1067
                           const LEX_STRING *)
1 by brian
clean slate
1068
  {
520.1.22 by Brian Aker
Second pass of thd cleanup
1069
    return (*value_ptr_func)(session);
1 by brian
clean slate
1070
  }
77.1.7 by Monty Taylor
Heap builds clean.
1071
  SHOW_TYPE show_type(void) { return show_type_value; }
1072
  bool is_readonly(void) const { return 1; }
1 by brian
clean slate
1073
};
1074
1075
520.1.22 by Brian Aker
Second pass of thd cleanup
1076
class sys_var_session_time_zone :public sys_var_session
1 by brian
clean slate
1077
{
1078
public:
1851.1.1 by Monty Taylor
Removed sys_var_chain.
1079
  sys_var_session_time_zone(const char *name_arg)
1018 by Brian Aker
Remove "BINLOG" from variables (we don't need this for our replication).
1080
    :sys_var_session(name_arg, NULL)
1 by brian
clean slate
1081
  {
1851.1.1 by Monty Taylor
Removed sys_var_chain.
1082
    
1 by brian
clean slate
1083
  }
520.1.22 by Brian Aker
Second pass of thd cleanup
1084
  bool check(Session *session, set_var *var);
1 by brian
clean slate
1085
  SHOW_TYPE show_type() { return SHOW_CHAR; }
1086
  bool check_update_type(Item_result type)
1087
  {
1088
    return type != STRING_RESULT;		/* Only accept strings */
1089
  }
1273.13.24 by Brian Aker
Updating style, simplified code.
1090
  bool check_default(sql_var_t)
77.1.7 by Monty Taylor
Heap builds clean.
1091
  { return 0; }
520.1.22 by Brian Aker
Second pass of thd cleanup
1092
  bool update(Session *session, set_var *var);
1273.13.24 by Brian Aker
Updating style, simplified code.
1093
  unsigned char *value_ptr(Session *session, sql_var_t type,
779.3.10 by Monty Taylor
Turned on -Wshadow.
1094
                           const LEX_STRING *base);
1273.13.24 by Brian Aker
Updating style, simplified code.
1095
  virtual void set_default(Session *session, sql_var_t type);
1 by brian
clean slate
1096
};
1097
1098
520.1.22 by Brian Aker
Second pass of thd cleanup
1099
class sys_var_microseconds :public sys_var_session
1 by brian
clean slate
1100
{
1878.3.2 by Monty Taylor
Split out show_type into its own header and made sys_var work through
1101
  uint64_t drizzle_system_variables::*offset;
1 by brian
clean slate
1102
public:
1851.1.1 by Monty Taylor
Removed sys_var_chain.
1103
  sys_var_microseconds(const char *name_arg,
1878.3.2 by Monty Taylor
Split out show_type into its own header and made sys_var work through
1104
                       uint64_t drizzle_system_variables::*offset_arg):
520.1.22 by Brian Aker
Second pass of thd cleanup
1105
    sys_var_session(name_arg), offset(offset_arg)
1851.1.1 by Monty Taylor
Removed sys_var_chain.
1106
  {  }
644 by Brian Aker
Clean up warnings for Solaris.
1107
  bool check(Session *, set_var *) {return 0;}
520.1.22 by Brian Aker
Second pass of thd cleanup
1108
  bool update(Session *session, set_var *var);
1273.13.24 by Brian Aker
Updating style, simplified code.
1109
  void set_default(Session *session, sql_var_t type);
1 by brian
clean slate
1110
  SHOW_TYPE show_type() { return SHOW_DOUBLE; }
1111
  bool check_update_type(Item_result type)
1112
  {
1113
    return (type != INT_RESULT && type != REAL_RESULT && type != DECIMAL_RESULT);
1114
  }
1115
};
1116
520.1.22 by Brian Aker
Second pass of thd cleanup
1117
class sys_var_session_lc_time_names :public sys_var_session
1 by brian
clean slate
1118
{
1119
public:
1851.1.1 by Monty Taylor
Removed sys_var_chain.
1120
  sys_var_session_lc_time_names(const char *name_arg)
1018 by Brian Aker
Remove "BINLOG" from variables (we don't need this for our replication).
1121
    : sys_var_session(name_arg, NULL)
1 by brian
clean slate
1122
  {
1851.1.1 by Monty Taylor
Removed sys_var_chain.
1123
    
1 by brian
clean slate
1124
  }
520.1.22 by Brian Aker
Second pass of thd cleanup
1125
  bool check(Session *session, set_var *var);
1 by brian
clean slate
1126
  SHOW_TYPE show_type() { return SHOW_CHAR; }
1127
  bool check_update_type(Item_result type)
1128
  {
1129
    return ((type != STRING_RESULT) && (type != INT_RESULT));
1130
  }
1273.13.24 by Brian Aker
Updating style, simplified code.
1131
  bool check_default(sql_var_t)
77.1.7 by Monty Taylor
Heap builds clean.
1132
  { return 0; }
520.1.22 by Brian Aker
Second pass of thd cleanup
1133
  bool update(Session *session, set_var *var);
1273.13.24 by Brian Aker
Updating style, simplified code.
1134
  unsigned char *value_ptr(Session *session, sql_var_t type,
779.3.10 by Monty Taylor
Turned on -Wshadow.
1135
                           const LEX_STRING *base);
1273.13.24 by Brian Aker
Updating style, simplified code.
1136
  virtual void set_default(Session *session, sql_var_t type);
1 by brian
clean slate
1137
};
1138
1139
1140
1141
/* For sql_yacc */
1142
struct sys_var_with_base
1143
{
1144
  sys_var *var;
1145
  LEX_STRING base_name;
1146
};
1147
1148
/*
1149
  Prototypes for helper functions
1150
*/
1151
1813.2.8 by Monty Taylor
Removed the fixed_vars.
1152
drizzle_show_var* enumerate_sys_vars(Session *session);
1101.1.27 by Monty Taylor
Fixed the plugin string valgrind leak.
1153
void drizzle_add_plugin_sysvar(sys_var_pluginvar *var);
1154
void drizzle_del_plugin_sysvar();
1851.1.1 by Monty Taylor
Removed sys_var_chain.
1155
void add_sys_var_to_list(sys_var *var, struct option *long_options);
1156
void add_sys_var_to_list(sys_var *var);
1964.2.8 by Monty Taylor
Updated memcached_stats plugin.
1157
sys_var *find_sys_var(const char *str, uint32_t length=0);
1 by brian
clean slate
1158
bool not_all_support_one_shot(List<set_var_base> *var_list);
520.1.22 by Brian Aker
Second pass of thd cleanup
1159
extern sys_var_session_time_zone sys_time_zone;
1160
extern sys_var_session_bit sys_autocommit;
264.2.6 by Andrey Hristov
Constify the usage of CHARSET_INFO almost to the last place in the code.
1161
const CHARSET_INFO *get_old_charset_by_name(const char *old_name);
1 by brian
clean slate
1162
1163
extern sys_var_str sys_var_general_log_path, sys_var_slow_log_path;
1164
1280.1.10 by Monty Taylor
Put everything in drizzled into drizzled namespace.
1165
} /* namespace drizzled */
1166
1878.3.1 by Monty Taylor
Split set_var.* into sys_var.* and set_var.*
1167
#endif /* DRIZZLED_SYS_VAR_H */