~drizzle-trunk/drizzle/development

390.1.2 by Monty Taylor
Fixed copyright headers in drizzled/
1
/* -*- mode: c++; c-basic-offset: 2; indent-tabs-mode: nil; -*-
2
 *  vim:expandtab:shiftwidth=2:tabstop=2:smarttab:
3
 *
4
 *  Copyright (C) 2008 Sun Microsystems
5
 *
6
 *  This program is free software; you can redistribute it and/or modify
7
 *  it under the terms of the GNU General Public License as published by
8
 *  the Free Software Foundation; version 2 of the License.
9
 *
10
 *  This program is distributed in the hope that it will be useful,
11
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
12
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13
 *  GNU General Public License for more details.
14
 *
15
 *  You should have received a copy of the GNU General Public License
16
 *  along with this program; if not, write to the Free Software
17
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
18
 */
1 by brian
clean slate
19
1122.2.10 by Monty Taylor
Fixed all of the include guards.
20
#ifndef DRIZZLED_SET_VAR_H
21
#define DRIZZLED_SET_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>
24
1122.2.13 by Monty Taylor
Header cleanup.
25
#include "drizzled/function/func.h"
26
#include "drizzled/function/set_user_var.h"
27
#include "drizzled/item/string.h"
28
#include "drizzled/item/field.h"
29
1280.1.10 by Monty Taylor
Put everything in drizzled into drizzled namespace.
30
namespace drizzled
31
{
1122.2.13 by Monty Taylor
Header cleanup.
32
1 by brian
clean slate
33
/* Classes to support the SET command */
34
35
36
/****************************************************************************
37
  Variables that are changable runtime are declared using the
38
  following classes
39
****************************************************************************/
40
41
class sys_var;
42
class set_var;
43
class sys_var_pluginvar; /* opaque */
584.1.15 by Monty Taylor
The mega-patch from hell. Renamed sql_class to session (since that's what it is) and removed it and field and table from common_includes.
44
class Time_zone;
1 by brian
clean slate
45
typedef struct my_locale_st MY_LOCALE;
46
1055.2.18 by Jay Pipes
Removes dead variables in set_var.h
47
extern TYPELIB bool_typelib;
1 by brian
clean slate
48
520.1.21 by Brian Aker
THD -> Session rename
49
typedef int (*sys_check_func)(Session *,  set_var *);
50
typedef bool (*sys_update_func)(Session *, set_var *);
1273.13.24 by Brian Aker
Updating style, simplified code.
51
typedef void (*sys_after_update_func)(Session *, sql_var_t);
52
typedef void (*sys_set_default_func)(Session *, sql_var_t);
520.1.22 by Brian Aker
Second pass of thd cleanup
53
typedef unsigned char *(*sys_value_ptr_func)(Session *session);
1 by brian
clean slate
54
1022.2.37 by Monty Taylor
Moved more tolower calls to setup rather than during runtime.
55
static const std::vector<std::string> empty_aliases;
1241.9.29 by Monty Taylor
Removed some globals from server_includes.
56
extern struct system_variables max_system_variables;
1241.9.33 by Monty Taylor
Moved most of the global vars to set_var where they belong.
57
extern size_t table_def_size;
58
1556.1.1 by Brian Aker
Updates for moving temporary directory.
59
extern std::string drizzle_tmpdir;
1241.9.33 by Monty Taylor
Moved most of the global vars to set_var where they belong.
60
extern const char *first_keyword;
61
extern const char *in_left_expr_name;
62
extern const char *in_additional_cond;
63
extern const char *in_having_cond;
64
extern char language[FN_REFLEN];
65
extern char glob_hostname[FN_REFLEN];
66
extern char drizzle_home[FN_REFLEN];
67
extern char pidfile_name[FN_REFLEN];
68
extern char system_time_zone[30];
69
extern char *opt_tc_log_file;
70
extern uint64_t session_startup_options;
1561.3.3 by Joe Daly
working SESSION_STATUS table
71
extern time_t server_start_time;
72
extern time_t flush_status_time;
1241.9.33 by Monty Taylor
Moved most of the global vars to set_var where they belong.
73
extern uint32_t global_thread_id;
74
extern uint64_t table_cache_size;
75
extern uint64_t max_connect_errors;
76
extern uint32_t back_log;
77
extern uint32_t ha_open_options;
78
extern char *drizzled_bind_host;
79
extern uint32_t dropping_tables;
80
extern bool opt_endinfo;
81
extern uint32_t volatile thread_running;
82
extern uint32_t volatile global_read_lock;
83
extern bool opt_readonly;
84
extern char* opt_secure_file_priv;
85
extern char *default_tz_name;
1555.1.1 by Joe Daly
fix to display scheduler in show variables
86
extern char *opt_scheduler;
1022.2.37 by Monty Taylor
Moved more tolower calls to setup rather than during runtime.
87
1410.3.4 by Djellel E. Difallah
update references to old my_'s
88
uint64_t fix_unsigned(Session *, uint64_t, const struct option *);
1280.1.10 by Monty Taylor
Put everything in drizzled into drizzled namespace.
89
1 by brian
clean slate
90
struct sys_var_chain
91
{
92
  sys_var *first;
93
  sys_var *last;
94
};
95
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.
96
/**
97
 * A class which represents a variable, either global or 
98
 * session-local.
99
 */
1 by brian
clean slate
100
class sys_var
101
{
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.
102
protected:
103
  const std::string name; /**< The name of the variable */
104
  sys_after_update_func after_update; /**< Function pointer triggered after the variable's value is updated */
1410.3.4 by Djellel E. Difallah
update references to old my_'s
105
  struct option *option_limits; /**< Updated by by set_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.
106
  bool m_allow_empty_value; /**< Does variable allow an empty value? */
1 by brian
clean slate
107
  sys_var *next;
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.
108
public:
1101.1.27 by Monty Taylor
Fixed the plugin string valgrind leak.
109
  sys_var(const std::string name_arg, sys_after_update_func func= NULL)
1055.2.20 by Jay Pipes
Refactors sys_var class -- doxygenates and documents the class members and functions. Protects all member variables and adds public getters/setters.
110
    :
111
    name(name_arg),
112
    after_update(func),
51.1.46 by Jay Pipes
Removed/replaced DBUG symbols and standardized TRUE/FALSE
113
    m_allow_empty_value(true)
1 by brian
clean slate
114
  {}
115
  virtual ~sys_var() {}
116
  void chain_sys_var(sys_var_chain *chain_arg)
117
  {
118
    if (chain_arg->last)
119
      chain_arg->last->next= this;
120
    else
121
      chain_arg->first= this;
122
    chain_arg->last= this;
123
  }
1022.2.37 by Monty Taylor
Moved more tolower calls to setup rather than during runtime.
124
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.
125
  /** 
126
   * Returns the name of the variable.
127
   *
128
   * @note 
129
   *
130
   * So that we can exist in a Registry. We really need to formalize that 
131
   */
132
  inline const std::string &getName() const
133
  {
134
    return name;
135
  }
136
  /**
137
   * Returns a vector of strings representing aliases
138
   * for this variable's name.
139
   */
140
  const std::vector<std::string>& getAliases() const
141
  {
142
    return empty_aliases;
143
  }
144
  /**
145
   * Returns a pointer to the next sys_var, or NULL if none.
146
   */
147
  inline sys_var *getNext() const
148
  {
149
    return next;
150
  }
151
  /**
152
   * Sets the pointer to the next sys_var.
153
   *
154
   * @param Pointer to the next sys_var, or NULL if you set the tail...
155
   */
156
  inline void setNext(sys_var *in_next)
157
  {
158
    next= in_next;
159
  }
160
  /**
161
   * Returns a pointer to the variable's option limits
162
   */
1410.3.4 by Djellel E. Difallah
update references to old my_'s
163
  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.
164
  {
165
    return option_limits;
166
  }
167
  /**
168
   * Sets the pointer to the variable's option limits
169
   *
1410.3.4 by Djellel E. Difallah
update references to old my_'s
170
   * @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.
171
   */
1410.3.4 by Djellel E. Difallah
update references to old my_'s
172
  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.
173
  {
174
    option_limits= in_option_limits;
175
  }
176
  /** 
177
   * Returns the function pointer for after update trigger, or NULL if none.
178
   */
179
  inline sys_after_update_func getAfterUpdateTrigger() const
180
  {
181
    return after_update;
182
  }
520.1.22 by Brian Aker
Second pass of thd cleanup
183
  virtual bool check(Session *session, set_var *var);
184
  bool check_enum(Session *session, set_var *var, const TYPELIB *enum_names);
185
  virtual bool update(Session *session, set_var *var)=0;
1273.13.24 by Brian Aker
Updating style, simplified code.
186
  virtual void set_default(Session *, sql_var_t)
77.1.7 by Monty Taylor
Heap builds clean.
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
  virtual SHOW_TYPE show_type()
189
  {
190
    return SHOW_UNDEF;
191
  }
1273.13.24 by Brian Aker
Updating style, simplified code.
192
  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.
193
  {
194
    return 0;
195
  }
1273.13.24 by Brian Aker
Updating style, simplified code.
196
  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.
197
  {
198
    return type != OPT_GLOBAL;
199
  }		/* Error if not GLOBAL */
1 by brian
clean slate
200
  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.
201
  {
202
    return type != INT_RESULT;
203
  }		/* Assume INT */
1273.13.24 by Brian Aker
Updating style, simplified code.
204
  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.
205
  {
206
    return option_limits == 0;
207
  }
1273.13.24 by Brian Aker
Updating style, simplified code.
208
  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.
209
  virtual bool is_readonly() const
210
  {
211
    return 0;
212
  }
213
  virtual sys_var_pluginvar *cast_pluginvar()
214
  {
215
    return 0;
216
  }
1 by brian
clean slate
217
};
218
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.
219
/**
220
 * A base class for all variables that require its access to
221
 * be guarded with a mutex.
222
 */
1 by brian
clean slate
223
class sys_var_global: public sys_var
224
{
225
protected:
226
  pthread_mutex_t *guard;
227
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.
228
  sys_var_global(const char *name_arg,
229
                 sys_after_update_func after_update_arg,
1 by brian
clean slate
230
                 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.
231
    :
232
      sys_var(name_arg, after_update_arg), 
233
      guard(guard_arg) 
234
  {}
1 by brian
clean slate
235
};
236
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.
237
class sys_var_uint32_t_ptr :public sys_var
238
{
239
  uint32_t *value;
240
public:
241
  sys_var_uint32_t_ptr(sys_var_chain *chain, const char *name_arg,
242
                       uint32_t *value_ptr_arg)
243
    :sys_var(name_arg),value(value_ptr_arg)
244
  { chain_sys_var(chain); }
245
  sys_var_uint32_t_ptr(sys_var_chain *chain, const char *name_arg,
246
                       uint32_t *value_ptr_arg,
247
                       sys_after_update_func func)
248
    :sys_var(name_arg,func), value(value_ptr_arg)
249
  { chain_sys_var(chain); }
910.4.10 by Stewart Smith
fix system variables for correct endian architectures.
250
  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.
251
  bool update(Session *session, set_var *var);
1273.13.24 by Brian Aker
Updating style, simplified code.
252
  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
253
  SHOW_TYPE show_type() { return SHOW_INT; }
1273.13.24 by Brian Aker
Updating style, simplified code.
254
  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.
255
  { return (unsigned char*) value; }
256
};
257
258
151 by Brian Aker
Ulonglong to uint64_t
259
class sys_var_uint64_t_ptr :public sys_var
1 by brian
clean slate
260
{
151 by Brian Aker
Ulonglong to uint64_t
261
  uint64_t *value;
10 by Brian Aker
Start of var cleanup (really.... looking at this code the entire thing needs
262
public:
151 by Brian Aker
Ulonglong to uint64_t
263
  sys_var_uint64_t_ptr(sys_var_chain *chain, const char *name_arg, uint64_t *value_ptr_arg)
1 by brian
clean slate
264
    :sys_var(name_arg),value(value_ptr_arg)
265
  { chain_sys_var(chain); }
151 by Brian Aker
Ulonglong to uint64_t
266
  sys_var_uint64_t_ptr(sys_var_chain *chain, const char *name_arg, uint64_t *value_ptr_arg,
1 by brian
clean slate
267
		       sys_after_update_func func)
268
    :sys_var(name_arg,func), value(value_ptr_arg)
269
  { chain_sys_var(chain); }
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);
1 by brian
clean slate
272
  SHOW_TYPE show_type() { return SHOW_LONGLONG; }
1273.13.24 by Brian Aker
Updating style, simplified code.
273
  unsigned char *value_ptr(Session *, sql_var_t,
779.3.10 by Monty Taylor
Turned on -Wshadow.
274
                           const LEX_STRING *)
481 by Brian Aker
Remove all of uchar.
275
  { return (unsigned char*) value; }
1 by brian
clean slate
276
};
277
629.4.1 by Monty Taylor
First step in support size_t sys_var stuff.
278
class sys_var_size_t_ptr :public sys_var
279
{
280
  size_t *value;
281
public:
282
  sys_var_size_t_ptr(sys_var_chain *chain, const char *name_arg, size_t *value_ptr_arg)
283
    :sys_var(name_arg),value(value_ptr_arg)
284
  { chain_sys_var(chain); }
285
  sys_var_size_t_ptr(sys_var_chain *chain, const char *name_arg, size_t *value_ptr_arg,
286
                     sys_after_update_func func)
287
    :sys_var(name_arg,func), value(value_ptr_arg)
288
  { chain_sys_var(chain); }
289
  bool update(Session *session, set_var *var);
1273.13.24 by Brian Aker
Updating style, simplified code.
290
  void set_default(Session *session, sql_var_t type);
629.4.1 by Monty Taylor
First step in support size_t sys_var stuff.
291
  SHOW_TYPE show_type() { return SHOW_SIZE; }
1273.13.24 by Brian Aker
Updating style, simplified code.
292
  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.
293
  { return (unsigned char*) value; }
294
};
1 by brian
clean slate
295
296
class sys_var_bool_ptr :public sys_var
297
{
298
public:
146 by Brian Aker
my_bool cleanup.
299
  bool *value;
147 by Brian Aker
More my_bool conversion. This time the set_var class.
300
  sys_var_bool_ptr(sys_var_chain *chain, const char *name_arg, bool *value_arg)
146 by Brian Aker
my_bool cleanup.
301
    :sys_var(name_arg),value(value_arg)
302
  { chain_sys_var(chain); }
520.1.22 by Brian Aker
Second pass of thd cleanup
303
  bool check(Session *session, set_var *var)
146 by Brian Aker
my_bool cleanup.
304
  {
520.1.22 by Brian Aker
Second pass of thd cleanup
305
    return check_enum(session, var, &bool_typelib);
146 by Brian Aker
my_bool cleanup.
306
  }
520.1.22 by Brian Aker
Second pass of thd cleanup
307
  bool update(Session *session, set_var *var);
1273.13.24 by Brian Aker
Updating style, simplified code.
308
  void set_default(Session *session, sql_var_t type);
146 by Brian Aker
my_bool cleanup.
309
  SHOW_TYPE show_type() { return SHOW_MY_BOOL; }
1273.13.24 by Brian Aker
Updating style, simplified code.
310
  unsigned char *value_ptr(Session *, sql_var_t, const LEX_STRING *)
481 by Brian Aker
Remove all of uchar.
311
  { return (unsigned char*) value; }
644 by Brian Aker
Clean up warnings for Solaris.
312
  bool check_update_type(Item_result)
146 by Brian Aker
my_bool cleanup.
313
  { return 0; }
314
};
315
1 by brian
clean slate
316
class sys_var_bool_ptr_readonly :public sys_var_bool_ptr
317
{
318
public:
319
  sys_var_bool_ptr_readonly(sys_var_chain *chain, const char *name_arg,
147 by Brian Aker
More my_bool conversion. This time the set_var class.
320
                            bool *value_arg)
1 by brian
clean slate
321
    :sys_var_bool_ptr(chain, name_arg, value_arg)
322
  {}
323
  bool is_readonly() const { return 1; }
324
};
325
326
327
class sys_var_str :public sys_var
328
{
329
public:
330
  char *value;					// Pointer to allocated string
482 by Brian Aker
Remove uint.
331
  uint32_t value_length;
1 by brian
clean slate
332
  sys_check_func check_func;
333
  sys_update_func update_func;
334
  sys_set_default_func set_default_func;
335
  sys_var_str(sys_var_chain *chain, const char *name_arg,
336
	      sys_check_func check_func_arg,
337
	      sys_update_func update_func_arg,
338
	      sys_set_default_func set_default_func_arg,
339
              char *value_arg)
340
    :sys_var(name_arg), value(value_arg), check_func(check_func_arg),
341
    update_func(update_func_arg),set_default_func(set_default_func_arg)
342
  { chain_sys_var(chain); }
520.1.22 by Brian Aker
Second pass of thd cleanup
343
  bool check(Session *session, set_var *var);
344
  bool update(Session *session, set_var *var)
1 by brian
clean slate
345
  {
520.1.22 by Brian Aker
Second pass of thd cleanup
346
    return (*update_func)(session, var);
1 by brian
clean slate
347
  }
1273.13.24 by Brian Aker
Updating style, simplified code.
348
  void set_default(Session *session, sql_var_t type)
1 by brian
clean slate
349
  {
520.1.22 by Brian Aker
Second pass of thd cleanup
350
    (*set_default_func)(session, type);
1 by brian
clean slate
351
  }
352
  SHOW_TYPE show_type() { return SHOW_CHAR; }
1273.13.24 by Brian Aker
Updating style, simplified code.
353
  unsigned char *value_ptr(Session *, sql_var_t, const LEX_STRING *)
481 by Brian Aker
Remove all of uchar.
354
  { return (unsigned char*) value; }
1 by brian
clean slate
355
  bool check_update_type(Item_result type)
356
  {
357
    return type != STRING_RESULT;		/* Only accept strings */
358
  }
1273.13.24 by Brian Aker
Updating style, simplified code.
359
  bool check_default(sql_var_t)
77.1.7 by Monty Taylor
Heap builds clean.
360
  { return 0; }
1 by brian
clean slate
361
};
362
363
364
class sys_var_const_str :public sys_var
365
{
366
  char *value;					// Pointer to const value
10 by Brian Aker
Start of var cleanup (really.... looking at this code the entire thing needs
367
public:
1 by brian
clean slate
368
  sys_var_const_str(sys_var_chain *chain, const char *name_arg,
369
                    const char *value_arg)
370
    :sys_var(name_arg), value((char*) value_arg)
371
  { chain_sys_var(chain); }
10 by Brian Aker
Start of var cleanup (really.... looking at this code the entire thing needs
372
  inline void set (char *new_value)
373
  {
374
    value= new_value;
375
  }
644 by Brian Aker
Clean up warnings for Solaris.
376
  bool check(Session *, set_var *)
1 by brian
clean slate
377
  {
378
    return 1;
379
  }
644 by Brian Aker
Clean up warnings for Solaris.
380
  bool update(Session *, set_var *)
1 by brian
clean slate
381
  {
382
    return 1;
383
  }
384
  SHOW_TYPE show_type() { return SHOW_CHAR; }
1273.13.24 by Brian Aker
Updating style, simplified code.
385
  unsigned char *value_ptr(Session *, sql_var_t, const LEX_STRING *)
1 by brian
clean slate
386
  {
481 by Brian Aker
Remove all of uchar.
387
    return (unsigned char*) value;
1 by brian
clean slate
388
  }
644 by Brian Aker
Clean up warnings for Solaris.
389
  bool check_update_type(Item_result)
1 by brian
clean slate
390
  {
391
    return 1;
392
  }
1273.13.24 by Brian Aker
Updating style, simplified code.
393
  bool check_default(sql_var_t)
77.1.7 by Monty Taylor
Heap builds clean.
394
  { return 1; }
1 by brian
clean slate
395
  bool is_readonly() const { return 1; }
396
};
397
398
399
class sys_var_const_str_ptr :public sys_var
400
{
401
  char **value;					// Pointer to const value
10 by Brian Aker
Start of var cleanup (really.... looking at this code the entire thing needs
402
public:
1 by brian
clean slate
403
  sys_var_const_str_ptr(sys_var_chain *chain, const char *name_arg, char **value_arg)
404
    :sys_var(name_arg),value(value_arg)
405
  { chain_sys_var(chain); }
644 by Brian Aker
Clean up warnings for Solaris.
406
  bool check(Session *, set_var *)
1 by brian
clean slate
407
  {
408
    return 1;
409
  }
644 by Brian Aker
Clean up warnings for Solaris.
410
  bool update(Session *, set_var *)
1 by brian
clean slate
411
  {
412
    return 1;
413
  }
414
  SHOW_TYPE show_type() { return SHOW_CHAR; }
1273.13.24 by Brian Aker
Updating style, simplified code.
415
  unsigned char *value_ptr(Session *, sql_var_t, const LEX_STRING *)
1 by brian
clean slate
416
  {
481 by Brian Aker
Remove all of uchar.
417
    return (unsigned char*) *value;
1 by brian
clean slate
418
  }
644 by Brian Aker
Clean up warnings for Solaris.
419
  bool check_update_type(Item_result)
1 by brian
clean slate
420
  {
421
    return 1;
422
  }
1273.13.24 by Brian Aker
Updating style, simplified code.
423
  bool check_default(sql_var_t)
77.1.7 by Monty Taylor
Heap builds clean.
424
  { return 1; }
425
  bool is_readonly(void) const { return 1; }
1 by brian
clean slate
426
};
427
428
520.1.22 by Brian Aker
Second pass of thd cleanup
429
class sys_var_session :public sys_var
1 by brian
clean slate
430
{
431
public:
660.1.3 by Eric Herman
removed trailing whitespace with simple script:
432
  sys_var_session(const char *name_arg,
1018 by Brian Aker
Remove "BINLOG" from variables (we don't need this for our replication).
433
              sys_after_update_func func= NULL)
434
    :sys_var(name_arg, func)
1 by brian
clean slate
435
  {}
1273.13.24 by Brian Aker
Updating style, simplified code.
436
  bool check_type(sql_var_t)
77.1.7 by Monty Taylor
Heap builds clean.
437
  { return 0; }
1273.13.24 by Brian Aker
Updating style, simplified code.
438
  bool check_default(sql_var_t type)
1 by brian
clean slate
439
  {
440
    return type == OPT_GLOBAL && !option_limits;
441
  }
442
};
443
615 by Brian Aker
Added 32bit system variable support
444
class sys_var_session_uint32_t :public sys_var_session
445
{
446
  sys_check_func check_func;
447
public:
1273.13.75 by Brian Aker
Remove dead globals related to my_sys.
448
  uint32_t system_variables::*offset;
615 by Brian Aker
Added 32bit system variable support
449
  sys_var_session_uint32_t(sys_var_chain *chain, const char *name_arg,
1273.13.75 by Brian Aker
Remove dead globals related to my_sys.
450
                           uint32_t system_variables::*offset_arg,
615 by Brian Aker
Added 32bit system variable support
451
                           sys_check_func c_func= NULL,
1018 by Brian Aker
Remove "BINLOG" from variables (we don't need this for our replication).
452
                           sys_after_update_func au_func= NULL)
453
    :sys_var_session(name_arg, au_func), check_func(c_func),
615 by Brian Aker
Added 32bit system variable support
454
    offset(offset_arg)
455
  { chain_sys_var(chain); }
456
  bool check(Session *session, set_var *var);
457
  bool update(Session *session, set_var *var);
1273.13.24 by Brian Aker
Updating style, simplified code.
458
  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
459
  SHOW_TYPE show_type() { return SHOW_INT; }
1273.13.24 by Brian Aker
Updating style, simplified code.
460
  unsigned char *value_ptr(Session *session, sql_var_t type,
779.3.10 by Monty Taylor
Turned on -Wshadow.
461
                           const LEX_STRING *base);
615 by Brian Aker
Added 32bit system variable support
462
};
463
1 by brian
clean slate
464
520.1.22 by Brian Aker
Second pass of thd cleanup
465
class sys_var_session_ha_rows :public sys_var_session
1 by brian
clean slate
466
{
467
public:
1273.13.75 by Brian Aker
Remove dead globals related to my_sys.
468
  ha_rows system_variables::*offset;
660.1.3 by Eric Herman
removed trailing whitespace with simple script:
469
  sys_var_session_ha_rows(sys_var_chain *chain, const char *name_arg,
1273.13.75 by Brian Aker
Remove dead globals related to my_sys.
470
                      ha_rows system_variables::*offset_arg)
520.1.22 by Brian Aker
Second pass of thd cleanup
471
    :sys_var_session(name_arg), offset(offset_arg)
1 by brian
clean slate
472
  { chain_sys_var(chain); }
660.1.3 by Eric Herman
removed trailing whitespace with simple script:
473
  sys_var_session_ha_rows(sys_var_chain *chain, const char *name_arg,
1273.13.75 by Brian Aker
Remove dead globals related to my_sys.
474
                      ha_rows system_variables::*offset_arg,
1 by brian
clean slate
475
		      sys_after_update_func func)
520.1.22 by Brian Aker
Second pass of thd cleanup
476
    :sys_var_session(name_arg,func), offset(offset_arg)
1 by brian
clean slate
477
  { chain_sys_var(chain); }
520.1.22 by Brian Aker
Second pass of thd cleanup
478
  bool update(Session *session, set_var *var);
1273.13.24 by Brian Aker
Updating style, simplified code.
479
  void set_default(Session *session, sql_var_t type);
1 by brian
clean slate
480
  SHOW_TYPE show_type() { return SHOW_HA_ROWS; }
1273.13.24 by Brian Aker
Updating style, simplified code.
481
  unsigned char *value_ptr(Session *session, sql_var_t type,
779.3.10 by Monty Taylor
Turned on -Wshadow.
482
                           const LEX_STRING *base);
1 by brian
clean slate
483
};
484
485
520.1.22 by Brian Aker
Second pass of thd cleanup
486
class sys_var_session_uint64_t :public sys_var_session
1 by brian
clean slate
487
{
555 by Monty
Fixed 32-bit issues.
488
  sys_check_func check_func;
1 by brian
clean slate
489
public:
1273.13.75 by Brian Aker
Remove dead globals related to my_sys.
490
  uint64_t system_variables::*offset;
1 by brian
clean slate
491
  bool only_global;
1018 by Brian Aker
Remove "BINLOG" from variables (we don't need this for our replication).
492
  sys_var_session_uint64_t(sys_var_chain *chain, 
493
                           const char *name_arg,
1273.13.75 by Brian Aker
Remove dead globals related to my_sys.
494
                           uint64_t system_variables::*offset_arg,
555 by Monty
Fixed 32-bit issues.
495
                           sys_after_update_func au_func= NULL,
1018 by Brian Aker
Remove "BINLOG" from variables (we don't need this for our replication).
496
                           sys_check_func c_func= NULL)
497
    :sys_var_session(name_arg, au_func),
617 by Brian Aker
ulong fixes
498
    check_func(c_func),
499
    offset(offset_arg)
500
  { chain_sys_var(chain); }
660.1.3 by Eric Herman
removed trailing whitespace with simple script:
501
  sys_var_session_uint64_t(sys_var_chain *chain,
502
                           const char *name_arg,
1273.13.75 by Brian Aker
Remove dead globals related to my_sys.
503
                           uint64_t system_variables::*offset_arg,
660.1.3 by Eric Herman
removed trailing whitespace with simple script:
504
                           sys_after_update_func func,
617 by Brian Aker
ulong fixes
505
                           bool only_global_arg,
506
                           sys_check_func cfunc= NULL)
555 by Monty
Fixed 32-bit issues.
507
    :sys_var_session(name_arg, func),
508
    check_func(cfunc),
509
    offset(offset_arg),
1 by brian
clean slate
510
    only_global(only_global_arg)
511
  { chain_sys_var(chain); }
520.1.22 by Brian Aker
Second pass of thd cleanup
512
  bool update(Session *session, set_var *var);
1273.13.24 by Brian Aker
Updating style, simplified code.
513
  void set_default(Session *session, sql_var_t type);
1 by brian
clean slate
514
  SHOW_TYPE show_type() { return SHOW_LONGLONG; }
1273.13.24 by Brian Aker
Updating style, simplified code.
515
  unsigned char *value_ptr(Session *session, sql_var_t type,
779.3.10 by Monty Taylor
Turned on -Wshadow.
516
                           const LEX_STRING *base);
520.1.22 by Brian Aker
Second pass of thd cleanup
517
  bool check(Session *session, set_var *var);
1273.13.24 by Brian Aker
Updating style, simplified code.
518
  bool check_default(sql_var_t type)
1 by brian
clean slate
519
  {
520
    return type == OPT_GLOBAL && !option_limits;
521
  }
1273.13.24 by Brian Aker
Updating style, simplified code.
522
  bool check_type(sql_var_t type)
1 by brian
clean slate
523
  {
524
    return (only_global && type != OPT_GLOBAL);
525
  }
526
};
527
629.4.1 by Monty Taylor
First step in support size_t sys_var stuff.
528
class sys_var_session_size_t :public sys_var_session
529
{
530
  sys_check_func check_func;
531
public:
1273.13.75 by Brian Aker
Remove dead globals related to my_sys.
532
  size_t system_variables::*offset;
629.4.1 by Monty Taylor
First step in support size_t sys_var stuff.
533
  bool only_global;
534
  sys_var_session_size_t(sys_var_chain *chain, const char *name_arg,
1273.13.75 by Brian Aker
Remove dead globals related to my_sys.
535
                         size_t system_variables::*offset_arg,
629.4.1 by Monty Taylor
First step in support size_t sys_var stuff.
536
                         sys_after_update_func au_func= NULL,
1018 by Brian Aker
Remove "BINLOG" from variables (we don't need this for our replication).
537
                         sys_check_func c_func= NULL)
538
    :sys_var_session(name_arg, au_func),
629.4.1 by Monty Taylor
First step in support size_t sys_var stuff.
539
     check_func(c_func),
540
     offset(offset_arg)
541
  { chain_sys_var(chain); }
660.1.3 by Eric Herman
removed trailing whitespace with simple script:
542
  sys_var_session_size_t(sys_var_chain *chain,
543
                         const char *name_arg,
1273.13.75 by Brian Aker
Remove dead globals related to my_sys.
544
                         size_t system_variables::*offset_arg,
660.1.3 by Eric Herman
removed trailing whitespace with simple script:
545
                         sys_after_update_func func,
629.4.1 by Monty Taylor
First step in support size_t sys_var stuff.
546
                         bool only_global_arg,
547
                         sys_check_func cfunc= NULL)
548
    :sys_var_session(name_arg, func),
549
     check_func(cfunc),
550
     offset(offset_arg),
551
     only_global(only_global_arg)
552
  { chain_sys_var(chain); }
553
  bool update(Session *session, set_var *var);
1273.13.24 by Brian Aker
Updating style, simplified code.
554
  void set_default(Session *session, sql_var_t type);
629.4.1 by Monty Taylor
First step in support size_t sys_var stuff.
555
  SHOW_TYPE show_type() { return SHOW_SIZE; }
1273.13.24 by Brian Aker
Updating style, simplified code.
556
  unsigned char *value_ptr(Session *session, sql_var_t type,
779.3.10 by Monty Taylor
Turned on -Wshadow.
557
                           const LEX_STRING *base);
629.4.1 by Monty Taylor
First step in support size_t sys_var stuff.
558
  bool check(Session *session, set_var *var);
1273.13.24 by Brian Aker
Updating style, simplified code.
559
  bool check_default(sql_var_t type)
629.4.1 by Monty Taylor
First step in support size_t sys_var stuff.
560
  {
561
    return type == OPT_GLOBAL && !option_limits;
562
  }
1273.13.24 by Brian Aker
Updating style, simplified code.
563
  bool check_type(sql_var_t type)
629.4.1 by Monty Taylor
First step in support size_t sys_var stuff.
564
  {
565
    return (only_global && type != OPT_GLOBAL);
566
  }
567
};
568
1 by brian
clean slate
569
520.1.22 by Brian Aker
Second pass of thd cleanup
570
class sys_var_session_bool :public sys_var_session
1 by brian
clean slate
571
{
572
public:
1273.13.75 by Brian Aker
Remove dead globals related to my_sys.
573
  bool system_variables::*offset;
574
  sys_var_session_bool(sys_var_chain *chain, const char *name_arg, bool system_variables::*offset_arg)
520.1.22 by Brian Aker
Second pass of thd cleanup
575
    :sys_var_session(name_arg), offset(offset_arg)
1 by brian
clean slate
576
  { chain_sys_var(chain); }
1273.13.75 by Brian Aker
Remove dead globals related to my_sys.
577
  sys_var_session_bool(sys_var_chain *chain, const char *name_arg, bool system_variables::*offset_arg,
1 by brian
clean slate
578
		   sys_after_update_func func)
520.1.22 by Brian Aker
Second pass of thd cleanup
579
    :sys_var_session(name_arg,func), offset(offset_arg)
1 by brian
clean slate
580
  { chain_sys_var(chain); }
520.1.22 by Brian Aker
Second pass of thd cleanup
581
  bool update(Session *session, set_var *var);
1273.13.24 by Brian Aker
Updating style, simplified code.
582
  void set_default(Session *session, sql_var_t type);
1 by brian
clean slate
583
  SHOW_TYPE show_type() { return SHOW_MY_BOOL; }
1273.13.24 by Brian Aker
Updating style, simplified code.
584
  unsigned char *value_ptr(Session *session, sql_var_t type,
779.3.10 by Monty Taylor
Turned on -Wshadow.
585
                           const LEX_STRING *base);
520.1.22 by Brian Aker
Second pass of thd cleanup
586
  bool check(Session *session, set_var *var)
1 by brian
clean slate
587
  {
520.1.22 by Brian Aker
Second pass of thd cleanup
588
    return check_enum(session, var, &bool_typelib);
1 by brian
clean slate
589
  }
644 by Brian Aker
Clean up warnings for Solaris.
590
  bool check_update_type(Item_result)
77.1.7 by Monty Taylor
Heap builds clean.
591
  { return 0; }
1 by brian
clean slate
592
};
593
594
520.1.22 by Brian Aker
Second pass of thd cleanup
595
class sys_var_session_enum :public sys_var_session
1 by brian
clean slate
596
{
597
protected:
1273.13.75 by Brian Aker
Remove dead globals related to my_sys.
598
  uint32_t system_variables::*offset;
1 by brian
clean slate
599
  TYPELIB *enum_names;
600
  sys_check_func check_func;
601
public:
520.1.22 by Brian Aker
Second pass of thd cleanup
602
  sys_var_session_enum(sys_var_chain *chain, const char *name_arg,
1273.13.75 by Brian Aker
Remove dead globals related to my_sys.
603
                   uint32_t system_variables::*offset_arg, TYPELIB *typelib,
1 by brian
clean slate
604
                   sys_after_update_func func= NULL,
801.1.1 by Brian Aker
Solaris build error fix.
605
                   sys_check_func check_f= NULL)
520.1.22 by Brian Aker
Second pass of thd cleanup
606
    :sys_var_session(name_arg, func), offset(offset_arg),
801.1.1 by Brian Aker
Solaris build error fix.
607
    enum_names(typelib), check_func(check_f)
1 by brian
clean slate
608
  { chain_sys_var(chain); }
520.1.22 by Brian Aker
Second pass of thd cleanup
609
  bool check(Session *session, set_var *var)
1 by brian
clean slate
610
  {
611
    int ret= 0;
612
    if (check_func)
520.1.22 by Brian Aker
Second pass of thd cleanup
613
      ret= (*check_func)(session, var);
614
    return ret ? ret : check_enum(session, var, enum_names);
1 by brian
clean slate
615
  }
520.1.22 by Brian Aker
Second pass of thd cleanup
616
  bool update(Session *session, set_var *var);
1273.13.24 by Brian Aker
Updating style, simplified code.
617
  void set_default(Session *session, sql_var_t type);
1 by brian
clean slate
618
  SHOW_TYPE show_type() { return SHOW_CHAR; }
1273.13.24 by Brian Aker
Updating style, simplified code.
619
  unsigned char *value_ptr(Session *session, sql_var_t type,
779.3.10 by Monty Taylor
Turned on -Wshadow.
620
                           const LEX_STRING *base);
644 by Brian Aker
Clean up warnings for Solaris.
621
  bool check_update_type(Item_result)
77.1.7 by Monty Taylor
Heap builds clean.
622
  { return 0; }
1 by brian
clean slate
623
};
624
625
520.1.22 by Brian Aker
Second pass of thd cleanup
626
class sys_var_session_storage_engine :public sys_var_session
1 by brian
clean slate
627
{
628
protected:
1273.13.75 by Brian Aker
Remove dead globals related to my_sys.
629
  plugin::StorageEngine *system_variables::*offset;
1 by brian
clean slate
630
public:
660.1.3 by Eric Herman
removed trailing whitespace with simple script:
631
  sys_var_session_storage_engine(sys_var_chain *chain, const char *name_arg,
1273.13.75 by Brian Aker
Remove dead globals related to my_sys.
632
                                 plugin::StorageEngine *system_variables::*offset_arg)
520.1.22 by Brian Aker
Second pass of thd cleanup
633
    :sys_var_session(name_arg), offset(offset_arg)
1 by brian
clean slate
634
  { chain_sys_var(chain); }
520.1.22 by Brian Aker
Second pass of thd cleanup
635
  bool check(Session *session, set_var *var);
1 by brian
clean slate
636
  SHOW_TYPE show_type() { return SHOW_CHAR; }
637
  bool check_update_type(Item_result type)
638
  {
639
    return type != STRING_RESULT;		/* Only accept strings */
640
  }
1273.13.24 by Brian Aker
Updating style, simplified code.
641
  void set_default(Session *session, sql_var_t type);
520.1.22 by Brian Aker
Second pass of thd cleanup
642
  bool update(Session *session, set_var *var);
1273.13.24 by Brian Aker
Updating style, simplified code.
643
  unsigned char *value_ptr(Session *session, sql_var_t type,
779.3.10 by Monty Taylor
Turned on -Wshadow.
644
                           const LEX_STRING *base);
1 by brian
clean slate
645
};
646
520.1.22 by Brian Aker
Second pass of thd cleanup
647
class sys_var_session_bit :public sys_var_session
1 by brian
clean slate
648
{
649
  sys_check_func check_func;
650
  sys_update_func update_func;
651
public:
151 by Brian Aker
Ulonglong to uint64_t
652
  uint64_t bit_flag;
1 by brian
clean slate
653
  bool reverse;
520.1.22 by Brian Aker
Second pass of thd cleanup
654
  sys_var_session_bit(sys_var_chain *chain, const char *name_arg,
1 by brian
clean slate
655
                  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).
656
                  uint64_t bit, bool reverse_arg=0)
657
    :sys_var_session(name_arg, NULL), check_func(c_func),
1 by brian
clean slate
658
    update_func(u_func), bit_flag(bit), reverse(reverse_arg)
659
  { chain_sys_var(chain); }
520.1.22 by Brian Aker
Second pass of thd cleanup
660
  bool check(Session *session, set_var *var);
661
  bool update(Session *session, set_var *var);
644 by Brian Aker
Clean up warnings for Solaris.
662
  bool check_update_type(Item_result)
77.1.7 by Monty Taylor
Heap builds clean.
663
  { return 0; }
1273.13.24 by Brian Aker
Updating style, simplified code.
664
  bool check_type(sql_var_t type) { return type == OPT_GLOBAL; }
1 by brian
clean slate
665
  SHOW_TYPE show_type() { return SHOW_MY_BOOL; }
1273.13.24 by Brian Aker
Updating style, simplified code.
666
  unsigned char *value_ptr(Session *session, sql_var_t type,
779.3.10 by Monty Taylor
Turned on -Wshadow.
667
                           const LEX_STRING *base);
1 by brian
clean slate
668
};
669
670
/* some variables that require special handling */
671
672
class sys_var_timestamp :public sys_var
673
{
674
public:
1018 by Brian Aker
Remove "BINLOG" from variables (we don't need this for our replication).
675
  sys_var_timestamp(sys_var_chain *chain, const char *name_arg)
676
    :sys_var(name_arg, NULL)
1 by brian
clean slate
677
  { chain_sys_var(chain); }
520.1.22 by Brian Aker
Second pass of thd cleanup
678
  bool update(Session *session, set_var *var);
1273.13.24 by Brian Aker
Updating style, simplified code.
679
  void set_default(Session *session, sql_var_t type);
680
  bool check_type(sql_var_t type)    { return type == OPT_GLOBAL; }
681
  bool check_default(sql_var_t)
77.1.7 by Monty Taylor
Heap builds clean.
682
  { return 0; }
683
  SHOW_TYPE show_type(void) { return SHOW_LONG; }
1273.13.24 by Brian Aker
Updating style, simplified code.
684
  unsigned char *value_ptr(Session *session, sql_var_t type,
779.3.10 by Monty Taylor
Turned on -Wshadow.
685
                           const LEX_STRING *base);
1 by brian
clean slate
686
};
687
688
689
class sys_var_last_insert_id :public sys_var
690
{
691
public:
1018 by Brian Aker
Remove "BINLOG" from variables (we don't need this for our replication).
692
  sys_var_last_insert_id(sys_var_chain *chain, const char *name_arg)
693
    :sys_var(name_arg, NULL)
1 by brian
clean slate
694
  { chain_sys_var(chain); }
520.1.22 by Brian Aker
Second pass of thd cleanup
695
  bool update(Session *session, set_var *var);
1273.13.24 by Brian Aker
Updating style, simplified code.
696
  bool check_type(sql_var_t type) { return type == OPT_GLOBAL; }
1 by brian
clean slate
697
  SHOW_TYPE show_type() { return SHOW_LONGLONG; }
1273.13.24 by Brian Aker
Updating style, simplified code.
698
  unsigned char *value_ptr(Session *session, sql_var_t type,
779.3.10 by Monty Taylor
Turned on -Wshadow.
699
                           const LEX_STRING *base);
1 by brian
clean slate
700
};
701
702
520.1.22 by Brian Aker
Second pass of thd cleanup
703
class sys_var_collation :public sys_var_session
1 by brian
clean slate
704
{
705
public:
1018 by Brian Aker
Remove "BINLOG" from variables (we don't need this for our replication).
706
  sys_var_collation(const char *name_arg)
707
    :sys_var_session(name_arg, NULL)
744 by Brian Aker
Removing dead code around one shot.
708
  { }
520.1.22 by Brian Aker
Second pass of thd cleanup
709
  bool check(Session *session, set_var *var);
1 by brian
clean slate
710
  SHOW_TYPE show_type() { return SHOW_CHAR; }
711
  bool check_update_type(Item_result type)
712
  {
713
    return ((type != STRING_RESULT) && (type != INT_RESULT));
714
  }
1273.13.24 by Brian Aker
Updating style, simplified code.
715
  bool check_default(sql_var_t) { return 0; }
716
  virtual void set_default(Session *session, sql_var_t type)= 0;
1 by brian
clean slate
717
};
718
719
class sys_var_collation_sv :public sys_var_collation
720
{
1273.13.75 by Brian Aker
Remove dead globals related to my_sys.
721
  const CHARSET_INFO *system_variables::*offset;
264.2.6 by Andrey Hristov
Constify the usage of CHARSET_INFO almost to the last place in the code.
722
  const CHARSET_INFO **global_default;
1 by brian
clean slate
723
public:
724
  sys_var_collation_sv(sys_var_chain *chain, const char *name_arg,
1273.13.75 by Brian Aker
Remove dead globals related to my_sys.
725
                       const CHARSET_INFO *system_variables::*offset_arg,
1018 by Brian Aker
Remove "BINLOG" from variables (we don't need this for our replication).
726
                       const CHARSET_INFO **global_default_arg)
727
    :sys_var_collation(name_arg),
1 by brian
clean slate
728
    offset(offset_arg), global_default(global_default_arg)
729
  {
730
    chain_sys_var(chain);
731
  }
520.1.22 by Brian Aker
Second pass of thd cleanup
732
  bool update(Session *session, set_var *var);
1273.13.24 by Brian Aker
Updating style, simplified code.
733
  void set_default(Session *session, sql_var_t type);
734
  unsigned char *value_ptr(Session *session, sql_var_t type,
779.3.10 by Monty Taylor
Turned on -Wshadow.
735
                           const LEX_STRING *base);
1 by brian
clean slate
736
};
737
738
/* Variable that you can only read from */
739
740
class sys_var_readonly: public sys_var
741
{
742
public:
1273.13.24 by Brian Aker
Updating style, simplified code.
743
  sql_var_t var_type;
1 by brian
clean slate
744
  SHOW_TYPE show_type_value;
745
  sys_value_ptr_func value_ptr_func;
1273.13.24 by Brian Aker
Updating style, simplified code.
746
  sys_var_readonly(sys_var_chain *chain, const char *name_arg, sql_var_t type,
1 by brian
clean slate
747
		   SHOW_TYPE show_type_arg,
748
		   sys_value_ptr_func value_ptr_func_arg)
660.1.3 by Eric Herman
removed trailing whitespace with simple script:
749
    :sys_var(name_arg), var_type(type),
1 by brian
clean slate
750
       show_type_value(show_type_arg), value_ptr_func(value_ptr_func_arg)
751
  { chain_sys_var(chain); }
644 by Brian Aker
Clean up warnings for Solaris.
752
  bool update(Session *, set_var *)
77.1.7 by Monty Taylor
Heap builds clean.
753
  { return 1; }
1273.13.24 by Brian Aker
Updating style, simplified code.
754
  bool check_default(sql_var_t)
77.1.7 by Monty Taylor
Heap builds clean.
755
  { return 1; }
1273.13.24 by Brian Aker
Updating style, simplified code.
756
  bool check_type(sql_var_t type) { return type != var_type; }
644 by Brian Aker
Clean up warnings for Solaris.
757
  bool check_update_type(Item_result)
77.1.7 by Monty Taylor
Heap builds clean.
758
  { return 1; }
1273.13.24 by Brian Aker
Updating style, simplified code.
759
  unsigned char *value_ptr(Session *session, sql_var_t,
779.3.10 by Monty Taylor
Turned on -Wshadow.
760
                           const LEX_STRING *)
1 by brian
clean slate
761
  {
520.1.22 by Brian Aker
Second pass of thd cleanup
762
    return (*value_ptr_func)(session);
1 by brian
clean slate
763
  }
77.1.7 by Monty Taylor
Heap builds clean.
764
  SHOW_TYPE show_type(void) { return show_type_value; }
765
  bool is_readonly(void) const { return 1; }
1 by brian
clean slate
766
};
767
768
520.1.22 by Brian Aker
Second pass of thd cleanup
769
class sys_var_session_time_zone :public sys_var_session
1 by brian
clean slate
770
{
771
public:
1018 by Brian Aker
Remove "BINLOG" from variables (we don't need this for our replication).
772
  sys_var_session_time_zone(sys_var_chain *chain, const char *name_arg)
773
    :sys_var_session(name_arg, NULL)
1 by brian
clean slate
774
  {
775
    chain_sys_var(chain);
776
  }
520.1.22 by Brian Aker
Second pass of thd cleanup
777
  bool check(Session *session, set_var *var);
1 by brian
clean slate
778
  SHOW_TYPE show_type() { return SHOW_CHAR; }
779
  bool check_update_type(Item_result type)
780
  {
781
    return type != STRING_RESULT;		/* Only accept strings */
782
  }
1273.13.24 by Brian Aker
Updating style, simplified code.
783
  bool check_default(sql_var_t)
77.1.7 by Monty Taylor
Heap builds clean.
784
  { return 0; }
520.1.22 by Brian Aker
Second pass of thd cleanup
785
  bool update(Session *session, set_var *var);
1273.13.24 by Brian Aker
Updating style, simplified code.
786
  unsigned char *value_ptr(Session *session, sql_var_t type,
779.3.10 by Monty Taylor
Turned on -Wshadow.
787
                           const LEX_STRING *base);
1273.13.24 by Brian Aker
Updating style, simplified code.
788
  virtual void set_default(Session *session, sql_var_t type);
1 by brian
clean slate
789
};
790
791
520.1.22 by Brian Aker
Second pass of thd cleanup
792
class sys_var_microseconds :public sys_var_session
1 by brian
clean slate
793
{
1273.13.75 by Brian Aker
Remove dead globals related to my_sys.
794
  uint64_t system_variables::*offset;
1 by brian
clean slate
795
public:
796
  sys_var_microseconds(sys_var_chain *chain, const char *name_arg,
1273.13.75 by Brian Aker
Remove dead globals related to my_sys.
797
                       uint64_t system_variables::*offset_arg):
520.1.22 by Brian Aker
Second pass of thd cleanup
798
    sys_var_session(name_arg), offset(offset_arg)
1 by brian
clean slate
799
  { chain_sys_var(chain); }
644 by Brian Aker
Clean up warnings for Solaris.
800
  bool check(Session *, set_var *) {return 0;}
520.1.22 by Brian Aker
Second pass of thd cleanup
801
  bool update(Session *session, set_var *var);
1273.13.24 by Brian Aker
Updating style, simplified code.
802
  void set_default(Session *session, sql_var_t type);
1 by brian
clean slate
803
  SHOW_TYPE show_type() { return SHOW_DOUBLE; }
804
  bool check_update_type(Item_result type)
805
  {
806
    return (type != INT_RESULT && type != REAL_RESULT && type != DECIMAL_RESULT);
807
  }
808
};
809
520.1.22 by Brian Aker
Second pass of thd cleanup
810
class sys_var_session_lc_time_names :public sys_var_session
1 by brian
clean slate
811
{
812
public:
1018 by Brian Aker
Remove "BINLOG" from variables (we don't need this for our replication).
813
  sys_var_session_lc_time_names(sys_var_chain *chain, const char *name_arg)
814
    : sys_var_session(name_arg, NULL)
1 by brian
clean slate
815
  {
816
    chain_sys_var(chain);
817
  }
520.1.22 by Brian Aker
Second pass of thd cleanup
818
  bool check(Session *session, set_var *var);
1 by brian
clean slate
819
  SHOW_TYPE show_type() { return SHOW_CHAR; }
820
  bool check_update_type(Item_result type)
821
  {
822
    return ((type != STRING_RESULT) && (type != INT_RESULT));
823
  }
1273.13.24 by Brian Aker
Updating style, simplified code.
824
  bool check_default(sql_var_t)
77.1.7 by Monty Taylor
Heap builds clean.
825
  { return 0; }
520.1.22 by Brian Aker
Second pass of thd cleanup
826
  bool update(Session *session, set_var *var);
1273.13.24 by Brian Aker
Updating style, simplified code.
827
  unsigned char *value_ptr(Session *session, sql_var_t type,
779.3.10 by Monty Taylor
Turned on -Wshadow.
828
                           const LEX_STRING *base);
1273.13.24 by Brian Aker
Updating style, simplified code.
829
  virtual void set_default(Session *session, sql_var_t type);
1 by brian
clean slate
830
};
831
832
833
/****************************************************************************
834
  Classes for parsing of the SET command
835
****************************************************************************/
836
1280.1.10 by Monty Taylor
Put everything in drizzled into drizzled namespace.
837
class set_var_base :public memory::SqlAlloc
1 by brian
clean slate
838
{
839
public:
840
  set_var_base() {}
841
  virtual ~set_var_base() {}
520.1.22 by Brian Aker
Second pass of thd cleanup
842
  virtual int check(Session *session)=0;	/* To check privileges etc. */
843
  virtual int update(Session *session)=0;	/* To set the value */
1 by brian
clean slate
844
  /* light check for PS */
845
};
846
141 by Brian Aker
Code cleanup. Mainly dead stuff :)
847
/* MySQL internal variables */
1 by brian
clean slate
848
class set_var :public set_var_base
849
{
850
public:
851
  sys_var *var;
852
  Item *value;
1273.13.24 by Brian Aker
Updating style, simplified code.
853
  sql_var_t type;
1 by brian
clean slate
854
  union
855
  {
264.2.6 by Andrey Hristov
Constify the usage of CHARSET_INFO almost to the last place in the code.
856
    const CHARSET_INFO *charset;
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.
857
    uint32_t uint32_t_value;
151 by Brian Aker
Ulonglong to uint64_t
858
    uint64_t uint64_t_value;
629.4.1 by Monty Taylor
First step in support size_t sys_var stuff.
859
    size_t size_t_value;
1280.1.10 by Monty Taylor
Put everything in drizzled into drizzled namespace.
860
    plugin::StorageEngine *storage_engine;
1 by brian
clean slate
861
    Time_zone *time_zone;
862
    MY_LOCALE *locale_value;
863
  } save_result;
864
  LEX_STRING base;			/* for structs */
865
1273.13.24 by Brian Aker
Updating style, simplified code.
866
  set_var(sql_var_t type_arg, sys_var *var_arg,
1 by brian
clean slate
867
          const LEX_STRING *base_name_arg, Item *value_arg)
868
    :var(var_arg), type(type_arg), base(*base_name_arg)
869
  {
870
    /*
871
      If the set value is a field, change it to a string to allow things like
872
      SET table_type=MYISAM;
873
    */
874
    if (value_arg && value_arg->type() == Item::FIELD_ITEM)
875
    {
876
      Item_field *item= (Item_field*) value_arg;
660.1.3 by Eric Herman
removed trailing whitespace with simple script:
877
      if (!(value=new Item_string(item->field_name,
895 by Brian Aker
Completion (?) of uint conversion.
878
                  (uint32_t) strlen(item->field_name),
1 by brian
clean slate
879
				  item->collation.collation)))
880
	value=value_arg;			/* Give error message later */
881
    }
882
    else
883
      value=value_arg;
884
  }
520.1.22 by Brian Aker
Second pass of thd cleanup
885
  int check(Session *session);
886
  int update(Session *session);
1 by brian
clean slate
887
};
888
889
890
/* User variables like @my_own_variable */
891
892
class set_var_user: public set_var_base
893
{
894
  Item_func_set_user_var *user_var_item;
895
public:
896
  set_var_user(Item_func_set_user_var *item)
897
    :user_var_item(item)
898
  {}
520.1.22 by Brian Aker
Second pass of thd cleanup
899
  int check(Session *session);
900
  int update(Session *session);
1 by brian
clean slate
901
};
902
903
904
/* For sql_yacc */
905
struct sys_var_with_base
906
{
907
  sys_var *var;
908
  LEX_STRING base_name;
909
};
910
911
/*
912
  Prototypes for helper functions
913
*/
914
915
int set_var_init();
916
void set_var_free();
1273.13.73 by Brian Aker
Remove typedef and drop some dead code.
917
drizzle_show_var* enumerate_sys_vars(Session *session, bool sorted);
1101.1.27 by Monty Taylor
Fixed the plugin string valgrind leak.
918
void drizzle_add_plugin_sysvar(sys_var_pluginvar *var);
919
void drizzle_del_plugin_sysvar();
1410.3.4 by Djellel E. Difallah
update references to old my_'s
920
int mysql_add_sys_var_chain(sys_var *chain, struct option *long_options);
1 by brian
clean slate
921
int mysql_del_sys_var_chain(sys_var *chain);
520.1.22 by Brian Aker
Second pass of thd cleanup
922
sys_var *find_sys_var(Session *session, const char *str, uint32_t length=0);
923
int sql_set_variables(Session *session, List<set_var_base> *var_list);
1 by brian
clean slate
924
bool not_all_support_one_shot(List<set_var_base> *var_list);
520.1.22 by Brian Aker
Second pass of thd cleanup
925
extern sys_var_session_time_zone sys_time_zone;
926
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.
927
const CHARSET_INFO *get_old_charset_by_name(const char *old_name);
1 by brian
clean slate
928
929
extern sys_var_str sys_var_general_log_path, sys_var_slow_log_path;
930
1280.1.10 by Monty Taylor
Put everything in drizzled into drizzled namespace.
931
} /* namespace drizzled */
932
1122.2.10 by Monty Taylor
Fixed all of the include guards.
933
#endif /* DRIZZLED_SET_VAR_H */