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