17
17
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
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>
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)
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);
41
42
Item_func_get_system_var::fix_fields(Session *session, Item **ref)
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().
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);
50
Item *item= var->item(session, var_type, &component);
52
return 1; // Impossible
54
item->set_name(name, 0); // don't allocate a new name
58
Item *get_system_var(Session *session, sql_var_t var_type, LEX_STRING name,
60
Item *get_system_var(Session *session, sql_var_t var_type, lex_string_t name,
61
lex_string_t component)
62
LEX_STRING *base_name, *component_name;
64
lex_string_t *base_name, *component_name;
66
68
base_name= &component;
67
69
component_name= &name;
72
74
component_name= &component; // Empty string
75
if (!(var= find_sys_var(base_name->str, base_name->length)))
77
if (!(var= find_sys_var(base_name->data())))
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());
82
session->lex->setCacheable(false);
84
set_if_smaller(component_name->length, (size_t)MAX_SYS_VAR_LENGTH);
86
return new Item_func_get_system_var(var, var_type, component_name,
84
session->lex().setCacheable(false);
86
if (component_name->size() > MAX_SYS_VAR_LENGTH)
87
component_name->assign(component_name->data(), MAX_SYS_VAR_LENGTH);
89
return new Item_func_get_system_var(var, var_type, component_name, NULL, 0);