~drizzle-trunk/drizzle/development

574.3.2 by Lee
initial changes to break out item_strfunc into functions/str
1
/* Copyright (C) 2000-2006 MySQL AB
2
3
   This program is free software; you can redistribute it and/or modify
4
   it under the terms of the GNU General Public License as published by
5
   the Free Software Foundation; version 2 of the License.
6
7
   This program is distributed in the hope that it will be useful,
8
   but WITHOUT ANY WARRANTY; without even the implied warranty of
9
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
10
   GNU General Public License for more details.
11
12
   You should have received a copy of the GNU General Public License
13
   along with this program; if not, write to the Free Software
1802.10.2 by Monty Taylor
Update all of the copyright headers to include the correct address.
14
   Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA */
574.3.2 by Lee
initial changes to break out item_strfunc into functions/str
15
16
17
/**
18
  @file
19
20
  @brief
21
  This file defines all string functions
22
23
  @warning
24
    Some string functions don't always put and end-null on a String.
25
    (This shouldn't be needed)
26
*/
27
2173.2.1 by Monty Taylor
Fixes incorrect usage of include
28
#include <config.h>
574.3.2 by Lee
initial changes to break out item_strfunc into functions/str
29
#include <zlib.h>
30
#include <drizzled/error.h>
670.1.20 by Monty Taylor
Renamed functions to function... everything else is singular.
31
#include <drizzled/function/str/strfunc.h>
574.3.2 by Lee
initial changes to break out item_strfunc into functions/str
32
33
using namespace std;
34
2385.3.15 by Olaf van der Spek
Refactor
35
namespace drizzled {
1022.2.29 by Monty Taylor
Fixed some no-inline warnings.
36
574.3.2 by Lee
initial changes to break out item_strfunc into functions/str
37
bool Item_str_func::fix_fields(Session *session, Item **ref)
38
{
39
  bool res= Item_func::fix_fields(session, ref);
40
  /*
41
    In Item_str_func::check_well_formed_result() we may set null_value
42
    flag on the same condition as in test() below.
43
  */
2385.3.15 by Olaf van der Spek
Refactor
44
  maybe_null= true;
574.3.2 by Lee
initial changes to break out item_strfunc into functions/str
45
  return res;
46
}
47
2030.1.4 by Brian Aker
Change my_decimal to Decimal
48
type::Decimal *Item_str_func::val_decimal(type::Decimal *decimal_value)
574.3.2 by Lee
initial changes to break out item_strfunc into functions/str
49
{
50
  assert(fixed == 1);
51
  char buff[64];
52
  String *res, tmp(buff,sizeof(buff), &my_charset_bin);
53
  res= val_str(&tmp);
2034.2.5 by Brian Aker
Improvement for decimal in encapsulation.
54
  if (not res)
574.3.2 by Lee
initial changes to break out item_strfunc into functions/str
55
    return 0;
2034.2.5 by Brian Aker
Improvement for decimal in encapsulation.
56
57
  (void)decimal_value->store(E_DEC_FATAL_ERROR, (char*) res->ptr(), res->length(), res->charset());
58
574.3.2 by Lee
initial changes to break out item_strfunc into functions/str
59
  return decimal_value;
60
}
61
62
63
double Item_str_func::val_real()
64
{
65
  assert(fixed == 1);
66
  int err_not_used;
67
  char *end_not_used, buff[64];
68
  String *res, tmp(buff,sizeof(buff), &my_charset_bin);
69
  res= val_str(&tmp);
70
  return res ? my_strntod(res->charset(), (char*) res->ptr(), res->length(),
71
			  &end_not_used, &err_not_used) : 0.0;
72
}
73
74
75
int64_t Item_str_func::val_int()
76
{
77
  assert(fixed == 1);
78
  int err;
2148.5.3 by Brian Aker
Remove hard coded array for numbers (this also fixes a couple of spots where
79
  char buff[DECIMAL_LONGLONG_DIGITS];
574.3.2 by Lee
initial changes to break out item_strfunc into functions/str
80
  String *res, tmp(buff,sizeof(buff), &my_charset_bin);
81
  res= val_str(&tmp);
82
  return (res ?
83
	  my_strntoll(res->charset(), res->ptr(), res->length(), 10, NULL,
84
		      &err) :
85
	  (int64_t) 0);
86
}
87
88
void Item_str_func::left_right_max_length()
89
{
90
  max_length=args[0]->max_length;
91
  if (args[1]->const_item())
92
  {
93
    int length=(int) args[1]->val_int()*collation.collation->mbmaxlen;
94
    if (length <= 0)
95
      max_length=0;
96
    else
97
      set_if_smaller(max_length,(uint) length);
98
  }
99
}
100
2119.4.1 by Monty Taylor
Turns on -fvisibility=hidden by default. Symbols intended to be used by
101
DRIZZLED_API String my_empty_string("",default_charset_info);
629.6.5 by Lee
clean up remaining functions in strfunc, move to functions/str directory
102
1280.1.10 by Monty Taylor
Put everything in drizzled into drizzled namespace.
103
} /* namespace drizzled */