~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
1241.9.36 by Monty Taylor
ZOMG. I deleted drizzled/server_includes.h.
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/query_id.h>
31
#include <drizzled/error.h>
670.1.20 by Monty Taylor
Renamed functions to function... everything else is singular.
32
#include <drizzled/function/str/strfunc.h>
574.3.2 by Lee
initial changes to break out item_strfunc into functions/str
33
34
// For soundex_map
1241.9.64 by Monty Taylor
Moved remaining non-public portions of mysys and mystrings to drizzled/internal.
35
#include "drizzled/internal/my_static.h"
574.3.2 by Lee
initial changes to break out item_strfunc into functions/str
36
37
using namespace std;
38
1280.1.10 by Monty Taylor
Put everything in drizzled into drizzled namespace.
39
namespace drizzled
40
{
41
1022.2.29 by Monty Taylor
Fixed some no-inline warnings.
42
Item_str_func::~Item_str_func() {}
43
574.3.2 by Lee
initial changes to break out item_strfunc into functions/str
44
bool Item_str_func::fix_fields(Session *session, Item **ref)
45
{
46
  bool res= Item_func::fix_fields(session, ref);
47
  /*
48
    In Item_str_func::check_well_formed_result() we may set null_value
49
    flag on the same condition as in test() below.
50
  */
51
  maybe_null= (maybe_null || true);
52
  return res;
53
}
54
55
2030.1.4 by Brian Aker
Change my_decimal to Decimal
56
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
57
{
58
  assert(fixed == 1);
59
  char buff[64];
60
  String *res, tmp(buff,sizeof(buff), &my_charset_bin);
61
  res= val_str(&tmp);
2034.2.5 by Brian Aker
Improvement for decimal in encapsulation.
62
  if (not res)
574.3.2 by Lee
initial changes to break out item_strfunc into functions/str
63
    return 0;
2034.2.5 by Brian Aker
Improvement for decimal in encapsulation.
64
65
  (void)decimal_value->store(E_DEC_FATAL_ERROR, (char*) res->ptr(), res->length(), res->charset());
66
574.3.2 by Lee
initial changes to break out item_strfunc into functions/str
67
  return decimal_value;
68
}
69
70
71
double Item_str_func::val_real()
72
{
73
  assert(fixed == 1);
74
  int err_not_used;
75
  char *end_not_used, buff[64];
76
  String *res, tmp(buff,sizeof(buff), &my_charset_bin);
77
  res= val_str(&tmp);
78
  return res ? my_strntod(res->charset(), (char*) res->ptr(), res->length(),
79
			  &end_not_used, &err_not_used) : 0.0;
80
}
81
82
83
int64_t Item_str_func::val_int()
84
{
85
  assert(fixed == 1);
86
  int err;
87
  char buff[22];
88
  String *res, tmp(buff,sizeof(buff), &my_charset_bin);
89
  res= val_str(&tmp);
90
  return (res ?
91
	  my_strntoll(res->charset(), res->ptr(), res->length(), 10, NULL,
92
		      &err) :
93
	  (int64_t) 0);
94
}
95
96
void Item_str_func::left_right_max_length()
97
{
98
  max_length=args[0]->max_length;
99
  if (args[1]->const_item())
100
  {
101
    int length=(int) args[1]->val_int()*collation.collation->mbmaxlen;
102
    if (length <= 0)
103
      max_length=0;
104
    else
105
      set_if_smaller(max_length,(uint) length);
106
  }
107
}
108
629.6.5 by Lee
clean up remaining functions in strfunc, move to functions/str directory
109
String my_empty_string("",default_charset_info);
110
1280.1.10 by Monty Taylor
Put everything in drizzled into drizzled namespace.
111
} /* namespace drizzled */