20
20
Functions to create an item. Used by sql_yac.yy
23
#include <drizzled/server_includes.h>
24
24
#include <drizzled/item/create.h>
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
#include <drizzled/function/str/hex.h>
34
35
#include <drizzled/function/str/load_file.h>
35
36
#include <drizzled/function/str/make_set.h>
36
37
#include <drizzled/function/str/pad.h>
37
38
#include <drizzled/function/str/repeat.h>
38
39
#include <drizzled/function/str/str_conv.h>
40
#include <drizzled/function/str/substr.h>
39
41
#include <drizzled/function/str/trim.h>
42
#include <drizzled/function/str/uuid.h>
41
44
#include <drizzled/function/time/date_format.h>
42
45
#include <drizzled/function/time/dayname.h>
55
58
#include <drizzled/function/time/weekday.h>
57
60
#include <drizzled/item/cmpfunc.h>
58
#include <drizzled/plugin/function.h>
61
#include <drizzled/sql_udf.h>
59
62
#include <drizzled/session.h>
61
64
/* Function declarations */
63
66
#include <drizzled/function/func.h>
67
#include <drizzled/function/math/abs.h>
68
#include <drizzled/function/math/acos.h>
64
69
#include <drizzled/function/additive_op.h>
70
#include <drizzled/function/math/asin.h>
71
#include <drizzled/function/math/atan.h>
72
#include <drizzled/function/math/ceiling.h>
73
#include <drizzled/function/coercibility.h>
74
#include <drizzled/function/math/cos.h>
65
75
#include <drizzled/function/math/dec.h>
66
76
#include <drizzled/function/math/decimal_typecast.h>
77
#include <drizzled/function/math//exp.h>
67
78
#include <drizzled/function/field.h>
68
79
#include <drizzled/function/find_in_set.h>
80
#include <drizzled/function/math/floor.h>
69
81
#include <drizzled/function/found_rows.h>
70
82
#include <drizzled/function/get_system_var.h>
71
83
#include <drizzled/function/math/int_val.h>
72
84
#include <drizzled/function/math/integer.h>
73
85
#include <drizzled/function/last_insert.h>
86
#include <drizzled/function/math/ln.h>
74
87
#include <drizzled/function/locate.h>
88
#include <drizzled/function/math/log.h>
75
89
#include <drizzled/function/min_max.h>
76
90
#include <drizzled/function/num1.h>
77
91
#include <drizzled/function/num_op.h>
78
92
#include <drizzled/function/numhybrid.h>
93
#include <drizzled/function/math/ord.h>
94
#include <drizzled/function/math/pow.h>
95
#include <drizzled/function/math/rand.h>
79
96
#include <drizzled/function/math/real.h>
80
97
#include <drizzled/function/row_count.h>
81
98
#include <drizzled/function/set_user_var.h>
82
99
#include <drizzled/function/sign.h>
100
#include <drizzled/function/signed.h>
101
#include <drizzled/function/math/sin.h>
102
#include <drizzled/function/math/sqrt.h>
103
#include <drizzled/function/str/quote.h>
83
104
#include <drizzled/function/math/tan.h>
84
105
#include <drizzled/function/units.h>
106
#include <drizzled/function/unsigned.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
110
using namespace std;
245
261
it helps to compare code between versions, and helps with merges conflicts.
264
class Create_func_abs : public Create_func_arg1
267
using Create_func_arg1::create;
269
virtual Item *create(Session *session, Item *arg1);
271
static Create_func_abs s_singleton;
275
virtual ~Create_func_abs() {}
279
class Create_func_acos : public Create_func_arg1
282
using Create_func_arg1::create;
284
virtual Item *create(Session *session, Item *arg1);
286
static Create_func_acos s_singleton;
289
Create_func_acos() {}
290
virtual ~Create_func_acos() {}
293
class Create_func_asin : public Create_func_arg1
296
using Create_func_arg1::create;
298
virtual Item *create(Session *session, Item *arg1);
300
static Create_func_asin s_singleton;
303
Create_func_asin() {}
304
virtual ~Create_func_asin() {}
308
class Create_func_atan : public Create_native_func
311
virtual Item *create_native(Session *session, LEX_STRING name, List<Item> *item_list);
313
static Create_func_atan s_singleton;
316
Create_func_atan() {}
317
virtual ~Create_func_atan() {}
249
320
class Create_func_bin : public Create_func_arg1
260
331
virtual ~Create_func_bin() {}
335
class Create_func_ceiling : public Create_func_arg1
338
using Create_func_arg1::create;
340
virtual Item *create(Session *session, Item *arg1);
342
static Create_func_ceiling s_singleton;
345
Create_func_ceiling() {}
346
virtual ~Create_func_ceiling() {}
350
class Create_func_coercibility : public Create_func_arg1
353
using Create_func_arg1::create;
355
virtual Item *create(Session *session, Item *arg1);
357
static Create_func_coercibility s_singleton;
360
Create_func_coercibility() {}
361
virtual ~Create_func_coercibility() {}
263
365
class Create_func_concat : public Create_native_func
433
551
virtual ~Create_func_degrees() {}
555
class Create_func_elt : public Create_native_func
558
virtual Item *create_native(Session *session, LEX_STRING name, List<Item> *item_list);
560
static Create_func_elt s_singleton;
564
virtual ~Create_func_elt() {}
568
class Create_func_exp : public Create_func_arg1
571
using Create_func_arg1::create;
573
virtual Item *create(Session *session, Item *arg1);
575
static Create_func_exp s_singleton;
579
virtual ~Create_func_exp() {}
436
583
class Create_func_export_set : public Create_native_func
440
586
virtual Item *create_native(Session *session, LEX_STRING name, List<Item> *item_list);
474
620
virtual ~Create_func_find_in_set() {}
624
class Create_func_floor : public Create_func_arg1
627
using Create_func_arg1::create;
629
virtual Item *create(Session *session, Item *arg1);
631
static Create_func_floor s_singleton;
634
Create_func_floor() {}
635
virtual ~Create_func_floor() {}
639
class Create_func_format : public Create_func_arg2
642
using Create_func_arg2::create;
644
virtual Item *create(Session *session, Item *arg1, Item *arg2);
646
static Create_func_format s_singleton;
649
Create_func_format() {}
650
virtual ~Create_func_format() {}
477
654
class Create_func_found_rows : public Create_func_arg0
869
class Create_func_log : public Create_native_func
872
virtual Item *create_native(Session *session, LEX_STRING name, List<Item> *item_list);
874
static Create_func_log s_singleton;
878
virtual ~Create_func_log() {}
882
class Create_func_log10 : public Create_func_arg1
885
using Create_func_arg1::create;
887
virtual Item *create(Session *session, Item *arg1);
889
static Create_func_log10 s_singleton;
892
Create_func_log10() {}
893
virtual ~Create_func_log10() {}
897
class Create_func_log2 : public Create_func_arg1
900
using Create_func_arg1::create;
902
virtual Item *create(Session *session, Item *arg1);
904
static Create_func_log2 s_singleton;
907
Create_func_log2() {}
908
virtual ~Create_func_log2() {}
661
912
class Create_func_lpad : public Create_func_arg3
818
1085
virtual ~Create_func_pi() {}
1089
class Create_func_pow : public Create_func_arg2
1092
using Create_func_arg2::create;
1094
virtual Item *create(Session *session, Item *arg1, Item *arg2);
1096
static Create_func_pow s_singleton;
1099
Create_func_pow() {}
1100
virtual ~Create_func_pow() {}
1104
class Create_func_quote : public Create_func_arg1
1107
using Create_func_arg1::create;
1109
virtual Item *create(Session *session, Item *arg1);
1111
static Create_func_quote s_singleton;
1114
Create_func_quote() {}
1115
virtual ~Create_func_quote() {}
821
1119
class Create_func_radians : public Create_func_arg1
1071
1459
Create_udf_func::create(Session *session, LEX_STRING name, List<Item> *item_list)
1073
const plugin::Function *udf= plugin::Function::get(name.str, name.length);
1461
Function_builder *udf= find_udf(name.str, name.length);
1075
1463
return create(session, udf, item_list);
1080
Create_udf_func::create(Session *session, const plugin::Function *udf,
1468
Create_udf_func::create(Session *session, Function_builder *udf,
1081
1469
List<Item> *item_list)
1083
1471
Item_func *func= NULL;
1215
1603
return create(session, param_1, param_2, param_3);
1607
Create_func_abs Create_func_abs::s_singleton;
1610
Create_func_abs::create(Session *session, Item *arg1)
1612
return new (session->mem_root) Item_func_abs(arg1);
1616
Create_func_acos Create_func_acos::s_singleton;
1619
Create_func_acos::create(Session *session, Item *arg1)
1621
return new (session->mem_root) Item_func_acos(arg1);
1624
Create_func_asin Create_func_asin::s_singleton;
1627
Create_func_asin::create(Session *session, Item *arg1)
1629
return new (session->mem_root) Item_func_asin(arg1);
1633
Create_func_atan Create_func_atan::s_singleton;
1636
Create_func_atan::create_native(Session *session, LEX_STRING name,
1637
List<Item> *item_list)
1642
if (item_list != NULL)
1643
arg_count= item_list->elements;
1645
switch (arg_count) {
1648
Item *param_1= item_list->pop();
1649
func= new (session->mem_root) Item_func_atan(param_1);
1654
Item *param_1= item_list->pop();
1655
Item *param_2= item_list->pop();
1656
func= new (session->mem_root) Item_func_atan(param_1, param_2);
1661
my_error(ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT, MYF(0), name.str);
1218
1669
Create_func_bin Create_func_bin::s_singleton;
1225
1676
return new (session->mem_root) Item_func_conv(arg1, i10, i2);
1680
Create_func_ceiling Create_func_ceiling::s_singleton;
1683
Create_func_ceiling::create(Session *session, Item *arg1)
1685
return new (session->mem_root) Item_func_ceiling(arg1);
1689
Create_func_coercibility Create_func_coercibility::s_singleton;
1692
Create_func_coercibility::create(Session *session, Item *arg1)
1694
return new (session->mem_root) Item_func_coercibility(arg1);
1228
1698
Create_func_concat Create_func_concat::s_singleton;
1352
1832
180/M_PI, 0.0);
1836
Create_func_elt Create_func_elt::s_singleton;
1839
Create_func_elt::create_native(Session *session, LEX_STRING name,
1840
List<Item> *item_list)
1844
if (item_list != NULL)
1845
arg_count= item_list->elements;
1849
my_error(ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT, MYF(0), name.str);
1853
return new (session->mem_root) Item_func_elt(*item_list);
1857
Create_func_exp Create_func_exp::s_singleton;
1860
Create_func_exp::create(Session *session, Item *arg1)
1862
return new (session->mem_root) Item_func_exp(arg1);
1355
1866
Create_func_export_set Create_func_export_set::s_singleton;
1434
1945
return new (session->mem_root) Item_func_find_in_set(arg1, arg2);
1949
Create_func_floor Create_func_floor::s_singleton;
1952
Create_func_floor::create(Session *session, Item *arg1)
1954
return new (session->mem_root) Item_func_floor(arg1);
1958
Create_func_format Create_func_format::s_singleton;
1961
Create_func_format::create(Session *session, Item *arg1, Item *arg2)
1963
return new (session->mem_root) Item_func_format(arg1, arg2);
1437
1967
Create_func_found_rows Create_func_found_rows::s_singleton;
1504
2034
if (arg_count < 2)
1506
my_error(ER_WRONG_PARAMCOUNT_TO_FUNCTION, MYF(0), name.str);
2036
my_error(ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT, MYF(0), name.str);
1510
2040
return new (session->mem_root) Item_func_max(*item_list);
2044
Create_func_hex Create_func_hex::s_singleton;
2047
Create_func_hex::create(Session *session, Item *arg1)
2049
return new (session->mem_root) Item_func_hex(arg1);
1513
2053
Create_func_ifnull Create_func_ifnull::s_singleton;
1604
2144
if (arg_count < 2)
1606
my_error(ER_WRONG_PARAMCOUNT_TO_FUNCTION, MYF(0), name.str);
2146
my_error(ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT, MYF(0), name.str);
1610
2150
return new (session->mem_root) Item_func_min(*item_list);
2154
Create_func_ln Create_func_ln::s_singleton;
2157
Create_func_ln::create(Session *session, Item *arg1)
2159
return new (session->mem_root) Item_func_ln(arg1);
1613
2163
Create_func_load_file Create_func_load_file::s_singleton;
1616
2166
Create_func_load_file::create(Session *session, Item *arg1)
1618
return new (session->mem_root) Item_load_file(*session, arg1);
2168
return new (session->mem_root) Item_load_file(arg1);
1654
my_error(ER_WRONG_PARAMCOUNT_TO_FUNCTION, MYF(0), name.str);
2204
my_error(ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT, MYF(0), name.str);
2213
Create_func_log Create_func_log::s_singleton;
2216
Create_func_log::create_native(Session *session, LEX_STRING name,
2217
List<Item> *item_list)
2222
if (item_list != NULL)
2223
arg_count= item_list->elements;
2225
switch (arg_count) {
2228
Item *param_1= item_list->pop();
2229
func= new (session->mem_root) Item_func_log(param_1);
2234
Item *param_1= item_list->pop();
2235
Item *param_2= item_list->pop();
2236
func= new (session->mem_root) Item_func_log(param_1, param_2);
2241
my_error(ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT, MYF(0), name.str);
2250
Create_func_log10 Create_func_log10::s_singleton;
2253
Create_func_log10::create(Session *session, Item *arg1)
2255
return new (session->mem_root) Item_func_log10(arg1);
2259
Create_func_log2 Create_func_log2::s_singleton;
2262
Create_func_log2::create(Session *session, Item *arg1)
2264
return new (session->mem_root) Item_func_log2(arg1);
1662
2268
Create_func_lpad Create_func_lpad::s_singleton;
1665
2271
Create_func_lpad::create(Session *session, Item *arg1, Item *arg2, Item *arg3)
1667
return new (session->mem_root) Item_func_lpad(*session, arg1, arg2, arg3);
2273
return new (session->mem_root) Item_func_lpad(arg1, arg2, arg3);
1762
2378
return new (session->mem_root) Item_static_float_func("pi()", M_PI, 6, 8);
2382
Create_func_pow Create_func_pow::s_singleton;
2385
Create_func_pow::create(Session *session, Item *arg1, Item *arg2)
2387
return new (session->mem_root) Item_func_pow(arg1, arg2);
2391
Create_func_quote Create_func_quote::s_singleton;
2394
Create_func_quote::create(Session *session, Item *arg1)
2396
return new (session->mem_root) Item_func_quote(arg1);
1765
2400
Create_func_radians Create_func_radians::s_singleton;
1771
2406
M_PI/180, 0.0);
2410
Create_func_rand Create_func_rand::s_singleton;
2413
Create_func_rand::create_native(Session *session, LEX_STRING name,
2414
List<Item> *item_list)
2419
if (item_list != NULL)
2420
arg_count= item_list->elements;
2422
switch (arg_count) {
2425
func= new (session->mem_root) Item_func_rand();
2430
Item *param_1= item_list->pop();
2431
func= new (session->mem_root) Item_func_rand(param_1);
2436
my_error(ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT, MYF(0), name.str);
1774
2445
Create_func_round Create_func_round::s_singleton;
1868
2549
sp= new (session->mem_root) Item_string(" ", 1, cs, DERIVATION_COERCIBLE);
1871
return new (session->mem_root) Item_func_repeat(*session, sp, arg1);
2552
return new (session->mem_root) Item_func_repeat(sp, arg1);
2556
Create_func_sqrt Create_func_sqrt::s_singleton;
2559
Create_func_sqrt::create(Session *session, Item *arg1)
2561
return new (session->mem_root) Item_func_sqrt(arg1);
1874
2565
Create_func_strcmp Create_func_strcmp::s_singleton;
1975
2693
static Native_func_registry func_array[] =
2695
{ { C_STRING_WITH_LEN("ABS") }, BUILDER(Create_func_abs)},
2696
{ { C_STRING_WITH_LEN("ACOS") }, BUILDER(Create_func_acos)},
2697
{ { C_STRING_WITH_LEN("ASIN") }, BUILDER(Create_func_asin)},
2698
{ { C_STRING_WITH_LEN("ATAN") }, BUILDER(Create_func_atan)},
2699
{ { C_STRING_WITH_LEN("ATAN2") }, BUILDER(Create_func_atan)},
1977
2700
{ { C_STRING_WITH_LEN("BIN") }, BUILDER(Create_func_bin)},
2701
{ { C_STRING_WITH_LEN("CEIL") }, BUILDER(Create_func_ceiling)},
2702
{ { C_STRING_WITH_LEN("CEILING") }, BUILDER(Create_func_ceiling)},
2703
{ { C_STRING_WITH_LEN("COERCIBILITY") }, BUILDER(Create_func_coercibility)},
1978
2704
{ { C_STRING_WITH_LEN("CONCAT") }, BUILDER(Create_func_concat)},
1979
2705
{ { C_STRING_WITH_LEN("CONCAT_WS") }, BUILDER(Create_func_concat_ws)},
1980
2706
{ { C_STRING_WITH_LEN("CONV") }, BUILDER(Create_func_conv)},
2707
{ { C_STRING_WITH_LEN("COS") }, BUILDER(Create_func_cos)},
1981
2708
{ { C_STRING_WITH_LEN("COT") }, BUILDER(Create_func_cot)},
1982
2709
{ { C_STRING_WITH_LEN("DATEDIFF") }, BUILDER(Create_func_datediff)},
1983
2710
{ { C_STRING_WITH_LEN("DATE_FORMAT") }, BUILDER(Create_func_date_format)},
1986
2713
{ { C_STRING_WITH_LEN("DAYOFWEEK") }, BUILDER(Create_func_dayofweek)},
1987
2714
{ { C_STRING_WITH_LEN("DAYOFYEAR") }, BUILDER(Create_func_dayofyear)},
1988
2715
{ { C_STRING_WITH_LEN("DEGREES") }, BUILDER(Create_func_degrees)},
2716
{ { C_STRING_WITH_LEN("ELT") }, BUILDER(Create_func_elt)},
2717
{ { C_STRING_WITH_LEN("EXP") }, BUILDER(Create_func_exp)},
1989
2718
{ { C_STRING_WITH_LEN("EXPORT_SET") }, BUILDER(Create_func_export_set)},
1990
2719
{ { C_STRING_WITH_LEN("FIELD") }, BUILDER(Create_func_field)},
1991
2720
{ { C_STRING_WITH_LEN("FIND_IN_SET") }, BUILDER(Create_func_find_in_set)},
2721
{ { C_STRING_WITH_LEN("FLOOR") }, BUILDER(Create_func_floor)},
2722
{ { C_STRING_WITH_LEN("FORMAT") }, BUILDER(Create_func_format)},
1992
2723
{ { C_STRING_WITH_LEN("FOUND_ROWS") }, BUILDER(Create_func_found_rows)},
1993
2724
{ { C_STRING_WITH_LEN("FROM_DAYS") }, BUILDER(Create_func_from_days)},
1994
2725
{ { C_STRING_WITH_LEN("FROM_UNIXTIME") }, BUILDER(Create_func_from_unixtime)},
1995
2726
{ { C_STRING_WITH_LEN("GREATEST") }, BUILDER(Create_func_greatest)},
2727
{ { C_STRING_WITH_LEN("HEX") }, BUILDER(Create_func_hex)},
1996
2728
{ { C_STRING_WITH_LEN("IFNULL") }, BUILDER(Create_func_ifnull)},
1997
2729
{ { C_STRING_WITH_LEN("INSTR") }, BUILDER(Create_func_instr)},
1998
2730
{ { C_STRING_WITH_LEN("ISNULL") }, BUILDER(Create_func_isnull)},
2000
2732
{ { C_STRING_WITH_LEN("LAST_INSERT_ID") }, BUILDER(Create_func_last_insert_id)},
2001
2733
{ { C_STRING_WITH_LEN("LCASE") }, BUILDER(Create_func_lcase)},
2002
2734
{ { C_STRING_WITH_LEN("LEAST") }, BUILDER(Create_func_least)},
2735
{ { C_STRING_WITH_LEN("LN") }, BUILDER(Create_func_ln)},
2003
2736
{ { C_STRING_WITH_LEN("LOAD_FILE") }, BUILDER(Create_func_load_file)},
2004
2737
{ { C_STRING_WITH_LEN("LOCATE") }, BUILDER(Create_func_locate)},
2738
{ { C_STRING_WITH_LEN("LOG") }, BUILDER(Create_func_log)},
2739
{ { C_STRING_WITH_LEN("LOG10") }, BUILDER(Create_func_log10)},
2740
{ { C_STRING_WITH_LEN("LOG2") }, BUILDER(Create_func_log2)},
2005
2741
{ { C_STRING_WITH_LEN("LOWER") }, BUILDER(Create_func_lcase)},
2006
2742
{ { C_STRING_WITH_LEN("LPAD") }, BUILDER(Create_func_lpad)},
2007
2743
{ { C_STRING_WITH_LEN("LTRIM") }, BUILDER(Create_func_ltrim)},
2010
2746
{ { C_STRING_WITH_LEN("MONTHNAME") }, BUILDER(Create_func_monthname)},
2011
2747
{ { C_STRING_WITH_LEN("NULLIF") }, BUILDER(Create_func_nullif)},
2012
2748
{ { C_STRING_WITH_LEN("OCT") }, BUILDER(Create_func_oct)},
2749
{ { C_STRING_WITH_LEN("ORD") }, BUILDER(Create_func_ord)},
2013
2750
{ { C_STRING_WITH_LEN("PERIOD_ADD") }, BUILDER(Create_func_period_add)},
2014
2751
{ { C_STRING_WITH_LEN("PERIOD_DIFF") }, BUILDER(Create_func_period_diff)},
2015
2752
{ { C_STRING_WITH_LEN("PI") }, BUILDER(Create_func_pi)},
2753
{ { C_STRING_WITH_LEN("POW") }, BUILDER(Create_func_pow)},
2754
{ { C_STRING_WITH_LEN("POWER") }, BUILDER(Create_func_pow)},
2755
{ { C_STRING_WITH_LEN("QUOTE") }, BUILDER(Create_func_quote)},
2016
2756
{ { C_STRING_WITH_LEN("RADIANS") }, BUILDER(Create_func_radians)},
2757
{ { C_STRING_WITH_LEN("RAND") }, BUILDER(Create_func_rand)},
2017
2758
{ { C_STRING_WITH_LEN("ROUND") }, BUILDER(Create_func_round)},
2018
2759
{ { C_STRING_WITH_LEN("ROW_COUNT") }, BUILDER(Create_func_row_count)},
2019
2760
{ { C_STRING_WITH_LEN("RPAD") }, BUILDER(Create_func_rpad)},
2020
2761
{ { C_STRING_WITH_LEN("RTRIM") }, BUILDER(Create_func_rtrim)},
2021
2762
{ { C_STRING_WITH_LEN("SIGN") }, BUILDER(Create_func_sign)},
2763
{ { C_STRING_WITH_LEN("SIN") }, BUILDER(Create_func_sin)},
2022
2764
{ { C_STRING_WITH_LEN("SPACE") }, BUILDER(Create_func_space)},
2765
{ { C_STRING_WITH_LEN("SQRT") }, BUILDER(Create_func_sqrt)},
2023
2766
{ { C_STRING_WITH_LEN("STRCMP") }, BUILDER(Create_func_strcmp)},
2767
{ { C_STRING_WITH_LEN("SUBSTRING_INDEX") }, BUILDER(Create_func_substr_index)},
2024
2768
{ { C_STRING_WITH_LEN("TAN") }, BUILDER(Create_func_tan)},
2025
2769
{ { C_STRING_WITH_LEN("TIME_FORMAT") }, BUILDER(Create_func_time_format)},
2026
2770
{ { C_STRING_WITH_LEN("TO_DAYS") }, BUILDER(Create_func_to_days)},
2027
2771
{ { C_STRING_WITH_LEN("UCASE") }, BUILDER(Create_func_ucase)},
2772
{ { C_STRING_WITH_LEN("UNHEX") }, BUILDER(Create_func_unhex)},
2028
2773
{ { C_STRING_WITH_LEN("UNIX_TIMESTAMP") }, BUILDER(Create_func_unix_timestamp)},
2029
2774
{ { C_STRING_WITH_LEN("UPPER") }, BUILDER(Create_func_ucase)},
2775
{ { C_STRING_WITH_LEN("UUID") }, BUILDER(Create_func_uuid)},
2030
2776
{ { C_STRING_WITH_LEN("WEEKDAY") }, BUILDER(Create_func_weekday)},
2032
2778
{ {0, 0}, NULL}
2781
static map<string, Native_func_registry *> native_functions_map;
2036
2784
Load the hash table for native functions.
2037
2785
Note: this code is not thread safe, and is intended to be used at server
2058
2807
find_native_function_builder(LEX_STRING name)
2809
Native_func_registry *func;
2060
2810
Create_func *builder= NULL;
2062
2812
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())
2813
transform(func_name.begin(), func_name.end(), func_name.begin(), ::tolower);
2815
map<string, Native_func_registry *>::iterator func_iter=
2816
native_functions_map.find(func_name);
2818
if (func_iter != native_functions_map.end())
2069
builder= (*func_iter).second;
2820
func= (*func_iter).second;
2821
builder= func->builder;
2072
2824
return builder;
2086
2838
const char *c_len, const char *c_dec,
2087
2839
const CHARSET_INFO * const cs)
2093
2845
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
2846
case ITEM_CAST_BINARY:
2103
2847
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);
2849
case ITEM_CAST_SIGNED_INT:
2850
res= new (session->mem_root) Item_func_signed(a);
2852
case ITEM_CAST_UNSIGNED_INT:
2853
res= new (session->mem_root) Item_func_unsigned(a);
2114
2855
case ITEM_CAST_DATE:
2115
2856
res= new (session->mem_root) Item_date_typecast(a);
2118
2858
case ITEM_CAST_DATETIME:
2119
2859
res= new (session->mem_root) Item_datetime_typecast(a);
2122
2861
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);
2863
len= c_len ? atoi(c_len) : 0;
2864
dec= c_dec ? atoi(c_dec) : 0;
2865
my_decimal_trim(&len, &dec);
2868
my_error(ER_M_BIGGER_THAN_D, MYF(0), "");
2871
if (len > DECIMAL_MAX_PRECISION)
2873
my_error(ER_TOO_BIG_PRECISION, MYF(0), len, a->name,
2874
DECIMAL_MAX_PRECISION);
2877
if (dec > DECIMAL_MAX_SCALE)
2879
my_error(ER_TOO_BIG_SCALE, MYF(0), dec, a->name,
2883
res= new (session->mem_root) Item_decimal_typecast(a, len, dec);
2147
2886
case ITEM_CAST_CHAR:
2149
len= c_len ? atoi(c_len) : -1;
2150
res= create_func_char_cast(session, a, len, cs);
2888
len= c_len ? atoi(c_len) : -1;
2889
res= create_func_char_cast(session, a, len, cs);
2158
} /* namespace drizzled */