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