23
23
#include <drizzled/server_includes.h>
24
#include <drizzled/item/create.h>
25
#include <drizzled/item/func.h>
26
#include <drizzled/error.h>
27
#include <drizzled/data_home.h>
29
#include <drizzled/function/str/binary.h>
30
#include <drizzled/function/str/concat.h>
31
#include <drizzled/function/str/conv.h>
32
#include <drizzled/function/str/elt.h>
33
#include <drizzled/function/str/export_set.h>
34
#include <drizzled/function/str/format.h>
35
#include <drizzled/function/str/hex.h>
36
#include <drizzled/function/str/load_file.h>
37
#include <drizzled/function/str/make_set.h>
38
#include <drizzled/function/str/pad.h>
39
#include <drizzled/function/str/repeat.h>
40
#include <drizzled/function/str/str_conv.h>
41
#include <drizzled/function/str/substr.h>
42
#include <drizzled/function/str/trim.h>
43
#include <drizzled/function/str/uuid.h>
45
#include <drizzled/function/time/date_format.h>
46
#include <drizzled/function/time/dayname.h>
47
#include <drizzled/function/time/dayofmonth.h>
48
#include <drizzled/function/time/dayofyear.h>
49
#include <drizzled/function/time/from_unixtime.h>
50
#include <drizzled/function/time/from_days.h>
51
#include <drizzled/function/time/last_day.h>
52
#include <drizzled/function/time/makedate.h>
53
#include <drizzled/function/time/month.h>
54
#include <drizzled/function/time/period_add.h>
55
#include <drizzled/function/time/period_diff.h>
56
#include <drizzled/function/time/to_days.h>
57
#include <drizzled/function/time/typecast.h>
58
#include <drizzled/function/time/unix_timestamp.h>
59
#include <drizzled/function/time/weekday.h>
61
#include <drizzled/item/cmpfunc.h>
62
#include <drizzled/sql_udf.h>
63
#include <drizzled/session.h>
65
/* Function declarations */
67
#include <drizzled/function/func.h>
68
#include <drizzled/function/math/abs.h>
69
#include <drizzled/function/math/acos.h>
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>
82
#include <drizzled/function/math/dec.h>
83
#include <drizzled/function/math/decimal_typecast.h>
84
#include <drizzled/function/math//exp.h>
85
#include <drizzled/function/field.h>
86
#include <drizzled/function/find_in_set.h>
87
#include <drizzled/function/math/floor.h>
88
#include <drizzled/function/found_rows.h>
89
#include <drizzled/function/get_system_var.h>
90
#include <drizzled/function/get_variable.h>
91
#include <drizzled/function/math/int_val.h>
92
#include <drizzled/function/math/integer.h>
93
#include <drizzled/function/last_insert.h>
94
#include <drizzled/function/length.h>
95
#include <drizzled/function/math/ln.h>
96
#include <drizzled/function/locate.h>
97
#include <drizzled/function/math/log.h>
98
#include <drizzled/function/min_max.h>
99
#include <drizzled/function/num1.h>
100
#include <drizzled/function/num_op.h>
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>
105
#include <drizzled/function/math/real.h>
106
#include <drizzled/function/row_count.h>
107
#include <drizzled/function/set_user_var.h>
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>
113
#include <drizzled/function/math/tan.h>
114
#include <drizzled/function/units.h>
115
#include <drizzled/function/unsigned.h>
116
#include <drizzled/function/update_hash.h>
26
126
=============================================================================
1450
1572
Create_udf_func Create_udf_func::s_singleton;
1453
Create_udf_func::create(THD *thd, LEX_STRING name, List<Item> *item_list)
1575
Create_udf_func::create(Session *session, LEX_STRING name, List<Item> *item_list)
1455
udf_func *udf= find_udf(name.str, name.length);
1577
Function_builder *udf= find_udf(name.str, name.length);
1457
return create(thd, udf, item_list);
1579
return create(session, udf, item_list);
1462
Create_udf_func::create(THD *thd, udf_func *udf, List<Item> *item_list)
1584
Create_udf_func::create(Session *session, Function_builder *udf,
1585
List<Item> *item_list)
1587
Item_func *func= NULL;
1465
1588
int arg_count= 0;
1467
1590
if (item_list != NULL)
1468
1591
arg_count= item_list->elements;
1470
thd->lex->set_stmt_unsafe();
1472
assert( (udf->type == UDFTYPE_FUNCTION)
1473
|| (udf->type == UDFTYPE_AGGREGATE));
1475
switch(udf->returns) {
1478
if (udf->type == UDFTYPE_FUNCTION)
1481
func= new (thd->mem_root) Item_func_udf_str(udf, *item_list);
1483
func= new (thd->mem_root) Item_func_udf_str(udf);
1488
func= new (thd->mem_root) Item_sum_udf_str(udf, *item_list);
1490
func= new (thd->mem_root) Item_sum_udf_str(udf);
1496
if (udf->type == UDFTYPE_FUNCTION)
1499
func= new (thd->mem_root) Item_func_udf_float(udf, *item_list);
1501
func= new (thd->mem_root) Item_func_udf_float(udf);
1506
func= new (thd->mem_root) Item_sum_udf_float(udf, *item_list);
1508
func= new (thd->mem_root) Item_sum_udf_float(udf);
1514
if (udf->type == UDFTYPE_FUNCTION)
1517
func= new (thd->mem_root) Item_func_udf_int(udf, *item_list);
1519
func= new (thd->mem_root) Item_func_udf_int(udf);
1524
func= new (thd->mem_root) Item_sum_udf_int(udf, *item_list);
1526
func= new (thd->mem_root) Item_sum_udf_int(udf);
1530
case DECIMAL_RESULT:
1532
if (udf->type == UDFTYPE_FUNCTION)
1535
func= new (thd->mem_root) Item_func_udf_decimal(udf, *item_list);
1537
func= new (thd->mem_root) Item_func_udf_decimal(udf);
1542
func= new (thd->mem_root) Item_sum_udf_decimal(udf, *item_list);
1544
func= new (thd->mem_root) Item_sum_udf_decimal(udf);
1550
my_error(ER_NOT_SUPPORTED_YET, MYF(0), "UDF return type");
1593
func= (*udf)(session->mem_root);
1595
func->set_arguments(*item_list);
1558
Create_native_func::create(THD *thd, LEX_STRING name, List<Item> *item_list)
1602
Create_native_func::create(Session *session, LEX_STRING name, List<Item> *item_list)
1560
1604
if (has_named_parameters(item_list))
1668
return create(thd, param_1, param_2, param_3);
1712
return create(session, param_1, param_2, param_3);
1672
1716
Create_func_abs Create_func_abs::s_singleton;
1675
Create_func_abs::create(THD *thd, Item *arg1)
1719
Create_func_abs::create(Session *session, Item *arg1)
1677
return new (thd->mem_root) Item_func_abs(arg1);
1721
return new (session->mem_root) Item_func_abs(arg1);
1681
1725
Create_func_acos Create_func_acos::s_singleton;
1684
Create_func_acos::create(THD *thd, Item *arg1)
1686
return new (thd->mem_root) Item_func_acos(arg1);
1690
Create_func_addtime Create_func_addtime::s_singleton;
1693
Create_func_addtime::create(THD *thd, Item *arg1, Item *arg2)
1695
return new (thd->mem_root) Item_func_add_time(arg1, arg2, 0, 0);
1728
Create_func_acos::create(Session *session, Item *arg1)
1730
return new (session->mem_root) Item_func_acos(arg1);
1699
1733
Create_func_asin Create_func_asin::s_singleton;
1702
Create_func_asin::create(THD *thd, Item *arg1)
1736
Create_func_asin::create(Session *session, Item *arg1)
1704
return new (thd->mem_root) Item_func_asin(arg1);
1738
return new (session->mem_root) Item_func_asin(arg1);
1708
1742
Create_func_atan Create_func_atan::s_singleton;
1711
Create_func_atan::create_native(THD *thd, LEX_STRING name,
1745
Create_func_atan::create_native(Session *session, LEX_STRING name,
1712
1746
List<Item> *item_list)
1714
1748
Item* func= NULL;
1745
1779
Create_func_benchmark Create_func_benchmark::s_singleton;
1748
Create_func_benchmark::create(THD *thd, Item *arg1, Item *arg2)
1782
Create_func_benchmark::create(Session *session, Item *arg1, Item *arg2)
1750
return new (thd->mem_root) Item_func_benchmark(arg1, arg2);
1784
return new (session->mem_root) Item_func_benchmark(arg1, arg2);
1754
1788
Create_func_bin Create_func_bin::s_singleton;
1757
Create_func_bin::create(THD *thd, Item *arg1)
1791
Create_func_bin::create(Session *session, Item *arg1)
1759
Item *i10= new (thd->mem_root) Item_int((int32_t) 10,2);
1760
Item *i2= new (thd->mem_root) Item_int((int32_t) 2,1);
1761
return new (thd->mem_root) Item_func_conv(arg1, i10, i2);
1793
Item *i10= new (session->mem_root) Item_int((int32_t) 10,2);
1794
Item *i2= new (session->mem_root) Item_int((int32_t) 2,1);
1795
return new (session->mem_root) Item_func_conv(arg1, i10, i2);
1765
1799
Create_func_bit_count Create_func_bit_count::s_singleton;
1768
Create_func_bit_count::create(THD *thd, Item *arg1)
1802
Create_func_bit_count::create(Session *session, Item *arg1)
1770
return new (thd->mem_root) Item_func_bit_count(arg1);
1804
return new (session->mem_root) Item_func_bit_count(arg1);
1774
1808
Create_func_bit_length Create_func_bit_length::s_singleton;
1777
Create_func_bit_length::create(THD *thd, Item *arg1)
1811
Create_func_bit_length::create(Session *session, Item *arg1)
1779
return new (thd->mem_root) Item_func_bit_length(arg1);
1813
return new (session->mem_root) Item_func_bit_length(arg1);
1783
1817
Create_func_ceiling Create_func_ceiling::s_singleton;
1786
Create_func_ceiling::create(THD *thd, Item *arg1)
1820
Create_func_ceiling::create(Session *session, Item *arg1)
1788
return new (thd->mem_root) Item_func_ceiling(arg1);
1822
return new (session->mem_root) Item_func_ceiling(arg1);
1792
1826
Create_func_char_length Create_func_char_length::s_singleton;
1795
Create_func_char_length::create(THD *thd, Item *arg1)
1829
Create_func_char_length::create(Session *session, Item *arg1)
1797
return new (thd->mem_root) Item_func_char_length(arg1);
1831
return new (session->mem_root) Item_func_char_length(arg1);
1801
1835
Create_func_coercibility Create_func_coercibility::s_singleton;
1804
Create_func_coercibility::create(THD *thd, Item *arg1)
1838
Create_func_coercibility::create(Session *session, Item *arg1)
1806
return new (thd->mem_root) Item_func_coercibility(arg1);
1840
return new (session->mem_root) Item_func_coercibility(arg1);
1810
1844
Create_func_concat Create_func_concat::s_singleton;
1813
Create_func_concat::create_native(THD *thd, LEX_STRING name,
1847
Create_func_concat::create_native(Session *session, LEX_STRING name,
1814
1848
List<Item> *item_list)
1816
1850
int arg_count= 0;
1849
return new (thd->mem_root) Item_func_concat_ws(*item_list);
1883
return new (session->mem_root) Item_func_concat_ws(*item_list);
1853
1887
Create_func_connection_id Create_func_connection_id::s_singleton;
1856
Create_func_connection_id::create(THD *thd)
1890
Create_func_connection_id::create(Session *session)
1858
return new (thd->mem_root) Item_func_connection_id();
1892
return new (session->mem_root) Item_func_connection_id();
1862
1896
Create_func_conv Create_func_conv::s_singleton;
1865
Create_func_conv::create(THD *thd, Item *arg1, Item *arg2, Item *arg3)
1899
Create_func_conv::create(Session *session, Item *arg1, Item *arg2, Item *arg3)
1867
return new (thd->mem_root) Item_func_conv(arg1, arg2, arg3);
1901
return new (session->mem_root) Item_func_conv(arg1, arg2, arg3);
1871
1905
Create_func_cos Create_func_cos::s_singleton;
1874
Create_func_cos::create(THD *thd, Item *arg1)
1908
Create_func_cos::create(Session *session, Item *arg1)
1876
return new (thd->mem_root) Item_func_cos(arg1);
1910
return new (session->mem_root) Item_func_cos(arg1);
1880
1914
Create_func_cot Create_func_cot::s_singleton;
1883
Create_func_cot::create(THD *thd, Item *arg1)
1917
Create_func_cot::create(Session *session, Item *arg1)
1885
Item *i1= new (thd->mem_root) Item_int((char*) "1", 1, 1);
1886
Item *i2= new (thd->mem_root) Item_func_tan(arg1);
1887
return new (thd->mem_root) Item_func_div(i1, i2);
1919
Item *i1= new (session->mem_root) Item_int((char*) "1", 1, 1);
1920
Item *i2= new (session->mem_root) Item_func_tan(arg1);
1921
return new (session->mem_root) Item_func_div(i1, i2);
1890
1924
Create_func_date_format Create_func_date_format::s_singleton;
1893
Create_func_date_format::create(THD *thd, Item *arg1, Item *arg2)
1927
Create_func_date_format::create(Session *session, Item *arg1, Item *arg2)
1895
return new (thd->mem_root) Item_func_date_format(arg1, arg2, 0);
1929
return new (session->mem_root) Item_func_date_format(arg1, arg2, 0);
1899
1933
Create_func_datediff Create_func_datediff::s_singleton;
1902
Create_func_datediff::create(THD *thd, Item *arg1, Item *arg2)
1936
Create_func_datediff::create(Session *session, Item *arg1, Item *arg2)
1904
Item *i1= new (thd->mem_root) Item_func_to_days(arg1);
1905
Item *i2= new (thd->mem_root) Item_func_to_days(arg2);
1938
Item *i1= new (session->mem_root) Item_func_to_days(arg1);
1939
Item *i2= new (session->mem_root) Item_func_to_days(arg2);
1907
return new (thd->mem_root) Item_func_minus(i1, i2);
1941
return new (session->mem_root) Item_func_minus(i1, i2);
1911
1945
Create_func_dayname Create_func_dayname::s_singleton;
1914
Create_func_dayname::create(THD *thd, Item *arg1)
1948
Create_func_dayname::create(Session *session, Item *arg1)
1916
return new (thd->mem_root) Item_func_dayname(arg1);
1950
return new (session->mem_root) Item_func_dayname(arg1);
1920
1954
Create_func_dayofmonth Create_func_dayofmonth::s_singleton;
1923
Create_func_dayofmonth::create(THD *thd, Item *arg1)
1957
Create_func_dayofmonth::create(Session *session, Item *arg1)
1925
return new (thd->mem_root) Item_func_dayofmonth(arg1);
1959
return new (session->mem_root) Item_func_dayofmonth(arg1);
1929
1963
Create_func_dayofweek Create_func_dayofweek::s_singleton;
1932
Create_func_dayofweek::create(THD *thd, Item *arg1)
1966
Create_func_dayofweek::create(Session *session, Item *arg1)
1934
return new (thd->mem_root) Item_func_weekday(arg1, 1);
1968
return new (session->mem_root) Item_func_weekday(arg1, 1);
1938
1972
Create_func_dayofyear Create_func_dayofyear::s_singleton;
1941
Create_func_dayofyear::create(THD *thd, Item *arg1)
1975
Create_func_dayofyear::create(Session *session, Item *arg1)
1943
return new (thd->mem_root) Item_func_dayofyear(arg1);
1977
return new (session->mem_root) Item_func_dayofyear(arg1);
1947
1981
Create_func_degrees Create_func_degrees::s_singleton;
1950
Create_func_degrees::create(THD *thd, Item *arg1)
1984
Create_func_degrees::create(Session *session, Item *arg1)
1952
return new (thd->mem_root) Item_func_units((char*) "degrees", arg1,
1986
return new (session->mem_root) Item_func_units((char*) "degrees", arg1,
1953
1987
180/M_PI, 0.0);
2057
return new (thd->mem_root) Item_func_field(*item_list);
2091
return new (session->mem_root) Item_func_field(*item_list);
2061
2095
Create_func_find_in_set Create_func_find_in_set::s_singleton;
2064
Create_func_find_in_set::create(THD *thd, Item *arg1, Item *arg2)
2098
Create_func_find_in_set::create(Session *session, Item *arg1, Item *arg2)
2066
return new (thd->mem_root) Item_func_find_in_set(arg1, arg2);
2100
return new (session->mem_root) Item_func_find_in_set(arg1, arg2);
2070
2104
Create_func_floor Create_func_floor::s_singleton;
2073
Create_func_floor::create(THD *thd, Item *arg1)
2107
Create_func_floor::create(Session *session, Item *arg1)
2075
return new (thd->mem_root) Item_func_floor(arg1);
2109
return new (session->mem_root) Item_func_floor(arg1);
2079
2113
Create_func_format Create_func_format::s_singleton;
2082
Create_func_format::create(THD *thd, Item *arg1, Item *arg2)
2116
Create_func_format::create(Session *session, Item *arg1, Item *arg2)
2084
return new (thd->mem_root) Item_func_format(arg1, arg2);
2118
return new (session->mem_root) Item_func_format(arg1, arg2);
2088
2122
Create_func_found_rows Create_func_found_rows::s_singleton;
2091
Create_func_found_rows::create(THD *thd)
2125
Create_func_found_rows::create(Session *session)
2093
thd->lex->set_stmt_unsafe();
2094
return new (thd->mem_root) Item_func_found_rows();
2127
return new (session->mem_root) Item_func_found_rows();
2098
2131
Create_func_from_days Create_func_from_days::s_singleton;
2101
Create_func_from_days::create(THD *thd, Item *arg1)
2134
Create_func_from_days::create(Session *session, Item *arg1)
2103
return new (thd->mem_root) Item_func_from_days(arg1);
2136
return new (session->mem_root) Item_func_from_days(arg1);
2107
2140
Create_func_from_unixtime Create_func_from_unixtime::s_singleton;
2110
Create_func_from_unixtime::create_native(THD *thd, LEX_STRING name,
2143
Create_func_from_unixtime::create_native(Session *session, LEX_STRING name,
2111
2144
List<Item> *item_list)
2113
2146
Item *func= NULL;
2162
return new (thd->mem_root) Item_func_max(*item_list);
2195
return new (session->mem_root) Item_func_max(*item_list);
2166
2199
Create_func_hex Create_func_hex::s_singleton;
2169
Create_func_hex::create(THD *thd, Item *arg1)
2202
Create_func_hex::create(Session *session, Item *arg1)
2171
return new (thd->mem_root) Item_func_hex(arg1);
2204
return new (session->mem_root) Item_func_hex(arg1);
2175
2208
Create_func_ifnull Create_func_ifnull::s_singleton;
2178
Create_func_ifnull::create(THD *thd, Item *arg1, Item *arg2)
2211
Create_func_ifnull::create(Session *session, Item *arg1, Item *arg2)
2180
return new (thd->mem_root) Item_func_ifnull(arg1, arg2);
2213
return new (session->mem_root) Item_func_ifnull(arg1, arg2);
2184
2217
Create_func_instr Create_func_instr::s_singleton;
2187
Create_func_instr::create(THD *thd, Item *arg1, Item *arg2)
2220
Create_func_instr::create(Session *session, Item *arg1, Item *arg2)
2189
return new (thd->mem_root) Item_func_locate(arg1, arg2);
2222
return new (session->mem_root) Item_func_locate(arg1, arg2);
2193
2226
Create_func_isnull Create_func_isnull::s_singleton;
2196
Create_func_isnull::create(THD *thd, Item *arg1)
2229
Create_func_isnull::create(Session *session, Item *arg1)
2198
return new (thd->mem_root) Item_func_isnull(arg1);
2231
return new (session->mem_root) Item_func_isnull(arg1);
2202
2235
Create_func_last_day Create_func_last_day::s_singleton;
2205
Create_func_last_day::create(THD *thd, Item *arg1)
2238
Create_func_last_day::create(Session *session, Item *arg1)
2207
return new (thd->mem_root) Item_func_last_day(arg1);
2240
return new (session->mem_root) Item_func_last_day(arg1);
2211
2244
Create_func_last_insert_id Create_func_last_insert_id::s_singleton;
2214
Create_func_last_insert_id::create_native(THD *thd, LEX_STRING name,
2247
Create_func_last_insert_id::create_native(Session *session, LEX_STRING name,
2215
2248
List<Item> *item_list)
2217
2250
Item *func= NULL;
2381
2414
Create_func_log10 Create_func_log10::s_singleton;
2384
Create_func_log10::create(THD *thd, Item *arg1)
2417
Create_func_log10::create(Session *session, Item *arg1)
2386
return new (thd->mem_root) Item_func_log10(arg1);
2419
return new (session->mem_root) Item_func_log10(arg1);
2390
2423
Create_func_log2 Create_func_log2::s_singleton;
2393
Create_func_log2::create(THD *thd, Item *arg1)
2426
Create_func_log2::create(Session *session, Item *arg1)
2395
return new (thd->mem_root) Item_func_log2(arg1);
2428
return new (session->mem_root) Item_func_log2(arg1);
2399
2432
Create_func_lpad Create_func_lpad::s_singleton;
2402
Create_func_lpad::create(THD *thd, Item *arg1, Item *arg2, Item *arg3)
2435
Create_func_lpad::create(Session *session, Item *arg1, Item *arg2, Item *arg3)
2404
return new (thd->mem_root) Item_func_lpad(arg1, arg2, arg3);
2437
return new (session->mem_root) Item_func_lpad(arg1, arg2, arg3);
2408
2441
Create_func_ltrim Create_func_ltrim::s_singleton;
2411
Create_func_ltrim::create(THD *thd, Item *arg1)
2444
Create_func_ltrim::create(Session *session, Item *arg1)
2413
return new (thd->mem_root) Item_func_ltrim(arg1);
2446
return new (session->mem_root) Item_func_ltrim(arg1);
2417
2450
Create_func_makedate Create_func_makedate::s_singleton;
2420
Create_func_makedate::create(THD *thd, Item *arg1, Item *arg2)
2422
return new (thd->mem_root) Item_func_makedate(arg1, arg2);
2426
Create_func_maketime Create_func_maketime::s_singleton;
2429
Create_func_maketime::create(THD *thd, Item *arg1, Item *arg2, Item *arg3)
2431
return new (thd->mem_root) Item_func_maketime(arg1, arg2, arg3);
2453
Create_func_makedate::create(Session *session, Item *arg1, Item *arg2)
2455
return new (session->mem_root) Item_func_makedate(arg1, arg2);
2435
2459
Create_func_make_set Create_func_make_set::s_singleton;
2438
Create_func_make_set::create_native(THD *thd, LEX_STRING name,
2462
Create_func_make_set::create_native(Session *session, LEX_STRING name,
2439
2463
List<Item> *item_list)
2441
2465
int arg_count= 0;
2452
2476
Item *param_1= item_list->pop();
2453
return new (thd->mem_root) Item_func_make_set(param_1, *item_list);
2457
Create_func_master_pos_wait Create_func_master_pos_wait::s_singleton;
2460
Create_func_master_pos_wait::create_native(THD *thd, LEX_STRING name,
2461
List<Item> *item_list)
2467
if (item_list != NULL)
2468
arg_count= item_list->elements;
2470
switch (arg_count) {
2473
Item *param_1= item_list->pop();
2474
Item *param_2= item_list->pop();
2475
func= new (thd->mem_root) Item_master_pos_wait(param_1, param_2);
2480
Item *param_1= item_list->pop();
2481
Item *param_2= item_list->pop();
2482
Item *param_3= item_list->pop();
2483
func= new (thd->mem_root) Item_master_pos_wait(param_1, param_2, param_3);
2488
my_error(ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT, MYF(0), name.str);
2477
return new (session->mem_root) Item_func_make_set(param_1, *item_list);
2497
2481
Create_func_monthname Create_func_monthname::s_singleton;
2500
Create_func_monthname::create(THD *thd, Item *arg1)
2484
Create_func_monthname::create(Session *session, Item *arg1)
2502
return new (thd->mem_root) Item_func_monthname(arg1);
2486
return new (session->mem_root) Item_func_monthname(arg1);
2506
2490
Create_func_nullif Create_func_nullif::s_singleton;
2509
Create_func_nullif::create(THD *thd, Item *arg1, Item *arg2)
2493
Create_func_nullif::create(Session *session, Item *arg1, Item *arg2)
2511
return new (thd->mem_root) Item_func_nullif(arg1, arg2);
2495
return new (session->mem_root) Item_func_nullif(arg1, arg2);
2515
2499
Create_func_oct Create_func_oct::s_singleton;
2518
Create_func_oct::create(THD *thd, Item *arg1)
2502
Create_func_oct::create(Session *session, Item *arg1)
2520
Item *i10= new (thd->mem_root) Item_int((int32_t) 10,2);
2521
Item *i8= new (thd->mem_root) Item_int((int32_t) 8,1);
2522
return new (thd->mem_root) Item_func_conv(arg1, i10, i8);
2504
Item *i10= new (session->mem_root) Item_int((int32_t) 10,2);
2505
Item *i8= new (session->mem_root) Item_int((int32_t) 8,1);
2506
return new (session->mem_root) Item_func_conv(arg1, i10, i8);
2526
2510
Create_func_ord Create_func_ord::s_singleton;
2529
Create_func_ord::create(THD *thd, Item *arg1)
2513
Create_func_ord::create(Session *session, Item *arg1)
2531
return new (thd->mem_root) Item_func_ord(arg1);
2515
return new (session->mem_root) Item_func_ord(arg1);
2535
2519
Create_func_period_add Create_func_period_add::s_singleton;
2538
Create_func_period_add::create(THD *thd, Item *arg1, Item *arg2)
2522
Create_func_period_add::create(Session *session, Item *arg1, Item *arg2)
2540
return new (thd->mem_root) Item_func_period_add(arg1, arg2);
2524
return new (session->mem_root) Item_func_period_add(arg1, arg2);
2544
2528
Create_func_period_diff Create_func_period_diff::s_singleton;
2547
Create_func_period_diff::create(THD *thd, Item *arg1, Item *arg2)
2531
Create_func_period_diff::create(Session *session, Item *arg1, Item *arg2)
2549
return new (thd->mem_root) Item_func_period_diff(arg1, arg2);
2533
return new (session->mem_root) Item_func_period_diff(arg1, arg2);
2553
2537
Create_func_pi Create_func_pi::s_singleton;
2556
Create_func_pi::create(THD *thd)
2540
Create_func_pi::create(Session *session)
2558
return new (thd->mem_root) Item_static_float_func("pi()", M_PI, 6, 8);
2542
return new (session->mem_root) Item_static_float_func("pi()", M_PI, 6, 8);
2562
2546
Create_func_pow Create_func_pow::s_singleton;
2565
Create_func_pow::create(THD *thd, Item *arg1, Item *arg2)
2549
Create_func_pow::create(Session *session, Item *arg1, Item *arg2)
2567
return new (thd->mem_root) Item_func_pow(arg1, arg2);
2551
return new (session->mem_root) Item_func_pow(arg1, arg2);
2571
2555
Create_func_quote Create_func_quote::s_singleton;
2574
Create_func_quote::create(THD *thd, Item *arg1)
2558
Create_func_quote::create(Session *session, Item *arg1)
2576
return new (thd->mem_root) Item_func_quote(arg1);
2560
return new (session->mem_root) Item_func_quote(arg1);
2580
2564
Create_func_radians Create_func_radians::s_singleton;
2583
Create_func_radians::create(THD *thd, Item *arg1)
2567
Create_func_radians::create(Session *session, Item *arg1)
2585
return new (thd->mem_root) Item_func_units((char*) "radians", arg1,
2569
return new (session->mem_root) Item_func_units((char*) "radians", arg1,
2586
2570
M_PI/180, 0.0);
2663
2647
Create_func_row_count Create_func_row_count::s_singleton;
2666
Create_func_row_count::create(THD *thd)
2650
Create_func_row_count::create(Session *session)
2668
thd->lex->set_stmt_unsafe();
2669
return new (thd->mem_root) Item_func_row_count();
2652
return new (session->mem_root) Item_func_row_count();
2673
2656
Create_func_rpad Create_func_rpad::s_singleton;
2676
Create_func_rpad::create(THD *thd, Item *arg1, Item *arg2, Item *arg3)
2659
Create_func_rpad::create(Session *session, Item *arg1, Item *arg2, Item *arg3)
2678
return new (thd->mem_root) Item_func_rpad(arg1, arg2, arg3);
2661
return new (session->mem_root) Item_func_rpad(arg1, arg2, arg3);
2682
2665
Create_func_rtrim Create_func_rtrim::s_singleton;
2685
Create_func_rtrim::create(THD *thd, Item *arg1)
2687
return new (thd->mem_root) Item_func_rtrim(arg1);
2691
Create_func_sec_to_time Create_func_sec_to_time::s_singleton;
2694
Create_func_sec_to_time::create(THD *thd, Item *arg1)
2696
return new (thd->mem_root) Item_func_sec_to_time(arg1);
2668
Create_func_rtrim::create(Session *session, Item *arg1)
2670
return new (session->mem_root) Item_func_rtrim(arg1);
2700
2674
Create_func_sign Create_func_sign::s_singleton;
2703
Create_func_sign::create(THD *thd, Item *arg1)
2677
Create_func_sign::create(Session *session, Item *arg1)
2705
return new (thd->mem_root) Item_func_sign(arg1);
2679
return new (session->mem_root) Item_func_sign(arg1);
2709
2683
Create_func_sin Create_func_sin::s_singleton;
2712
Create_func_sin::create(THD *thd, Item *arg1)
2686
Create_func_sin::create(Session *session, Item *arg1)
2714
return new (thd->mem_root) Item_func_sin(arg1);
2688
return new (session->mem_root) Item_func_sin(arg1);
2718
2692
Create_func_space Create_func_space::s_singleton;
2721
Create_func_space::create(THD *thd, Item *arg1)
2695
Create_func_space::create(Session *session, Item *arg1)
2724
2698
TODO: Fix Bug#23637
2725
2699
The parsed item tree should not depend on
2726
<code>thd->variables.collation_connection</code>.
2700
<code>session->variables.collation_connection</code>.
2728
const CHARSET_INFO * const cs= thd->variables.collation_connection;
2702
const CHARSET_INFO * const cs= session->variables.getCollation();
2731
2705
if (cs->mbminlen > 1)
2734
sp= new (thd->mem_root) Item_string("", 0, cs, DERIVATION_COERCIBLE, MY_REPERTOIRE_ASCII);
2707
uint32_t dummy_errors;
2708
sp= new (session->mem_root) Item_string("", 0, cs, DERIVATION_COERCIBLE, MY_REPERTOIRE_ASCII);
2735
2709
sp->str_value.copy(" ", 1, &my_charset_utf8_general_ci, cs, &dummy_errors);
2739
sp= new (thd->mem_root) Item_string(" ", 1, cs, DERIVATION_COERCIBLE, MY_REPERTOIRE_ASCII);
2713
sp= new (session->mem_root) Item_string(" ", 1, cs, DERIVATION_COERCIBLE, MY_REPERTOIRE_ASCII);
2742
return new (thd->mem_root) Item_func_repeat(sp, arg1);
2716
return new (session->mem_root) Item_func_repeat(sp, arg1);
2746
2720
Create_func_sqrt Create_func_sqrt::s_singleton;
2749
Create_func_sqrt::create(THD *thd, Item *arg1)
2751
return new (thd->mem_root) Item_func_sqrt(arg1);
2755
Create_func_str_to_date Create_func_str_to_date::s_singleton;
2758
Create_func_str_to_date::create(THD *thd, Item *arg1, Item *arg2)
2760
return new (thd->mem_root) Item_func_str_to_date(arg1, arg2);
2723
Create_func_sqrt::create(Session *session, Item *arg1)
2725
return new (session->mem_root) Item_func_sqrt(arg1);
2764
2729
Create_func_strcmp Create_func_strcmp::s_singleton;
2767
Create_func_strcmp::create(THD *thd, Item *arg1, Item *arg2)
2732
Create_func_strcmp::create(Session *session, Item *arg1, Item *arg2)
2769
return new (thd->mem_root) Item_func_strcmp(arg1, arg2);
2734
return new (session->mem_root) Item_func_strcmp(arg1, arg2);
2773
2738
Create_func_substr_index Create_func_substr_index::s_singleton;
2776
Create_func_substr_index::create(THD *thd, Item *arg1, Item *arg2, Item *arg3)
2778
return new (thd->mem_root) Item_func_substr_index(arg1, arg2, arg3);
2782
Create_func_subtime Create_func_subtime::s_singleton;
2785
Create_func_subtime::create(THD *thd, Item *arg1, Item *arg2)
2787
return new (thd->mem_root) Item_func_add_time(arg1, arg2, 0, 1);
2741
Create_func_substr_index::create(Session *session, Item *arg1, Item *arg2, Item *arg3)
2743
return new (session->mem_root) Item_func_substr_index(arg1, arg2, arg3);
2791
2746
Create_func_tan Create_func_tan::s_singleton;
2794
Create_func_tan::create(THD *thd, Item *arg1)
2749
Create_func_tan::create(Session *session, Item *arg1)
2796
return new (thd->mem_root) Item_func_tan(arg1);
2751
return new (session->mem_root) Item_func_tan(arg1);
2800
2755
Create_func_time_format Create_func_time_format::s_singleton;
2803
Create_func_time_format::create(THD *thd, Item *arg1, Item *arg2)
2805
return new (thd->mem_root) Item_func_date_format(arg1, arg2, 1);
2809
Create_func_time_to_sec Create_func_time_to_sec::s_singleton;
2812
Create_func_time_to_sec::create(THD *thd, Item *arg1)
2814
return new (thd->mem_root) Item_func_time_to_sec(arg1);
2818
Create_func_timediff Create_func_timediff::s_singleton;
2821
Create_func_timediff::create(THD *thd, Item *arg1, Item *arg2)
2823
return new (thd->mem_root) Item_func_timediff(arg1, arg2);
2758
Create_func_time_format::create(Session *session, Item *arg1, Item *arg2)
2760
return new (session->mem_root) Item_func_date_format(arg1, arg2, 1);
2827
2763
Create_func_to_days Create_func_to_days::s_singleton;
2830
Create_func_to_days::create(THD *thd, Item *arg1)
2766
Create_func_to_days::create(Session *session, Item *arg1)
2832
return new (thd->mem_root) Item_func_to_days(arg1);
2768
return new (session->mem_root) Item_func_to_days(arg1);
2836
2772
Create_func_ucase Create_func_ucase::s_singleton;
2839
Create_func_ucase::create(THD *thd, Item *arg1)
2775
Create_func_ucase::create(Session *session, Item *arg1)
2841
return new (thd->mem_root) Item_func_ucase(arg1);
2777
return new (session->mem_root) Item_func_ucase(arg1);
2845
2781
Create_func_unhex Create_func_unhex::s_singleton;
2848
Create_func_unhex::create(THD *thd, Item *arg1)
2784
Create_func_unhex::create(Session *session, Item *arg1)
2850
return new (thd->mem_root) Item_func_unhex(arg1);
2786
return new (session->mem_root) Item_func_unhex(arg1);
2854
2790
Create_func_unix_timestamp Create_func_unix_timestamp::s_singleton;
2857
Create_func_unix_timestamp::create_native(THD *thd, LEX_STRING name,
2793
Create_func_unix_timestamp::create_native(Session *session, LEX_STRING name,
2858
2794
List<Item> *item_list)
2860
2796
Item *func= NULL;
2889
2825
Create_func_uuid Create_func_uuid::s_singleton;
2892
Create_func_uuid::create(THD *thd)
2828
Create_func_uuid::create(Session *session)
2894
thd->lex->set_stmt_unsafe();
2895
return new (thd->mem_root) Item_func_uuid();
2830
return new (session->mem_root) Item_func_uuid();
2899
2834
Create_func_version Create_func_version::s_singleton;
2902
Create_func_version::create(THD *thd)
2837
Create_func_version::create(Session *session)
2904
return new (thd->mem_root) Item_static_string_func("version()",
2906
(uint) strlen(server_version),
2907
system_charset_info,
2908
DERIVATION_SYSCONST);
2839
return new (session->mem_root) Item_static_string_func("version()",
2841
(uint32_t) strlen(server_version),
2842
system_charset_info,
2843
DERIVATION_SYSCONST);
2912
2847
Create_func_weekday Create_func_weekday::s_singleton;
2915
Create_func_weekday::create(THD *thd, Item *arg1)
2917
return new (thd->mem_root) Item_func_weekday(arg1, 0);
2921
Create_func_weekofyear Create_func_weekofyear::s_singleton;
2924
Create_func_weekofyear::create(THD *thd, Item *arg1)
2926
Item *i1= new (thd->mem_root) Item_int((char*) "0", 3, 1);
2927
return new (thd->mem_root) Item_func_week(arg1, i1);
2931
Create_func_year_week Create_func_year_week::s_singleton;
2934
Create_func_year_week::create_native(THD *thd, LEX_STRING name,
2935
List<Item> *item_list)
2940
if (item_list != NULL)
2941
arg_count= item_list->elements;
2943
switch (arg_count) {
2946
Item *param_1= item_list->pop();
2947
Item *i0= new (thd->mem_root) Item_int((char*) "0", 0, 1);
2948
func= new (thd->mem_root) Item_func_yearweek(param_1, i0);
2953
Item *param_1= item_list->pop();
2954
Item *param_2= item_list->pop();
2955
func= new (thd->mem_root) Item_func_yearweek(param_1, param_2);
2960
my_error(ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT, MYF(0), name.str);
2850
Create_func_weekday::create(Session *session, Item *arg1)
2852
return new (session->mem_root) Item_func_weekday(arg1, 0);
2969
2855
struct Native_func_registry
3061
2944
{ { C_STRING_WITH_LEN("ROW_COUNT") }, BUILDER(Create_func_row_count)},
3062
2945
{ { C_STRING_WITH_LEN("RPAD") }, BUILDER(Create_func_rpad)},
3063
2946
{ { C_STRING_WITH_LEN("RTRIM") }, BUILDER(Create_func_rtrim)},
3064
{ { C_STRING_WITH_LEN("SEC_TO_TIME") }, BUILDER(Create_func_sec_to_time)},
3065
2947
{ { C_STRING_WITH_LEN("SIGN") }, BUILDER(Create_func_sign)},
3066
2948
{ { C_STRING_WITH_LEN("SIN") }, BUILDER(Create_func_sin)},
3067
2949
{ { C_STRING_WITH_LEN("SPACE") }, BUILDER(Create_func_space)},
3068
2950
{ { C_STRING_WITH_LEN("SQRT") }, BUILDER(Create_func_sqrt)},
3069
2951
{ { C_STRING_WITH_LEN("STRCMP") }, BUILDER(Create_func_strcmp)},
3070
{ { C_STRING_WITH_LEN("STR_TO_DATE") }, BUILDER(Create_func_str_to_date)},
3071
2952
{ { C_STRING_WITH_LEN("SUBSTRING_INDEX") }, BUILDER(Create_func_substr_index)},
3072
{ { C_STRING_WITH_LEN("SUBTIME") }, BUILDER(Create_func_subtime)},
3073
2953
{ { C_STRING_WITH_LEN("TAN") }, BUILDER(Create_func_tan)},
3074
{ { C_STRING_WITH_LEN("TIMEDIFF") }, BUILDER(Create_func_timediff)},
3075
2954
{ { C_STRING_WITH_LEN("TIME_FORMAT") }, BUILDER(Create_func_time_format)},
3076
{ { C_STRING_WITH_LEN("TIME_TO_SEC") }, BUILDER(Create_func_time_to_sec)},
3077
2955
{ { C_STRING_WITH_LEN("TO_DAYS") }, BUILDER(Create_func_to_days)},
3078
2956
{ { C_STRING_WITH_LEN("UCASE") }, BUILDER(Create_func_ucase)},
3079
2957
{ { C_STRING_WITH_LEN("UNHEX") }, BUILDER(Create_func_unhex)},
3108
2975
int item_create_init()
3110
2979
Native_func_registry *func;
3112
if (hash_init(& native_functions_hash,
3113
system_charset_info,
3114
array_elements(func_array),
3117
(hash_get_key) get_native_fct_hash_key,
3118
NULL, /* Nothing to free */
3122
2980
for (func= func_array; func->builder != NULL; func++)
3124
if (my_hash_insert(& native_functions_hash, (uchar*) func))
2982
func_name.assign(func->name.str, func->name.length);
2983
transform(func_name.begin(), func_name.end(), func_name.begin(), ::tolower);
2985
native_functions_map[func_name]= func;
3132
Empty the hash table for native functions.
3133
Note: this code is not thread safe, and is intended to be used at server
3134
shutdown only (after thread requests have been executed).
3137
void item_create_cleanup()
3139
hash_free(& native_functions_hash);
3144
find_native_function_builder(THD *thd __attribute__((unused)),
2993
find_native_function_builder(LEX_STRING name)
3147
2995
Native_func_registry *func;
3148
2996
Create_func *builder= NULL;
3151
func= (Native_func_registry*) hash_search(& native_functions_hash,
2998
string func_name(name.str, name.length);
2999
transform(func_name.begin(), func_name.end(), func_name.begin(), ::tolower);
3001
map<string, Native_func_registry *>::iterator func_iter=
3002
native_functions_map.find(func_name);
3004
if (func_iter != native_functions_map.end())
3006
func= (*func_iter).second;
3157
3007
builder= func->builder;
3165
create_func_char_cast(THD *thd, Item *a, int len, const CHARSET_INFO * const cs)
3015
create_func_char_cast(Session *session, Item *a, int len, const CHARSET_INFO * const cs)
3167
const CHARSET_INFO * const real_cs= (cs ? cs : thd->variables.collation_connection);
3168
return new (thd->mem_root) Item_char_typecast(a, len, real_cs);
3017
const CHARSET_INFO * const real_cs= (cs ? cs : session->variables.getCollation());
3018
return new (session->mem_root) Item_char_typecast(a, len, real_cs);
3173
create_func_cast(THD *thd, Item *a, Cast_target cast_type,
3023
create_func_cast(Session *session, Item *a, Cast_target cast_type,
3174
3024
const char *c_len, const char *c_dec,
3175
3025
const CHARSET_INFO * const cs)
3181
3031
switch (cast_type) {
3182
3032
case ITEM_CAST_BINARY:
3183
res= new (thd->mem_root) Item_func_binary(a);
3033
res= new (session->mem_root) Item_func_binary(a);
3185
3035
case ITEM_CAST_SIGNED_INT:
3186
res= new (thd->mem_root) Item_func_signed(a);
3036
res= new (session->mem_root) Item_func_signed(a);
3188
3038
case ITEM_CAST_UNSIGNED_INT:
3189
res= new (thd->mem_root) Item_func_unsigned(a);
3039
res= new (session->mem_root) Item_func_unsigned(a);
3191
3041
case ITEM_CAST_DATE:
3192
res= new (thd->mem_root) Item_date_typecast(a);
3194
case ITEM_CAST_TIME:
3195
res= new (thd->mem_root) Item_time_typecast(a);
3042
res= new (session->mem_root) Item_date_typecast(a);
3197
3044
case ITEM_CAST_DATETIME:
3198
res= new (thd->mem_root) Item_datetime_typecast(a);
3045
res= new (session->mem_root) Item_datetime_typecast(a);
3200
3047
case ITEM_CAST_DECIMAL: