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"
27
#include <drizzled/data_home.h>
30
29
#include <drizzled/function/str/binary.h>
31
30
#include <drizzled/function/str/concat.h>
32
31
#include <drizzled/function/str/conv.h>
32
#include <drizzled/function/str/elt.h>
33
33
#include <drizzled/function/str/export_set.h>
34
#include <drizzled/function/str/format.h>
35
#include <drizzled/function/str/hex.h>
34
36
#include <drizzled/function/str/load_file.h>
35
37
#include <drizzled/function/str/make_set.h>
36
38
#include <drizzled/function/str/pad.h>
37
39
#include <drizzled/function/str/repeat.h>
38
40
#include <drizzled/function/str/str_conv.h>
41
#include <drizzled/function/str/substr.h>
39
42
#include <drizzled/function/str/trim.h>
43
#include <drizzled/function/str/uuid.h>
41
45
#include <drizzled/function/time/date_format.h>
42
46
#include <drizzled/function/time/dayname.h>
55
59
#include <drizzled/function/time/weekday.h>
57
61
#include <drizzled/item/cmpfunc.h>
58
#include <drizzled/plugin/function.h>
62
#include <drizzled/sql_udf.h>
59
63
#include <drizzled/session.h>
61
65
/* Function declarations */
63
67
#include <drizzled/function/func.h>
68
#include <drizzled/function/math/abs.h>
69
#include <drizzled/function/math/acos.h>
64
70
#include <drizzled/function/additive_op.h>
71
#include <drizzled/function/math/asin.h>
72
#include <drizzled/function/math/atan.h>
73
#include <drizzled/function/benchmark.h>
74
#include <drizzled/function/bit.h>
75
#include <drizzled/function/bit_count.h>
76
#include <drizzled/function/bit_length.h>
77
#include <drizzled/function/math/ceiling.h>
78
#include <drizzled/function/char_length.h>
79
#include <drizzled/function/coercibility.h>
80
#include <drizzled/function/connection_id.h>
81
#include <drizzled/function/math/cos.h>
65
82
#include <drizzled/function/math/dec.h>
66
83
#include <drizzled/function/math/decimal_typecast.h>
84
#include <drizzled/function/math//exp.h>
67
85
#include <drizzled/function/field.h>
68
86
#include <drizzled/function/find_in_set.h>
87
#include <drizzled/function/math/floor.h>
69
88
#include <drizzled/function/found_rows.h>
70
89
#include <drizzled/function/get_system_var.h>
90
#include <drizzled/function/get_variable.h>
71
91
#include <drizzled/function/math/int_val.h>
72
92
#include <drizzled/function/math/integer.h>
73
93
#include <drizzled/function/last_insert.h>
94
#include <drizzled/function/length.h>
95
#include <drizzled/function/math/ln.h>
74
96
#include <drizzled/function/locate.h>
97
#include <drizzled/function/math/log.h>
75
98
#include <drizzled/function/min_max.h>
76
99
#include <drizzled/function/num1.h>
77
100
#include <drizzled/function/num_op.h>
78
101
#include <drizzled/function/numhybrid.h>
102
#include <drizzled/function/math/ord.h>
103
#include <drizzled/function/math/pow.h>
104
#include <drizzled/function/math/rand.h>
79
105
#include <drizzled/function/math/real.h>
80
106
#include <drizzled/function/row_count.h>
81
107
#include <drizzled/function/set_user_var.h>
82
108
#include <drizzled/function/sign.h>
109
#include <drizzled/function/signed.h>
110
#include <drizzled/function/math/sin.h>
111
#include <drizzled/function/math/sqrt.h>
112
#include <drizzled/function/str/quote.h>
83
113
#include <drizzled/function/math/tan.h>
84
114
#include <drizzled/function/units.h>
115
#include <drizzled/function/unsigned.h>
116
#include <drizzled/function/update_hash.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
120
using namespace std;
245
271
it helps to compare code between versions, and helps with merges conflicts.
274
class Create_func_abs : public Create_func_arg1
277
using Create_func_arg1::create;
279
virtual Item *create(Session *session, Item *arg1);
281
static Create_func_abs s_singleton;
285
virtual ~Create_func_abs() {}
289
class Create_func_acos : public Create_func_arg1
292
using Create_func_arg1::create;
294
virtual Item *create(Session *session, Item *arg1);
296
static Create_func_acos s_singleton;
299
Create_func_acos() {}
300
virtual ~Create_func_acos() {}
303
class Create_func_asin : public Create_func_arg1
306
using Create_func_arg1::create;
308
virtual Item *create(Session *session, Item *arg1);
310
static Create_func_asin s_singleton;
313
Create_func_asin() {}
314
virtual ~Create_func_asin() {}
318
class Create_func_atan : public Create_native_func
321
virtual Item *create_native(Session *session, LEX_STRING name, List<Item> *item_list);
323
static Create_func_atan s_singleton;
326
Create_func_atan() {}
327
virtual ~Create_func_atan() {}
331
class Create_func_benchmark : public Create_func_arg2
334
using Create_func_arg2::create;
336
virtual Item *create(Session *session, Item *arg1, Item *arg2);
338
static Create_func_benchmark s_singleton;
341
Create_func_benchmark() {}
342
virtual ~Create_func_benchmark() {}
249
346
class Create_func_bin : public Create_func_arg1
260
357
virtual ~Create_func_bin() {}
361
class Create_func_bit_count : public Create_func_arg1
364
using Create_func_arg1::create;
366
virtual Item *create(Session *session, Item *arg1);
368
static Create_func_bit_count s_singleton;
371
Create_func_bit_count() {}
372
virtual ~Create_func_bit_count() {}
376
class Create_func_bit_length : public Create_func_arg1
379
using Create_func_arg1::create;
381
virtual Item *create(Session *session, Item *arg1);
383
static Create_func_bit_length s_singleton;
386
Create_func_bit_length() {}
387
virtual ~Create_func_bit_length() {}
391
class Create_func_ceiling : public Create_func_arg1
394
using Create_func_arg1::create;
396
virtual Item *create(Session *session, Item *arg1);
398
static Create_func_ceiling s_singleton;
401
Create_func_ceiling() {}
402
virtual ~Create_func_ceiling() {}
406
class Create_func_char_length : public Create_func_arg1
409
using Create_func_arg1::create;
411
virtual Item *create(Session *session, Item *arg1);
413
static Create_func_char_length s_singleton;
416
Create_func_char_length() {}
417
virtual ~Create_func_char_length() {}
421
class Create_func_coercibility : public Create_func_arg1
424
using Create_func_arg1::create;
426
virtual Item *create(Session *session, Item *arg1);
428
static Create_func_coercibility s_singleton;
431
Create_func_coercibility() {}
432
virtual ~Create_func_coercibility() {}
263
436
class Create_func_concat : public Create_native_func
433
637
virtual ~Create_func_degrees() {}
641
class Create_func_elt : public Create_native_func
644
virtual Item *create_native(Session *session, LEX_STRING name, List<Item> *item_list);
646
static Create_func_elt s_singleton;
650
virtual ~Create_func_elt() {}
654
class Create_func_exp : public Create_func_arg1
657
using Create_func_arg1::create;
659
virtual Item *create(Session *session, Item *arg1);
661
static Create_func_exp s_singleton;
665
virtual ~Create_func_exp() {}
436
669
class Create_func_export_set : public Create_native_func
440
672
virtual Item *create_native(Session *session, LEX_STRING name, List<Item> *item_list);
474
706
virtual ~Create_func_find_in_set() {}
710
class Create_func_floor : public Create_func_arg1
713
using Create_func_arg1::create;
715
virtual Item *create(Session *session, Item *arg1);
717
static Create_func_floor s_singleton;
720
Create_func_floor() {}
721
virtual ~Create_func_floor() {}
725
class Create_func_format : public Create_func_arg2
728
using Create_func_arg2::create;
730
virtual Item *create(Session *session, Item *arg1, Item *arg2);
732
static Create_func_format s_singleton;
735
Create_func_format() {}
736
virtual ~Create_func_format() {}
477
740
class Create_func_found_rows : public Create_func_arg0
630
908
virtual ~Create_func_least() {}
912
class Create_func_length : public Create_func_arg1
915
using Create_func_arg1::create;
917
virtual Item *create(Session *session, Item *arg1);
919
static Create_func_length s_singleton;
922
Create_func_length() {}
923
virtual ~Create_func_length() {}
927
class Create_func_ln : public Create_func_arg1
930
using Create_func_arg1::create;
932
virtual Item *create(Session *session, Item *arg1);
934
static Create_func_ln s_singleton;
938
virtual ~Create_func_ln() {}
633
942
class Create_func_load_file : public Create_func_arg1
970
class Create_func_log : public Create_native_func
973
virtual Item *create_native(Session *session, LEX_STRING name, List<Item> *item_list);
975
static Create_func_log s_singleton;
979
virtual ~Create_func_log() {}
983
class Create_func_log10 : public Create_func_arg1
986
using Create_func_arg1::create;
988
virtual Item *create(Session *session, Item *arg1);
990
static Create_func_log10 s_singleton;
993
Create_func_log10() {}
994
virtual ~Create_func_log10() {}
998
class Create_func_log2 : public Create_func_arg1
1001
using Create_func_arg1::create;
1003
virtual Item *create(Session *session, Item *arg1);
1005
static Create_func_log2 s_singleton;
1008
Create_func_log2() {}
1009
virtual ~Create_func_log2() {}
661
1013
class Create_func_lpad : public Create_func_arg3
818
1186
virtual ~Create_func_pi() {}
1190
class Create_func_pow : public Create_func_arg2
1193
using Create_func_arg2::create;
1195
virtual Item *create(Session *session, Item *arg1, Item *arg2);
1197
static Create_func_pow s_singleton;
1200
Create_func_pow() {}
1201
virtual ~Create_func_pow() {}
1205
class Create_func_quote : public Create_func_arg1
1208
using Create_func_arg1::create;
1210
virtual Item *create(Session *session, Item *arg1);
1212
static Create_func_quote s_singleton;
1215
Create_func_quote() {}
1216
virtual ~Create_func_quote() {}
821
1220
class Create_func_radians : public Create_func_arg1
1498
class Create_func_uuid : public Create_func_arg0
1501
using Create_func_arg0::create;
1503
virtual Item *create(Session *session);
1505
static Create_func_uuid s_singleton;
1508
Create_func_uuid() {}
1509
virtual ~Create_func_uuid() {}
1513
class Create_func_version : public Create_func_arg0
1516
using Create_func_arg0::create;
1518
virtual Item *create(Session *session);
1520
static Create_func_version s_singleton;
1523
Create_func_version() {}
1524
virtual ~Create_func_version() {}
1024
1528
class Create_func_weekday : public Create_func_arg1
1071
1575
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);
1577
udf_func *udf= find_udf(name.str, name.length);
1075
1579
return create(session, udf, item_list);
1080
Create_udf_func::create(Session *session, const plugin::Function *udf,
1081
List<Item> *item_list)
1584
Create_udf_func::create(Session *session, udf_func *udf, List<Item> *item_list)
1083
1586
Item_func *func= NULL;
1084
1587
int arg_count= 0;
1215
1711
return create(session, param_1, param_2, param_3);
1715
Create_func_abs Create_func_abs::s_singleton;
1718
Create_func_abs::create(Session *session, Item *arg1)
1720
return new (session->mem_root) Item_func_abs(arg1);
1724
Create_func_acos Create_func_acos::s_singleton;
1727
Create_func_acos::create(Session *session, Item *arg1)
1729
return new (session->mem_root) Item_func_acos(arg1);
1732
Create_func_asin Create_func_asin::s_singleton;
1735
Create_func_asin::create(Session *session, Item *arg1)
1737
return new (session->mem_root) Item_func_asin(arg1);
1741
Create_func_atan Create_func_atan::s_singleton;
1744
Create_func_atan::create_native(Session *session, LEX_STRING name,
1745
List<Item> *item_list)
1750
if (item_list != NULL)
1751
arg_count= item_list->elements;
1753
switch (arg_count) {
1756
Item *param_1= item_list->pop();
1757
func= new (session->mem_root) Item_func_atan(param_1);
1762
Item *param_1= item_list->pop();
1763
Item *param_2= item_list->pop();
1764
func= new (session->mem_root) Item_func_atan(param_1, param_2);
1769
my_error(ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT, MYF(0), name.str);
1778
Create_func_benchmark Create_func_benchmark::s_singleton;
1781
Create_func_benchmark::create(Session *session, Item *arg1, Item *arg2)
1783
return new (session->mem_root) Item_func_benchmark(arg1, arg2);
1218
1787
Create_func_bin Create_func_bin::s_singleton;
1225
1794
return new (session->mem_root) Item_func_conv(arg1, i10, i2);
1798
Create_func_bit_count Create_func_bit_count::s_singleton;
1801
Create_func_bit_count::create(Session *session, Item *arg1)
1803
return new (session->mem_root) Item_func_bit_count(arg1);
1807
Create_func_bit_length Create_func_bit_length::s_singleton;
1810
Create_func_bit_length::create(Session *session, Item *arg1)
1812
return new (session->mem_root) Item_func_bit_length(arg1);
1816
Create_func_ceiling Create_func_ceiling::s_singleton;
1819
Create_func_ceiling::create(Session *session, Item *arg1)
1821
return new (session->mem_root) Item_func_ceiling(arg1);
1825
Create_func_char_length Create_func_char_length::s_singleton;
1828
Create_func_char_length::create(Session *session, Item *arg1)
1830
return new (session->mem_root) Item_func_char_length(arg1);
1834
Create_func_coercibility Create_func_coercibility::s_singleton;
1837
Create_func_coercibility::create(Session *session, Item *arg1)
1839
return new (session->mem_root) Item_func_coercibility(arg1);
1228
1843
Create_func_concat Create_func_concat::s_singleton;
1260
1875
/* "WS" stands for "With Separator": this function takes 2+ arguments */
1261
1876
if (arg_count < 2)
1263
my_error(ER_WRONG_PARAMCOUNT_TO_FUNCTION, MYF(0), name.str);
1878
my_error(ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT, MYF(0), name.str);
1267
return new (session->mem_root) Item_func_concat_ws(*session, *item_list);
1882
return new (session->mem_root) Item_func_concat_ws(*item_list);
1886
Create_func_connection_id Create_func_connection_id::s_singleton;
1889
Create_func_connection_id::create(Session *session)
1891
return new (session->mem_root) Item_func_connection_id();
1352
1986
180/M_PI, 0.0);
1990
Create_func_elt Create_func_elt::s_singleton;
1993
Create_func_elt::create_native(Session *session, LEX_STRING name,
1994
List<Item> *item_list)
1998
if (item_list != NULL)
1999
arg_count= item_list->elements;
2003
my_error(ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT, MYF(0), name.str);
2007
return new (session->mem_root) Item_func_elt(*item_list);
2011
Create_func_exp Create_func_exp::s_singleton;
2014
Create_func_exp::create(Session *session, Item *arg1)
2016
return new (session->mem_root) Item_func_exp(arg1);
1355
2020
Create_func_export_set Create_func_export_set::s_singleton;
1434
2099
return new (session->mem_root) Item_func_find_in_set(arg1, arg2);
2103
Create_func_floor Create_func_floor::s_singleton;
2106
Create_func_floor::create(Session *session, Item *arg1)
2108
return new (session->mem_root) Item_func_floor(arg1);
2112
Create_func_format Create_func_format::s_singleton;
2115
Create_func_format::create(Session *session, Item *arg1, Item *arg2)
2117
return new (session->mem_root) Item_func_format(arg1, arg2);
1437
2121
Create_func_found_rows Create_func_found_rows::s_singleton;
1604
2298
if (arg_count < 2)
1606
my_error(ER_WRONG_PARAMCOUNT_TO_FUNCTION, MYF(0), name.str);
2300
my_error(ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT, MYF(0), name.str);
1610
2304
return new (session->mem_root) Item_func_min(*item_list);
2308
Create_func_length Create_func_length::s_singleton;
2311
Create_func_length::create(Session *session, Item *arg1)
2313
return new (session->mem_root) Item_func_length(arg1);
2317
Create_func_ln Create_func_ln::s_singleton;
2320
Create_func_ln::create(Session *session, Item *arg1)
2322
return new (session->mem_root) Item_func_ln(arg1);
1613
2326
Create_func_load_file Create_func_load_file::s_singleton;
1616
2329
Create_func_load_file::create(Session *session, Item *arg1)
1618
return new (session->mem_root) Item_load_file(*session, arg1);
2331
return new (session->mem_root) Item_load_file(arg1);
1654
my_error(ER_WRONG_PARAMCOUNT_TO_FUNCTION, MYF(0), name.str);
2367
my_error(ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT, MYF(0), name.str);
2376
Create_func_log Create_func_log::s_singleton;
2379
Create_func_log::create_native(Session *session, LEX_STRING name,
2380
List<Item> *item_list)
2385
if (item_list != NULL)
2386
arg_count= item_list->elements;
2388
switch (arg_count) {
2391
Item *param_1= item_list->pop();
2392
func= new (session->mem_root) Item_func_log(param_1);
2397
Item *param_1= item_list->pop();
2398
Item *param_2= item_list->pop();
2399
func= new (session->mem_root) Item_func_log(param_1, param_2);
2404
my_error(ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT, MYF(0), name.str);
2413
Create_func_log10 Create_func_log10::s_singleton;
2416
Create_func_log10::create(Session *session, Item *arg1)
2418
return new (session->mem_root) Item_func_log10(arg1);
2422
Create_func_log2 Create_func_log2::s_singleton;
2425
Create_func_log2::create(Session *session, Item *arg1)
2427
return new (session->mem_root) Item_func_log2(arg1);
1662
2431
Create_func_lpad Create_func_lpad::s_singleton;
1665
2434
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);
2436
return new (session->mem_root) Item_func_lpad(arg1, arg2, arg3);
1762
2541
return new (session->mem_root) Item_static_float_func("pi()", M_PI, 6, 8);
2545
Create_func_pow Create_func_pow::s_singleton;
2548
Create_func_pow::create(Session *session, Item *arg1, Item *arg2)
2550
return new (session->mem_root) Item_func_pow(arg1, arg2);
2554
Create_func_quote Create_func_quote::s_singleton;
2557
Create_func_quote::create(Session *session, Item *arg1)
2559
return new (session->mem_root) Item_func_quote(arg1);
1765
2563
Create_func_radians Create_func_radians::s_singleton;
1860
2704
if (cs->mbminlen > 1)
1862
size_t dummy_errors;
1863
sp= new (session->mem_root) Item_string("", 0, cs, DERIVATION_COERCIBLE);
2706
uint32_t dummy_errors;
2707
sp= new (session->mem_root) Item_string("", 0, cs, DERIVATION_COERCIBLE, MY_REPERTOIRE_ASCII);
1864
2708
sp->str_value.copy(" ", 1, &my_charset_utf8_general_ci, cs, &dummy_errors);
1868
sp= new (session->mem_root) Item_string(" ", 1, cs, DERIVATION_COERCIBLE);
2712
sp= new (session->mem_root) Item_string(" ", 1, cs, DERIVATION_COERCIBLE, MY_REPERTOIRE_ASCII);
1871
return new (session->mem_root) Item_func_repeat(*session, sp, arg1);
2715
return new (session->mem_root) Item_func_repeat(sp, arg1);
2719
Create_func_sqrt Create_func_sqrt::s_singleton;
2722
Create_func_sqrt::create(Session *session, Item *arg1)
2724
return new (session->mem_root) Item_func_sqrt(arg1);
1874
2728
Create_func_strcmp Create_func_strcmp::s_singleton;
1975
2869
static Native_func_registry func_array[] =
2871
{ { C_STRING_WITH_LEN("ABS") }, BUILDER(Create_func_abs)},
2872
{ { C_STRING_WITH_LEN("ACOS") }, BUILDER(Create_func_acos)},
2873
{ { C_STRING_WITH_LEN("ASIN") }, BUILDER(Create_func_asin)},
2874
{ { C_STRING_WITH_LEN("ATAN") }, BUILDER(Create_func_atan)},
2875
{ { C_STRING_WITH_LEN("ATAN2") }, BUILDER(Create_func_atan)},
2876
{ { C_STRING_WITH_LEN("BENCHMARK") }, BUILDER(Create_func_benchmark)},
1977
2877
{ { C_STRING_WITH_LEN("BIN") }, BUILDER(Create_func_bin)},
2878
{ { C_STRING_WITH_LEN("BIT_COUNT") }, BUILDER(Create_func_bit_count)},
2879
{ { C_STRING_WITH_LEN("BIT_LENGTH") }, BUILDER(Create_func_bit_length)},
2880
{ { C_STRING_WITH_LEN("CEIL") }, BUILDER(Create_func_ceiling)},
2881
{ { C_STRING_WITH_LEN("CEILING") }, BUILDER(Create_func_ceiling)},
2882
{ { C_STRING_WITH_LEN("CHARACTER_LENGTH") }, BUILDER(Create_func_char_length)},
2883
{ { C_STRING_WITH_LEN("CHAR_LENGTH") }, BUILDER(Create_func_char_length)},
2884
{ { C_STRING_WITH_LEN("COERCIBILITY") }, BUILDER(Create_func_coercibility)},
1978
2885
{ { C_STRING_WITH_LEN("CONCAT") }, BUILDER(Create_func_concat)},
1979
2886
{ { C_STRING_WITH_LEN("CONCAT_WS") }, BUILDER(Create_func_concat_ws)},
2887
{ { C_STRING_WITH_LEN("CONNECTION_ID") }, BUILDER(Create_func_connection_id)},
1980
2888
{ { C_STRING_WITH_LEN("CONV") }, BUILDER(Create_func_conv)},
2889
{ { C_STRING_WITH_LEN("COS") }, BUILDER(Create_func_cos)},
1981
2890
{ { C_STRING_WITH_LEN("COT") }, BUILDER(Create_func_cot)},
1982
2891
{ { C_STRING_WITH_LEN("DATEDIFF") }, BUILDER(Create_func_datediff)},
1983
2892
{ { C_STRING_WITH_LEN("DATE_FORMAT") }, BUILDER(Create_func_date_format)},
1986
2895
{ { C_STRING_WITH_LEN("DAYOFWEEK") }, BUILDER(Create_func_dayofweek)},
1987
2896
{ { C_STRING_WITH_LEN("DAYOFYEAR") }, BUILDER(Create_func_dayofyear)},
1988
2897
{ { C_STRING_WITH_LEN("DEGREES") }, BUILDER(Create_func_degrees)},
2898
{ { C_STRING_WITH_LEN("ELT") }, BUILDER(Create_func_elt)},
2899
{ { C_STRING_WITH_LEN("EXP") }, BUILDER(Create_func_exp)},
1989
2900
{ { C_STRING_WITH_LEN("EXPORT_SET") }, BUILDER(Create_func_export_set)},
1990
2901
{ { C_STRING_WITH_LEN("FIELD") }, BUILDER(Create_func_field)},
1991
2902
{ { C_STRING_WITH_LEN("FIND_IN_SET") }, BUILDER(Create_func_find_in_set)},
2903
{ { C_STRING_WITH_LEN("FLOOR") }, BUILDER(Create_func_floor)},
2904
{ { C_STRING_WITH_LEN("FORMAT") }, BUILDER(Create_func_format)},
1992
2905
{ { C_STRING_WITH_LEN("FOUND_ROWS") }, BUILDER(Create_func_found_rows)},
1993
2906
{ { C_STRING_WITH_LEN("FROM_DAYS") }, BUILDER(Create_func_from_days)},
1994
2907
{ { C_STRING_WITH_LEN("FROM_UNIXTIME") }, BUILDER(Create_func_from_unixtime)},
1995
2908
{ { C_STRING_WITH_LEN("GREATEST") }, BUILDER(Create_func_greatest)},
2909
{ { C_STRING_WITH_LEN("HEX") }, BUILDER(Create_func_hex)},
1996
2910
{ { C_STRING_WITH_LEN("IFNULL") }, BUILDER(Create_func_ifnull)},
1997
2911
{ { C_STRING_WITH_LEN("INSTR") }, BUILDER(Create_func_instr)},
1998
2912
{ { C_STRING_WITH_LEN("ISNULL") }, BUILDER(Create_func_isnull)},
2000
2914
{ { C_STRING_WITH_LEN("LAST_INSERT_ID") }, BUILDER(Create_func_last_insert_id)},
2001
2915
{ { C_STRING_WITH_LEN("LCASE") }, BUILDER(Create_func_lcase)},
2002
2916
{ { C_STRING_WITH_LEN("LEAST") }, BUILDER(Create_func_least)},
2917
{ { C_STRING_WITH_LEN("LENGTH") }, BUILDER(Create_func_length)},
2918
{ { C_STRING_WITH_LEN("LN") }, BUILDER(Create_func_ln)},
2003
2919
{ { C_STRING_WITH_LEN("LOAD_FILE") }, BUILDER(Create_func_load_file)},
2004
2920
{ { C_STRING_WITH_LEN("LOCATE") }, BUILDER(Create_func_locate)},
2921
{ { C_STRING_WITH_LEN("LOG") }, BUILDER(Create_func_log)},
2922
{ { C_STRING_WITH_LEN("LOG10") }, BUILDER(Create_func_log10)},
2923
{ { C_STRING_WITH_LEN("LOG2") }, BUILDER(Create_func_log2)},
2005
2924
{ { C_STRING_WITH_LEN("LOWER") }, BUILDER(Create_func_lcase)},
2006
2925
{ { C_STRING_WITH_LEN("LPAD") }, BUILDER(Create_func_lpad)},
2007
2926
{ { C_STRING_WITH_LEN("LTRIM") }, BUILDER(Create_func_ltrim)},
2010
2929
{ { C_STRING_WITH_LEN("MONTHNAME") }, BUILDER(Create_func_monthname)},
2011
2930
{ { C_STRING_WITH_LEN("NULLIF") }, BUILDER(Create_func_nullif)},
2012
2931
{ { C_STRING_WITH_LEN("OCT") }, BUILDER(Create_func_oct)},
2932
{ { C_STRING_WITH_LEN("OCTET_LENGTH") }, BUILDER(Create_func_length)},
2933
{ { C_STRING_WITH_LEN("ORD") }, BUILDER(Create_func_ord)},
2013
2934
{ { C_STRING_WITH_LEN("PERIOD_ADD") }, BUILDER(Create_func_period_add)},
2014
2935
{ { C_STRING_WITH_LEN("PERIOD_DIFF") }, BUILDER(Create_func_period_diff)},
2015
2936
{ { C_STRING_WITH_LEN("PI") }, BUILDER(Create_func_pi)},
2937
{ { C_STRING_WITH_LEN("POW") }, BUILDER(Create_func_pow)},
2938
{ { C_STRING_WITH_LEN("POWER") }, BUILDER(Create_func_pow)},
2939
{ { C_STRING_WITH_LEN("QUOTE") }, BUILDER(Create_func_quote)},
2016
2940
{ { C_STRING_WITH_LEN("RADIANS") }, BUILDER(Create_func_radians)},
2941
{ { C_STRING_WITH_LEN("RAND") }, BUILDER(Create_func_rand)},
2017
2942
{ { C_STRING_WITH_LEN("ROUND") }, BUILDER(Create_func_round)},
2018
2943
{ { C_STRING_WITH_LEN("ROW_COUNT") }, BUILDER(Create_func_row_count)},
2019
2944
{ { C_STRING_WITH_LEN("RPAD") }, BUILDER(Create_func_rpad)},
2020
2945
{ { C_STRING_WITH_LEN("RTRIM") }, BUILDER(Create_func_rtrim)},
2021
2946
{ { C_STRING_WITH_LEN("SIGN") }, BUILDER(Create_func_sign)},
2947
{ { C_STRING_WITH_LEN("SIN") }, BUILDER(Create_func_sin)},
2022
2948
{ { C_STRING_WITH_LEN("SPACE") }, BUILDER(Create_func_space)},
2949
{ { C_STRING_WITH_LEN("SQRT") }, BUILDER(Create_func_sqrt)},
2023
2950
{ { C_STRING_WITH_LEN("STRCMP") }, BUILDER(Create_func_strcmp)},
2951
{ { C_STRING_WITH_LEN("SUBSTRING_INDEX") }, BUILDER(Create_func_substr_index)},
2024
2952
{ { C_STRING_WITH_LEN("TAN") }, BUILDER(Create_func_tan)},
2025
2953
{ { C_STRING_WITH_LEN("TIME_FORMAT") }, BUILDER(Create_func_time_format)},
2026
2954
{ { C_STRING_WITH_LEN("TO_DAYS") }, BUILDER(Create_func_to_days)},
2027
2955
{ { C_STRING_WITH_LEN("UCASE") }, BUILDER(Create_func_ucase)},
2956
{ { C_STRING_WITH_LEN("UNHEX") }, BUILDER(Create_func_unhex)},
2028
2957
{ { C_STRING_WITH_LEN("UNIX_TIMESTAMP") }, BUILDER(Create_func_unix_timestamp)},
2029
2958
{ { C_STRING_WITH_LEN("UPPER") }, BUILDER(Create_func_ucase)},
2959
{ { C_STRING_WITH_LEN("UUID") }, BUILDER(Create_func_uuid)},
2960
{ { C_STRING_WITH_LEN("VERSION") }, BUILDER(Create_func_version)},
2030
2961
{ { C_STRING_WITH_LEN("WEEKDAY") }, BUILDER(Create_func_weekday)},
2032
2963
{ {0, 0}, NULL}
2966
static map<string, Native_func_registry *> native_functions_map;
2036
2969
Load the hash table for native functions.
2037
2970
Note: this code is not thread safe, and is intended to be used at server
2058
2992
find_native_function_builder(LEX_STRING name)
2994
Native_func_registry *func;
2060
2995
Create_func *builder= NULL;
2062
2997
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())
2998
transform(func_name.begin(), func_name.end(), func_name.begin(), ::tolower);
3000
map<string, Native_func_registry *>::iterator func_iter=
3001
native_functions_map.find(func_name);
3003
if (func_iter != native_functions_map.end())
2069
builder= (*func_iter).second;
3005
func= (*func_iter).second;
3006
builder= func->builder;
2072
3009
return builder;
2086
3023
const char *c_len, const char *c_dec,
2087
3024
const CHARSET_INFO * const cs)
2093
3030
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
3031
case ITEM_CAST_BINARY:
2103
3032
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);
3034
case ITEM_CAST_SIGNED_INT:
3035
res= new (session->mem_root) Item_func_signed(a);
3037
case ITEM_CAST_UNSIGNED_INT:
3038
res= new (session->mem_root) Item_func_unsigned(a);
2114
3040
case ITEM_CAST_DATE:
2115
3041
res= new (session->mem_root) Item_date_typecast(a);
2118
3043
case ITEM_CAST_DATETIME:
2119
3044
res= new (session->mem_root) Item_datetime_typecast(a);
2122
3046
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);
3048
len= c_len ? atoi(c_len) : 0;
3049
dec= c_dec ? atoi(c_dec) : 0;
3050
my_decimal_trim(&len, &dec);
3053
my_error(ER_M_BIGGER_THAN_D, MYF(0), "");
3056
if (len > DECIMAL_MAX_PRECISION)
3058
my_error(ER_TOO_BIG_PRECISION, MYF(0), len, a->name,
3059
DECIMAL_MAX_PRECISION);
3062
if (dec > DECIMAL_MAX_SCALE)
3064
my_error(ER_TOO_BIG_SCALE, MYF(0), dec, a->name,
3068
res= new (session->mem_root) Item_decimal_typecast(a, len, dec);
2147
3071
case ITEM_CAST_CHAR:
2149
len= c_len ? atoi(c_len) : -1;
2150
res= create_func_char_cast(session, a, len, cs);
3073
len= c_len ? atoi(c_len) : -1;
3074
res= create_func_char_cast(session, a, len, cs);
2158
} /* namespace drizzled */