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