~drizzle-trunk/drizzle/development

« back to all changes in this revision

Viewing changes to drizzled/function/get_system_var.cc

  • Committer: Brian Aker
  • Date: 2011-11-04 21:06:16 UTC
  • mto: This revision was merged to the branch mainline in revision 2450.
  • Revision ID: brian@tangent.org-20111104210616-2at42agch94dkwb0
Additional fixes for libdrizzle.

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