12
12
You should have received a copy of the GNU General Public License
13
13
along with this program; if not, write to the Free Software
14
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */
14
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
25
25
#include <drizzled/item/func.h>
26
26
#include <drizzled/error.h>
28
#include "drizzled/function_container.h"
30
28
#include <drizzled/function/str/binary.h>
31
29
#include <drizzled/function/str/concat.h>
32
30
#include <drizzled/function/str/conv.h>
31
#include <drizzled/function/str/elt.h>
33
32
#include <drizzled/function/str/export_set.h>
33
#include <drizzled/function/str/format.h>
34
34
#include <drizzled/function/str/load_file.h>
35
35
#include <drizzled/function/str/make_set.h>
36
36
#include <drizzled/function/str/pad.h>
61
61
/* Function declarations */
63
63
#include <drizzled/function/func.h>
64
#include <drizzled/function/math/abs.h>
65
#include <drizzled/function/math/acos.h>
64
66
#include <drizzled/function/additive_op.h>
67
#include <drizzled/function/math/asin.h>
68
#include <drizzled/function/math/atan.h>
69
#include <drizzled/function/math/ceiling.h>
70
#include <drizzled/function/coercibility.h>
71
#include <drizzled/function/math/cos.h>
65
72
#include <drizzled/function/math/dec.h>
66
73
#include <drizzled/function/math/decimal_typecast.h>
74
#include <drizzled/function/math/exp.h>
67
75
#include <drizzled/function/field.h>
68
76
#include <drizzled/function/find_in_set.h>
77
#include <drizzled/function/math/floor.h>
69
78
#include <drizzled/function/found_rows.h>
70
79
#include <drizzled/function/get_system_var.h>
71
80
#include <drizzled/function/math/int_val.h>
72
81
#include <drizzled/function/math/integer.h>
73
82
#include <drizzled/function/last_insert.h>
83
#include <drizzled/function/math/ln.h>
74
84
#include <drizzled/function/locate.h>
85
#include <drizzled/function/math/log.h>
75
86
#include <drizzled/function/min_max.h>
76
87
#include <drizzled/function/num1.h>
77
88
#include <drizzled/function/num_op.h>
78
89
#include <drizzled/function/numhybrid.h>
90
#include <drizzled/function/math/ord.h>
91
#include <drizzled/function/math/pow.h>
79
92
#include <drizzled/function/math/real.h>
80
93
#include <drizzled/function/row_count.h>
81
94
#include <drizzled/function/set_user_var.h>
82
95
#include <drizzled/function/sign.h>
96
#include <drizzled/function/math/sin.h>
97
#include <drizzled/function/math/sqrt.h>
98
#include <drizzled/function/str/quote.h>
83
99
#include <drizzled/function/math/tan.h>
84
100
#include <drizzled/function/units.h>
86
#include "drizzled/function/cast/boolean.h"
87
#include "drizzled/function/cast/signed.h"
88
#include "drizzled/function/cast/time.h"
89
#include "drizzled/function/cast/unsigned.h"
91
104
using namespace std;
245
258
it helps to compare code between versions, and helps with merges conflicts.
261
class Create_func_abs : public Create_func_arg1
264
using Create_func_arg1::create;
266
virtual Item *create(Session *session, Item *arg1);
268
static Create_func_abs s_singleton;
272
virtual ~Create_func_abs() {}
276
class Create_func_acos : public Create_func_arg1
279
using Create_func_arg1::create;
281
virtual Item *create(Session *session, Item *arg1);
283
static Create_func_acos s_singleton;
286
Create_func_acos() {}
287
virtual ~Create_func_acos() {}
290
class Create_func_asin : public Create_func_arg1
293
using Create_func_arg1::create;
295
virtual Item *create(Session *session, Item *arg1);
297
static Create_func_asin s_singleton;
300
Create_func_asin() {}
301
virtual ~Create_func_asin() {}
305
class Create_func_atan : public Create_native_func
308
virtual Item *create_native(Session *session, LEX_STRING name, List<Item> *item_list);
310
static Create_func_atan s_singleton;
313
Create_func_atan() {}
314
virtual ~Create_func_atan() {}
249
317
class Create_func_bin : public Create_func_arg1
260
328
virtual ~Create_func_bin() {}
332
class Create_func_ceiling : public Create_func_arg1
335
using Create_func_arg1::create;
337
virtual Item *create(Session *session, Item *arg1);
339
static Create_func_ceiling s_singleton;
342
Create_func_ceiling() {}
343
virtual ~Create_func_ceiling() {}
347
class Create_func_coercibility : public Create_func_arg1
350
using Create_func_arg1::create;
352
virtual Item *create(Session *session, Item *arg1);
354
static Create_func_coercibility s_singleton;
357
Create_func_coercibility() {}
358
virtual ~Create_func_coercibility() {}
263
362
class Create_func_concat : public Create_native_func
300
399
virtual ~Create_func_conv() {}
403
class Create_func_cos : public Create_func_arg1
406
using Create_func_arg1::create;
408
virtual Item *create(Session *session, Item *arg1);
410
static Create_func_cos s_singleton;
414
virtual ~Create_func_cos() {}
303
418
class Create_func_cot : public Create_func_arg1
433
548
virtual ~Create_func_degrees() {}
552
class Create_func_elt : public Create_native_func
555
virtual Item *create_native(Session *session, LEX_STRING name, List<Item> *item_list);
557
static Create_func_elt s_singleton;
561
virtual ~Create_func_elt() {}
565
class Create_func_exp : public Create_func_arg1
568
using Create_func_arg1::create;
570
virtual Item *create(Session *session, Item *arg1);
572
static Create_func_exp s_singleton;
576
virtual ~Create_func_exp() {}
436
580
class Create_func_export_set : public Create_native_func
440
583
virtual Item *create_native(Session *session, LEX_STRING name, List<Item> *item_list);
474
617
virtual ~Create_func_find_in_set() {}
621
class Create_func_floor : public Create_func_arg1
624
using Create_func_arg1::create;
626
virtual Item *create(Session *session, Item *arg1);
628
static Create_func_floor s_singleton;
631
Create_func_floor() {}
632
virtual ~Create_func_floor() {}
636
class Create_func_format : public Create_func_arg2
639
using Create_func_arg2::create;
641
virtual Item *create(Session *session, Item *arg1, Item *arg2);
643
static Create_func_format s_singleton;
646
Create_func_format() {}
647
virtual ~Create_func_format() {}
477
651
class Create_func_found_rows : public Create_func_arg0
630
804
virtual ~Create_func_least() {}
808
class Create_func_ln : public Create_func_arg1
811
using Create_func_arg1::create;
813
virtual Item *create(Session *session, Item *arg1);
815
static Create_func_ln s_singleton;
819
virtual ~Create_func_ln() {}
633
823
class Create_func_load_file : public Create_func_arg1
851
class Create_func_log : public Create_native_func
854
virtual Item *create_native(Session *session, LEX_STRING name, List<Item> *item_list);
856
static Create_func_log s_singleton;
860
virtual ~Create_func_log() {}
864
class Create_func_log10 : public Create_func_arg1
867
using Create_func_arg1::create;
869
virtual Item *create(Session *session, Item *arg1);
871
static Create_func_log10 s_singleton;
874
Create_func_log10() {}
875
virtual ~Create_func_log10() {}
879
class Create_func_log2 : public Create_func_arg1
882
using Create_func_arg1::create;
884
virtual Item *create(Session *session, Item *arg1);
886
static Create_func_log2 s_singleton;
889
Create_func_log2() {}
890
virtual ~Create_func_log2() {}
661
894
class Create_func_lpad : public Create_func_arg3
774
1007
virtual ~Create_func_oct() {}
1011
class Create_func_ord : public Create_func_arg1
1014
using Create_func_arg1::create;
1016
virtual Item *create(Session *session, Item *arg1);
1018
static Create_func_ord s_singleton;
1021
Create_func_ord() {}
1022
virtual ~Create_func_ord() {}
777
1026
class Create_func_period_add : public Create_func_arg2
818
1067
virtual ~Create_func_pi() {}
1071
class Create_func_pow : public Create_func_arg2
1074
using Create_func_arg2::create;
1076
virtual Item *create(Session *session, Item *arg1, Item *arg2);
1078
static Create_func_pow s_singleton;
1081
Create_func_pow() {}
1082
virtual ~Create_func_pow() {}
1086
class Create_func_quote : public Create_func_arg1
1089
using Create_func_arg1::create;
1091
virtual Item *create(Session *session, Item *arg1);
1093
static Create_func_quote s_singleton;
1096
Create_func_quote() {}
1097
virtual ~Create_func_quote() {}
821
1101
class Create_func_radians : public Create_func_arg1
904
1184
virtual ~Create_func_sign() {}
1188
class Create_func_sin : public Create_func_arg1
1191
using Create_func_arg1::create;
1193
virtual Item *create(Session *session, Item *arg1);
1195
static Create_func_sin s_singleton;
1198
Create_func_sin() {}
1199
virtual ~Create_func_sin() {}
907
1203
class Create_func_space : public Create_func_arg1
918
1214
virtual ~Create_func_space() {}
1218
class Create_func_sqrt : public Create_func_arg1
1221
using Create_func_arg1::create;
1223
virtual Item *create(Session *session, Item *arg1);
1225
static Create_func_sqrt s_singleton;
1228
Create_func_sqrt() {}
1229
virtual ~Create_func_sqrt() {}
921
1233
class Create_func_strcmp : public Create_func_arg2
1215
1527
return create(session, param_1, param_2, param_3);
1531
Create_func_abs Create_func_abs::s_singleton;
1534
Create_func_abs::create(Session *session, Item *arg1)
1536
return new (session->mem_root) Item_func_abs(arg1);
1540
Create_func_acos Create_func_acos::s_singleton;
1543
Create_func_acos::create(Session *session, Item *arg1)
1545
return new (session->mem_root) Item_func_acos(arg1);
1548
Create_func_asin Create_func_asin::s_singleton;
1551
Create_func_asin::create(Session *session, Item *arg1)
1553
return new (session->mem_root) Item_func_asin(arg1);
1557
Create_func_atan Create_func_atan::s_singleton;
1560
Create_func_atan::create_native(Session *session, LEX_STRING name,
1561
List<Item> *item_list)
1566
if (item_list != NULL)
1567
arg_count= item_list->elements;
1569
switch (arg_count) {
1572
Item *param_1= item_list->pop();
1573
func= new (session->mem_root) Item_func_atan(param_1);
1578
Item *param_1= item_list->pop();
1579
Item *param_2= item_list->pop();
1580
func= new (session->mem_root) Item_func_atan(param_1, param_2);
1585
my_error(ER_WRONG_PARAMCOUNT_TO_FUNCTION, MYF(0), name.str);
1218
1593
Create_func_bin Create_func_bin::s_singleton;
1225
1600
return new (session->mem_root) Item_func_conv(arg1, i10, i2);
1604
Create_func_ceiling Create_func_ceiling::s_singleton;
1607
Create_func_ceiling::create(Session *session, Item *arg1)
1609
return new (session->mem_root) Item_func_ceiling(arg1);
1613
Create_func_coercibility Create_func_coercibility::s_singleton;
1616
Create_func_coercibility::create(Session *session, Item *arg1)
1618
return new (session->mem_root) Item_func_coercibility(arg1);
1228
1622
Create_func_concat Create_func_concat::s_singleton;
1276
1670
return new (session->mem_root) Item_func_conv(arg1, arg2, arg3);
1674
Create_func_cos Create_func_cos::s_singleton;
1677
Create_func_cos::create(Session *session, Item *arg1)
1679
return new (session->mem_root) Item_func_cos(arg1);
1279
1683
Create_func_cot Create_func_cot::s_singleton;
1352
1756
180/M_PI, 0.0);
1760
Create_func_elt Create_func_elt::s_singleton;
1763
Create_func_elt::create_native(Session *session, LEX_STRING name,
1764
List<Item> *item_list)
1768
if (item_list != NULL)
1769
arg_count= item_list->elements;
1773
my_error(ER_WRONG_PARAMCOUNT_TO_FUNCTION, MYF(0), name.str);
1777
return new (session->mem_root) Item_func_elt(*item_list);
1781
Create_func_exp Create_func_exp::s_singleton;
1784
Create_func_exp::create(Session *session, Item *arg1)
1786
return new (session->mem_root) Item_func_exp(arg1);
1355
1790
Create_func_export_set Create_func_export_set::s_singleton;
1434
1869
return new (session->mem_root) Item_func_find_in_set(arg1, arg2);
1873
Create_func_floor Create_func_floor::s_singleton;
1876
Create_func_floor::create(Session *session, Item *arg1)
1878
return new (session->mem_root) Item_func_floor(arg1);
1882
Create_func_format Create_func_format::s_singleton;
1885
Create_func_format::create(Session *session, Item *arg1, Item *arg2)
1887
return new (session->mem_root) Item_func_format(arg1, arg2);
1437
1891
Create_func_found_rows Create_func_found_rows::s_singleton;
2127
Create_func_log Create_func_log::s_singleton;
2130
Create_func_log::create_native(Session *session, LEX_STRING name,
2131
List<Item> *item_list)
2136
if (item_list != NULL)
2137
arg_count= item_list->elements;
2139
switch (arg_count) {
2142
Item *param_1= item_list->pop();
2143
func= new (session->mem_root) Item_func_log(param_1);
2148
Item *param_1= item_list->pop();
2149
Item *param_2= item_list->pop();
2150
func= new (session->mem_root) Item_func_log(param_1, param_2);
2155
my_error(ER_WRONG_PARAMCOUNT_TO_FUNCTION, MYF(0), name.str);
2164
Create_func_log10 Create_func_log10::s_singleton;
2167
Create_func_log10::create(Session *session, Item *arg1)
2169
return new (session->mem_root) Item_func_log10(arg1);
2173
Create_func_log2 Create_func_log2::s_singleton;
2176
Create_func_log2::create(Session *session, Item *arg1)
2178
return new (session->mem_root) Item_func_log2(arg1);
1662
2182
Create_func_lpad Create_func_lpad::s_singleton;
1736
2256
return new (session->mem_root) Item_func_conv(arg1, i10, i8);
2260
Create_func_ord Create_func_ord::s_singleton;
2263
Create_func_ord::create(Session *session, Item *arg1)
2265
return new (session->mem_root) Item_func_ord(arg1);
1739
2269
Create_func_period_add Create_func_period_add::s_singleton;
1762
2292
return new (session->mem_root) Item_static_float_func("pi()", M_PI, 6, 8);
2296
Create_func_pow Create_func_pow::s_singleton;
2299
Create_func_pow::create(Session *session, Item *arg1, Item *arg2)
2301
return new (session->mem_root) Item_func_pow(arg1, arg2);
2305
Create_func_quote Create_func_quote::s_singleton;
2308
Create_func_quote::create(Session *session, Item *arg1)
2310
return new (session->mem_root) Item_func_quote(arg1);
1765
2314
Create_func_radians Create_func_radians::s_singleton;
1871
2430
return new (session->mem_root) Item_func_repeat(*session, sp, arg1);
2434
Create_func_sqrt Create_func_sqrt::s_singleton;
2437
Create_func_sqrt::create(Session *session, Item *arg1)
2439
return new (session->mem_root) Item_func_sqrt(arg1);
1874
2443
Create_func_strcmp Create_func_strcmp::s_singleton;
1975
2544
static Native_func_registry func_array[] =
2546
{ { C_STRING_WITH_LEN("ABS") }, BUILDER(Create_func_abs)},
2547
{ { C_STRING_WITH_LEN("ACOS") }, BUILDER(Create_func_acos)},
2548
{ { C_STRING_WITH_LEN("ASIN") }, BUILDER(Create_func_asin)},
2549
{ { C_STRING_WITH_LEN("ATAN") }, BUILDER(Create_func_atan)},
2550
{ { C_STRING_WITH_LEN("ATAN2") }, BUILDER(Create_func_atan)},
1977
2551
{ { C_STRING_WITH_LEN("BIN") }, BUILDER(Create_func_bin)},
2552
{ { C_STRING_WITH_LEN("CEIL") }, BUILDER(Create_func_ceiling)},
2553
{ { C_STRING_WITH_LEN("CEILING") }, BUILDER(Create_func_ceiling)},
2554
{ { C_STRING_WITH_LEN("COERCIBILITY") }, BUILDER(Create_func_coercibility)},
1978
2555
{ { C_STRING_WITH_LEN("CONCAT") }, BUILDER(Create_func_concat)},
1979
2556
{ { C_STRING_WITH_LEN("CONCAT_WS") }, BUILDER(Create_func_concat_ws)},
1980
2557
{ { C_STRING_WITH_LEN("CONV") }, BUILDER(Create_func_conv)},
2558
{ { C_STRING_WITH_LEN("COS") }, BUILDER(Create_func_cos)},
1981
2559
{ { C_STRING_WITH_LEN("COT") }, BUILDER(Create_func_cot)},
1982
2560
{ { C_STRING_WITH_LEN("DATEDIFF") }, BUILDER(Create_func_datediff)},
1983
2561
{ { C_STRING_WITH_LEN("DATE_FORMAT") }, BUILDER(Create_func_date_format)},
1986
2564
{ { C_STRING_WITH_LEN("DAYOFWEEK") }, BUILDER(Create_func_dayofweek)},
1987
2565
{ { C_STRING_WITH_LEN("DAYOFYEAR") }, BUILDER(Create_func_dayofyear)},
1988
2566
{ { C_STRING_WITH_LEN("DEGREES") }, BUILDER(Create_func_degrees)},
2567
{ { C_STRING_WITH_LEN("ELT") }, BUILDER(Create_func_elt)},
2568
{ { C_STRING_WITH_LEN("EXP") }, BUILDER(Create_func_exp)},
1989
2569
{ { C_STRING_WITH_LEN("EXPORT_SET") }, BUILDER(Create_func_export_set)},
1990
2570
{ { C_STRING_WITH_LEN("FIELD") }, BUILDER(Create_func_field)},
1991
2571
{ { C_STRING_WITH_LEN("FIND_IN_SET") }, BUILDER(Create_func_find_in_set)},
2572
{ { C_STRING_WITH_LEN("FLOOR") }, BUILDER(Create_func_floor)},
2573
{ { C_STRING_WITH_LEN("FORMAT") }, BUILDER(Create_func_format)},
1992
2574
{ { C_STRING_WITH_LEN("FOUND_ROWS") }, BUILDER(Create_func_found_rows)},
1993
2575
{ { C_STRING_WITH_LEN("FROM_DAYS") }, BUILDER(Create_func_from_days)},
1994
2576
{ { C_STRING_WITH_LEN("FROM_UNIXTIME") }, BUILDER(Create_func_from_unixtime)},
2000
2582
{ { C_STRING_WITH_LEN("LAST_INSERT_ID") }, BUILDER(Create_func_last_insert_id)},
2001
2583
{ { C_STRING_WITH_LEN("LCASE") }, BUILDER(Create_func_lcase)},
2002
2584
{ { C_STRING_WITH_LEN("LEAST") }, BUILDER(Create_func_least)},
2585
{ { C_STRING_WITH_LEN("LN") }, BUILDER(Create_func_ln)},
2003
2586
{ { C_STRING_WITH_LEN("LOAD_FILE") }, BUILDER(Create_func_load_file)},
2004
2587
{ { C_STRING_WITH_LEN("LOCATE") }, BUILDER(Create_func_locate)},
2588
{ { C_STRING_WITH_LEN("LOG") }, BUILDER(Create_func_log)},
2589
{ { C_STRING_WITH_LEN("LOG10") }, BUILDER(Create_func_log10)},
2590
{ { C_STRING_WITH_LEN("LOG2") }, BUILDER(Create_func_log2)},
2005
2591
{ { C_STRING_WITH_LEN("LOWER") }, BUILDER(Create_func_lcase)},
2006
2592
{ { C_STRING_WITH_LEN("LPAD") }, BUILDER(Create_func_lpad)},
2007
2593
{ { C_STRING_WITH_LEN("LTRIM") }, BUILDER(Create_func_ltrim)},
2010
2596
{ { C_STRING_WITH_LEN("MONTHNAME") }, BUILDER(Create_func_monthname)},
2011
2597
{ { C_STRING_WITH_LEN("NULLIF") }, BUILDER(Create_func_nullif)},
2012
2598
{ { C_STRING_WITH_LEN("OCT") }, BUILDER(Create_func_oct)},
2599
{ { C_STRING_WITH_LEN("ORD") }, BUILDER(Create_func_ord)},
2013
2600
{ { C_STRING_WITH_LEN("PERIOD_ADD") }, BUILDER(Create_func_period_add)},
2014
2601
{ { C_STRING_WITH_LEN("PERIOD_DIFF") }, BUILDER(Create_func_period_diff)},
2015
2602
{ { C_STRING_WITH_LEN("PI") }, BUILDER(Create_func_pi)},
2603
{ { C_STRING_WITH_LEN("POW") }, BUILDER(Create_func_pow)},
2604
{ { C_STRING_WITH_LEN("POWER") }, BUILDER(Create_func_pow)},
2605
{ { C_STRING_WITH_LEN("QUOTE") }, BUILDER(Create_func_quote)},
2016
2606
{ { C_STRING_WITH_LEN("RADIANS") }, BUILDER(Create_func_radians)},
2017
2607
{ { C_STRING_WITH_LEN("ROUND") }, BUILDER(Create_func_round)},
2018
2608
{ { C_STRING_WITH_LEN("ROW_COUNT") }, BUILDER(Create_func_row_count)},
2019
2609
{ { C_STRING_WITH_LEN("RPAD") }, BUILDER(Create_func_rpad)},
2020
2610
{ { C_STRING_WITH_LEN("RTRIM") }, BUILDER(Create_func_rtrim)},
2021
2611
{ { C_STRING_WITH_LEN("SIGN") }, BUILDER(Create_func_sign)},
2612
{ { C_STRING_WITH_LEN("SIN") }, BUILDER(Create_func_sin)},
2022
2613
{ { C_STRING_WITH_LEN("SPACE") }, BUILDER(Create_func_space)},
2614
{ { C_STRING_WITH_LEN("SQRT") }, BUILDER(Create_func_sqrt)},
2023
2615
{ { C_STRING_WITH_LEN("STRCMP") }, BUILDER(Create_func_strcmp)},
2024
2616
{ { C_STRING_WITH_LEN("TAN") }, BUILDER(Create_func_tan)},
2025
2617
{ { C_STRING_WITH_LEN("TIME_FORMAT") }, BUILDER(Create_func_time_format)},
2046
2640
for (func= func_array; func->builder != NULL; func++)
2048
2642
func_name.assign(func->name.str, func->name.length);
2643
transform(func_name.begin(), func_name.end(), func_name.begin(), ::tolower);
2050
FunctionContainer::getMap()[func_name]= func->builder;
2645
native_functions_map[func_name]= func;
2058
2653
find_native_function_builder(LEX_STRING name)
2655
Native_func_registry *func;
2060
2656
Create_func *builder= NULL;
2062
2658
string func_name(name.str, name.length);
2064
FunctionContainer::Map::iterator func_iter=
2065
FunctionContainer::getMap().find(func_name);
2067
if (func_iter != FunctionContainer::getMap().end())
2659
transform(func_name.begin(), func_name.end(), func_name.begin(), ::tolower);
2661
map<string, Native_func_registry *>::iterator func_iter=
2662
native_functions_map.find(func_name);
2664
if (func_iter != native_functions_map.end())
2069
builder= (*func_iter).second;
2666
func= (*func_iter).second;
2667
builder= func->builder;
2072
2670
return builder;
2086
2684
const char *c_len, const char *c_dec,
2087
2685
const CHARSET_INFO * const cs)
2093
2691
switch (cast_type) {
2094
case ITEM_CAST_SIGNED:
2095
res= new (session->mem_root) function::cast::Signed(a);
2098
case ITEM_CAST_UNSIGNED:
2099
res= new (session->mem_root) function::cast::Unsigned(a);
2102
2692
case ITEM_CAST_BINARY:
2103
2693
res= new (session->mem_root) Item_func_binary(a);
2106
case ITEM_CAST_BOOLEAN:
2107
res= new (session->mem_root) function::cast::Boolean(a);
2110
case ITEM_CAST_TIME:
2111
res= new (session->mem_root) function::cast::Time(a);
2114
2695
case ITEM_CAST_DATE:
2115
2696
res= new (session->mem_root) Item_date_typecast(a);
2118
2698
case ITEM_CAST_DATETIME:
2119
2699
res= new (session->mem_root) Item_datetime_typecast(a);
2122
2701
case ITEM_CAST_DECIMAL:
2124
len= c_len ? atoi(c_len) : 0;
2125
dec= c_dec ? atoi(c_dec) : 0;
2126
class_decimal_trim(&len, &dec);
2129
my_error(ER_M_BIGGER_THAN_D, MYF(0), "");
2132
if (len > DECIMAL_MAX_PRECISION)
2134
my_error(ER_TOO_BIG_PRECISION, MYF(0), len, a->name,
2135
DECIMAL_MAX_PRECISION);
2138
if (dec > DECIMAL_MAX_SCALE)
2140
my_error(ER_TOO_BIG_SCALE, MYF(0), dec, a->name,
2144
res= new (session->mem_root) Item_decimal_typecast(a, len, dec);
2703
len= c_len ? atoi(c_len) : 0;
2704
dec= c_dec ? atoi(c_dec) : 0;
2705
my_decimal_trim(&len, &dec);
2708
my_error(ER_M_BIGGER_THAN_D, MYF(0), "");
2711
if (len > DECIMAL_MAX_PRECISION)
2713
my_error(ER_TOO_BIG_PRECISION, MYF(0), len, a->name,
2714
DECIMAL_MAX_PRECISION);
2717
if (dec > DECIMAL_MAX_SCALE)
2719
my_error(ER_TOO_BIG_SCALE, MYF(0), dec, a->name,
2723
res= new (session->mem_root) Item_decimal_typecast(a, len, dec);
2147
2726
case ITEM_CAST_CHAR:
2149
len= c_len ? atoi(c_len) : -1;
2150
res= create_func_char_cast(session, a, len, cs);
2728
len= c_len ? atoi(c_len) : -1;
2729
res= create_func_char_cast(session, a, len, cs);