~drizzle-trunk/drizzle/development

« back to all changes in this revision

Viewing changes to drizzled/function/get_system_var.cc

  • Committer: Mark Atwood
  • Date: 2011-10-27 05:08:12 UTC
  • mfrom: (2445.1.11 rf)
  • Revision ID: me@mark.atwood.name-20111027050812-1icvs72lb0u4xdc4
mergeĀ lp:~olafvdspek/drizzle/refactor8

Show diffs side-by-side

added added

removed removed

Lines of Context:
17
17
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
18
18
 */
19
19
 
20
 
#include "config.h"
 
20
#include <config.h>
21
21
 
22
22
#include <drizzled/error.h>
23
23
#include <drizzled/function/get_system_var.h>
24
24
#include <drizzled/session.h>
 
25
#include <drizzled/sys_var.h>
 
26
#include <drizzled/sql_lex.h>
25
27
 
26
 
namespace drizzled
27
 
{
 
28
namespace drizzled {
28
29
 
29
30
Item_func_get_system_var::
30
31
Item_func_get_system_var(sys_var *var_arg, sql_var_t var_type_arg,
31
 
                       LEX_STRING *component_arg, const char *name_arg,
 
32
                       lex_string_t *component_arg, const char *name_arg,
32
33
                       size_t name_len_arg)
33
34
  :var(var_arg), var_type(var_type_arg), component(*component_arg)
34
35
{
35
36
  /* set_name() will allocate the name */
36
 
  set_name(name_arg, name_len_arg, system_charset_info);
 
37
  set_name(name_arg, name_len_arg);
37
38
}
38
39
 
39
40
 
40
41
bool
41
42
Item_func_get_system_var::fix_fields(Session *session, Item **ref)
42
43
{
43
 
  Item *item;
44
44
 
45
45
  /*
46
46
    Evaluate the system variable and substitute the result (a basic constant)
47
47
    instead of this item. If the variable can not be evaluated,
48
48
    the error is reported in sys_var::item().
49
49
  */
50
 
  if (!(item= var->item(session, var_type, &component)))
51
 
    return(1);                             // Impossible
52
 
  item->set_name(name, 0, system_charset_info); // don't allocate a new name
53
 
  session->change_item_tree(ref, item);
54
 
 
55
 
  return(0);
 
50
  Item *item= var->item(session, var_type, &component);
 
51
  if (not item)
 
52
    return 1;                             // Impossible
 
53
 
 
54
  item->set_name(name, 0); // don't allocate a new name
 
55
  *ref= item;
 
56
 
 
57
  return 0;
56
58
}
57
59
 
58
 
Item *get_system_var(Session *session, sql_var_t var_type, LEX_STRING name,
59
 
                     LEX_STRING component)
 
60
Item *get_system_var(Session *session, sql_var_t var_type, lex_string_t name,
 
61
                     lex_string_t component)
60
62
{
61
63
  sys_var *var;
62
 
  LEX_STRING *base_name, *component_name;
 
64
  lex_string_t *base_name, *component_name;
63
65
 
64
 
  if (component.str)
 
66
  if (component.data())
65
67
  {
66
68
    base_name= &component;
67
69
    component_name= &name;
72
74
    component_name= &component;                 // Empty string
73
75
  }
74
76
 
75
 
  if (!(var= find_sys_var(base_name->str, base_name->length)))
 
77
  if (!(var= find_sys_var(base_name->data())))
76
78
    return 0;
77
 
  if (component.str)
 
79
  if (component.data())
78
80
  {
79
 
    my_error(ER_VARIABLE_IS_NOT_STRUCT, MYF(0), base_name->str);
 
81
    my_error(ER_VARIABLE_IS_NOT_STRUCT, MYF(0), base_name->data());
80
82
    return 0;
81
83
  }
82
 
  session->lex->setCacheable(false);
83
 
 
84
 
  set_if_smaller(component_name->length, (size_t)MAX_SYS_VAR_LENGTH);
85
 
 
86
 
  return new Item_func_get_system_var(var, var_type, component_name,
87
 
                                      NULL, 0);
 
84
  session->lex().setCacheable(false);
 
85
 
 
86
  if (component_name->size() > MAX_SYS_VAR_LENGTH)
 
87
    component_name->assign(component_name->data(), MAX_SYS_VAR_LENGTH);
 
88
 
 
89
  return new Item_func_get_system_var(var, var_type, component_name, NULL, 0);
88
90
}
89
91
 
90
92