~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-11-08 19:06:32 UTC
  • mfrom: (2445.1.22 rf)
  • Revision ID: me@mark.atwood.name-20111108190632-7pfvz4ggbolmlnnu
mergeĀ lp:~olafvdspek/drizzle/refactor10

Show diffs side-by-side

added added

removed removed

Lines of Context:
27
27
 
28
28
namespace drizzled {
29
29
 
30
 
Item_func_get_system_var::
31
 
Item_func_get_system_var(sys_var *var_arg, sql_var_t var_type_arg,
32
 
                       lex_string_t *component_arg, const char *name_arg,
33
 
                       size_t name_len_arg)
34
 
  :var(var_arg), var_type(var_type_arg), component(*component_arg)
 
30
Item_func_get_system_var::Item_func_get_system_var(sys_var *var_arg, sql_var_t var_type_arg,
 
31
                       str_ref component_arg, const char *name_arg, size_t name_len_arg)
 
32
  : var(var_arg), var_type(var_type_arg), component(component_arg)
35
33
{
36
34
  /* set_name() will allocate the name */
37
35
  set_name(name_arg, name_len_arg);
38
36
}
39
37
 
40
38
 
41
 
bool
42
 
Item_func_get_system_var::fix_fields(Session *session, Item **ref)
 
39
bool Item_func_get_system_var::fix_fields(Session *session, Item **ref)
43
40
{
44
41
 
45
42
  /*
47
44
    instead of this item. If the variable can not be evaluated,
48
45
    the error is reported in sys_var::item().
49
46
  */
50
 
  Item *item= var->item(session, var_type, &component);
 
47
  Item *item= var->item(session, var_type);
51
48
  if (not item)
52
49
    return 1;                             // Impossible
53
50
 
57
54
  return 0;
58
55
}
59
56
 
60
 
Item *get_system_var(Session *session, sql_var_t var_type, lex_string_t name,
61
 
                     lex_string_t component)
 
57
Item *get_system_var(Session *session, sql_var_t var_type, str_ref name, str_ref component)
62
58
{
63
 
  sys_var *var;
64
 
  lex_string_t *base_name, *component_name;
 
59
  str_ref *base_name, *component_name;
65
60
 
66
61
  if (component.data())
67
62
  {
74
69
    component_name= &component;                 // Empty string
75
70
  }
76
71
 
77
 
  if (!(var= find_sys_var(base_name->data())))
78
 
    return 0;
 
72
  sys_var *var= find_sys_var(base_name->data());
 
73
  if (not var)
 
74
    return NULL;
79
75
  if (component.data())
80
76
  {
81
77
    my_error(ER_VARIABLE_IS_NOT_STRUCT, MYF(0), base_name->data());
82
 
    return 0;
 
78
    return NULL;
83
79
  }
84
80
  session->lex().setCacheable(false);
85
81
 
86
82
  if (component_name->size() > MAX_SYS_VAR_LENGTH)
87
83
    component_name->assign(component_name->data(), MAX_SYS_VAR_LENGTH);
88
84
 
89
 
  return new Item_func_get_system_var(var, var_type, component_name, NULL, 0);
 
85
  return new Item_func_get_system_var(var, var_type, *component_name, NULL, 0);
90
86
}
91
87
 
92
88