~drizzle-trunk/drizzle/development

492.3.24 by Lee
more changes to move functions from item_func.cc/h to the functions directory
1
/* -*- mode: c++; c-basic-offset: 2; indent-tabs-mode: nil; -*-
2
 *  vim:expandtab:shiftwidth=2:tabstop=2:smarttab:
3
 *
1999.6.1 by kalebral at gmail
update Copyright strings to a more common format to help with creating the master debian copyright file
4
 *  Copyright (C) 2008 Sun Microsystems, Inc.
492.3.24 by Lee
more changes to move functions from item_func.cc/h to the functions directory
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
 */
19
1241.9.36 by Monty Taylor
ZOMG. I deleted drizzled/server_includes.h.
20
#include "config.h"
1280.1.10 by Monty Taylor
Put everything in drizzled into drizzled namespace.
21
492.3.27 by Lee
merge latest changes from the trunk and changes to get drizzle building on Soalris 10 (SPARC)
22
#include <drizzled/error.h>
670.1.20 by Monty Taylor
Renamed functions to function... everything else is singular.
23
#include <drizzled/function/get_system_var.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.
24
#include <drizzled/session.h>
492.3.24 by Lee
more changes to move functions from item_func.cc/h to the functions directory
25
1280.1.10 by Monty Taylor
Put everything in drizzled into drizzled namespace.
26
namespace drizzled
27
{
28
492.3.24 by Lee
more changes to move functions from item_func.cc/h to the functions directory
29
Item_func_get_system_var::
1273.13.24 by Brian Aker
Updating style, simplified code.
30
Item_func_get_system_var(sys_var *var_arg, sql_var_t var_type_arg,
492.3.24 by Lee
more changes to move functions from item_func.cc/h to the functions directory
31
                       LEX_STRING *component_arg, const char *name_arg,
32
                       size_t name_len_arg)
33
  :var(var_arg), var_type(var_type_arg), component(*component_arg)
34
{
35
  /* set_name() will allocate the name */
36
  set_name(name_arg, name_len_arg, system_charset_info);
37
}
38
39
40
bool
41
Item_func_get_system_var::fix_fields(Session *session, Item **ref)
42
{
43
  Item *item;
44
45
  /*
46
    Evaluate the system variable and substitute the result (a basic constant)
47
    instead of this item. If the variable can not be evaluated,
48
    the error is reported in sys_var::item().
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);
56
}
57
1273.13.24 by Brian Aker
Updating style, simplified code.
58
Item *get_system_var(Session *session, sql_var_t var_type, LEX_STRING name,
492.3.24 by Lee
more changes to move functions from item_func.cc/h to the functions directory
59
                     LEX_STRING component)
60
{
61
  sys_var *var;
62
  LEX_STRING *base_name, *component_name;
63
64
  if (component.str)
65
  {
66
    base_name= &component;
67
    component_name= &name;
68
  }
69
  else
70
  {
71
    base_name= &name;
72
    component_name= &component;                 // Empty string
73
  }
74
2040.6.2 by Monty Taylor
Made find_sys_var take a const std::string& instead.
75
  if (!(var= find_sys_var(base_name->str)))
492.3.24 by Lee
more changes to move functions from item_func.cc/h to the functions directory
76
    return 0;
77
  if (component.str)
78
  {
1106.4.2 by Brian Aker
Remove multi key cache
79
    my_error(ER_VARIABLE_IS_NOT_STRUCT, MYF(0), base_name->str);
80
    return 0;
492.3.24 by Lee
more changes to move functions from item_func.cc/h to the functions directory
81
  }
1643.6.13 by Djellel E. Difallah
adding tests
82
  session->lex->setCacheable(false);
492.3.24 by Lee
more changes to move functions from item_func.cc/h to the functions directory
83
937.2.6 by Stewart Smith
make set_if_bigger typesafe for C and C++. Fix up everywhere.
84
  set_if_smaller(component_name->length, (size_t)MAX_SYS_VAR_LENGTH);
492.3.24 by Lee
more changes to move functions from item_func.cc/h to the functions directory
85
86
  return new Item_func_get_system_var(var, var_type, component_name,
87
                                      NULL, 0);
88
}
89
1280.1.10 by Monty Taylor
Put everything in drizzled into drizzled namespace.
90
91
} /* namespace drizzled */