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>
31
31
#include <drizzled/function/str/elt.h>
32
32
#include <drizzled/function/str/export_set.h>
33
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 */
71
74
#include <drizzled/function/math/cos.h>
72
75
#include <drizzled/function/math/dec.h>
73
76
#include <drizzled/function/math/decimal_typecast.h>
74
#include <drizzled/function/math/exp.h>
77
#include <drizzled/function/math//exp.h>
75
78
#include <drizzled/function/field.h>
76
79
#include <drizzled/function/find_in_set.h>
77
80
#include <drizzled/function/math/floor.h>
94
97
#include <drizzled/function/row_count.h>
95
98
#include <drizzled/function/set_user_var.h>
96
99
#include <drizzled/function/sign.h>
100
#include <drizzled/function/signed.h>
97
101
#include <drizzled/function/math/sin.h>
98
102
#include <drizzled/function/math/sqrt.h>
99
103
#include <drizzled/function/str/quote.h>
100
104
#include <drizzled/function/math/tan.h>
101
105
#include <drizzled/function/units.h>
106
#include <drizzled/function/unsigned.h>
105
110
using namespace std;
710
class Create_func_hex : public Create_func_arg1
713
using Create_func_arg1::create;
715
virtual Item *create(Session *session, Item *arg1);
717
static Create_func_hex s_singleton;
721
virtual ~Create_func_hex() {}
708
725
class Create_func_ifnull : public Create_func_arg2
1279
class Create_func_substr_index : public Create_func_arg3
1282
using Create_func_arg3::create;
1284
virtual Item *create(Session *session, Item *arg1, Item *arg2, Item *arg3);
1286
static Create_func_substr_index s_singleton;
1289
Create_func_substr_index() {}
1290
virtual ~Create_func_substr_index() {}
1262
1294
class Create_func_tan : public Create_func_arg1
1369
class Create_func_unhex : public Create_func_arg1
1372
using Create_func_arg1::create;
1374
virtual Item *create(Session *session, Item *arg1);
1376
static Create_func_unhex s_singleton;
1379
Create_func_unhex() {}
1380
virtual ~Create_func_unhex() {}
1337
1384
class Create_func_unix_timestamp : public Create_native_func
1397
class Create_func_uuid : public Create_func_arg0
1400
using Create_func_arg0::create;
1402
virtual Item *create(Session *session);
1404
static Create_func_uuid s_singleton;
1407
Create_func_uuid() {}
1408
virtual ~Create_func_uuid() {}
1350
1412
class Create_func_weekday : public Create_func_arg1
1397
1459
Create_udf_func::create(Session *session, LEX_STRING name, List<Item> *item_list)
1399
const plugin::Function *udf= plugin::Function::get(name.str, name.length);
1461
Function_builder *udf= find_udf(name.str, name.length);
1401
1463
return create(session, udf, item_list);
1406
Create_udf_func::create(Session *session, const plugin::Function *udf,
1468
Create_udf_func::create(Session *session, Function_builder *udf,
1407
1469
List<Item> *item_list)
1409
1471
Item_func *func= NULL;
1417
1479
if(!func->check_argument_count(arg_count))
1419
my_error(ER_WRONG_PARAMCOUNT_TO_FUNCTION, MYF(0), func->func_name());
1481
my_error(ER_WRONG_PARAMETERS_TO_NATIVE_FCT, MYF(0), func->func_name());
1668
1730
/* "WS" stands for "With Separator": this function takes 2+ arguments */
1669
1731
if (arg_count < 2)
1671
my_error(ER_WRONG_PARAMCOUNT_TO_FUNCTION, MYF(0), name.str);
1733
my_error(ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT, MYF(0), name.str);
1972
2034
if (arg_count < 2)
1974
my_error(ER_WRONG_PARAMCOUNT_TO_FUNCTION, MYF(0), name.str);
2036
my_error(ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT, MYF(0), name.str);
1978
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);
1981
2053
Create_func_ifnull Create_func_ifnull::s_singleton;
2574
Create_func_substr_index Create_func_substr_index::s_singleton;
2577
Create_func_substr_index::create(Session *session, Item *arg1, Item *arg2, Item *arg3)
2579
return new (session->mem_root) Item_func_substr_index(arg1, arg2, arg3);
2502
2582
Create_func_tan Create_func_tan::s_singleton;
2533
2613
return new (session->mem_root) Item_func_ucase(arg1);
2617
Create_func_unhex Create_func_unhex::s_singleton;
2620
Create_func_unhex::create(Session *session, Item *arg1)
2622
return new (session->mem_root) Item_func_unhex(arg1);
2536
2626
Create_func_unix_timestamp Create_func_unix_timestamp::s_singleton;
2625
2724
{ { C_STRING_WITH_LEN("FROM_DAYS") }, BUILDER(Create_func_from_days)},
2626
2725
{ { C_STRING_WITH_LEN("FROM_UNIXTIME") }, BUILDER(Create_func_from_unixtime)},
2627
2726
{ { C_STRING_WITH_LEN("GREATEST") }, BUILDER(Create_func_greatest)},
2727
{ { C_STRING_WITH_LEN("HEX") }, BUILDER(Create_func_hex)},
2628
2728
{ { C_STRING_WITH_LEN("IFNULL") }, BUILDER(Create_func_ifnull)},
2629
2729
{ { C_STRING_WITH_LEN("INSTR") }, BUILDER(Create_func_instr)},
2630
2730
{ { C_STRING_WITH_LEN("ISNULL") }, BUILDER(Create_func_isnull)},
2664
2764
{ { C_STRING_WITH_LEN("SPACE") }, BUILDER(Create_func_space)},
2665
2765
{ { C_STRING_WITH_LEN("SQRT") }, BUILDER(Create_func_sqrt)},
2666
2766
{ { C_STRING_WITH_LEN("STRCMP") }, BUILDER(Create_func_strcmp)},
2767
{ { C_STRING_WITH_LEN("SUBSTRING_INDEX") }, BUILDER(Create_func_substr_index)},
2667
2768
{ { C_STRING_WITH_LEN("TAN") }, BUILDER(Create_func_tan)},
2668
2769
{ { C_STRING_WITH_LEN("TIME_FORMAT") }, BUILDER(Create_func_time_format)},
2669
2770
{ { C_STRING_WITH_LEN("TO_DAYS") }, BUILDER(Create_func_to_days)},
2670
2771
{ { C_STRING_WITH_LEN("UCASE") }, BUILDER(Create_func_ucase)},
2772
{ { C_STRING_WITH_LEN("UNHEX") }, BUILDER(Create_func_unhex)},
2671
2773
{ { C_STRING_WITH_LEN("UNIX_TIMESTAMP") }, BUILDER(Create_func_unix_timestamp)},
2672
2774
{ { C_STRING_WITH_LEN("UPPER") }, BUILDER(Create_func_ucase)},
2775
{ { C_STRING_WITH_LEN("UUID") }, BUILDER(Create_func_uuid)},
2673
2776
{ { C_STRING_WITH_LEN("WEEKDAY") }, BUILDER(Create_func_weekday)},
2675
2778
{ {0, 0}, NULL}
2743
2846
case ITEM_CAST_BINARY:
2744
2847
res= new (session->mem_root) Item_func_binary(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);
2746
2855
case ITEM_CAST_DATE:
2747
2856
res= new (session->mem_root) Item_date_typecast(a);