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