20
20
Functions to create an item. Used by sql_yac.yy
24
#include <drizzled/item/create.h>
25
#include <drizzled/item/func.h>
26
#include <drizzled/error.h>
28
#include <drizzled/function_container.h>
30
#include <drizzled/function/str/binary.h>
31
#include <drizzled/function/str/concat.h>
32
#include <drizzled/function/str/conv.h>
33
#include <drizzled/function/str/export_set.h>
34
#include <drizzled/function/str/load_file.h>
35
#include <drizzled/function/str/make_set.h>
36
#include <drizzled/function/str/pad.h>
37
#include <drizzled/function/str/repeat.h>
38
#include <drizzled/function/str/str_conv.h>
39
#include <drizzled/function/str/trim.h>
41
#include <drizzled/function/time/date_format.h>
42
#include <drizzled/function/time/dayname.h>
43
#include <drizzled/function/time/dayofmonth.h>
44
#include <drizzled/function/time/dayofyear.h>
45
#include <drizzled/function/time/from_unixtime.h>
46
#include <drizzled/function/time/from_days.h>
47
#include <drizzled/function/time/last_day.h>
48
#include <drizzled/function/time/makedate.h>
49
#include <drizzled/function/time/month.h>
50
#include <drizzled/function/time/period_add.h>
51
#include <drizzled/function/time/period_diff.h>
52
#include <drizzled/function/time/to_days.h>
53
#include <drizzled/function/time/typecast.h>
54
#include <drizzled/function/time/unix_timestamp.h>
55
#include <drizzled/function/time/weekday.h>
57
#include <drizzled/item/cmpfunc.h>
58
#include <drizzled/plugin/function.h>
59
#include <drizzled/session.h>
61
/* Function declarations */
63
#include <drizzled/function/func.h>
64
#include <drizzled/function/additive_op.h>
65
#include <drizzled/function/math/dec.h>
66
#include <drizzled/function/math/decimal_typecast.h>
67
#include <drizzled/function/field.h>
68
#include <drizzled/function/find_in_set.h>
69
#include <drizzled/function/found_rows.h>
70
#include <drizzled/function/get_system_var.h>
71
#include <drizzled/function/math/int_val.h>
72
#include <drizzled/function/math/integer.h>
73
#include <drizzled/function/last_insert.h>
74
#include <drizzled/function/locate.h>
75
#include <drizzled/function/min_max.h>
76
#include <drizzled/function/num1.h>
77
#include <drizzled/function/num_op.h>
78
#include <drizzled/function/numhybrid.h>
79
#include <drizzled/function/math/real.h>
80
#include <drizzled/function/row_count.h>
81
#include <drizzled/function/set_user_var.h>
82
#include <drizzled/function/sign.h>
83
#include <drizzled/function/math/tan.h>
84
#include <drizzled/function/units.h>
86
#include <drizzled/function/cast/boolean.h>
87
#include <drizzled/function/cast/signed.h>
88
#include <drizzled/function/cast/time.h>
89
#include <drizzled/function/cast/unsigned.h>
23
#include "mysql_priv.h"
24
#include "item_create.h"
100
27
=============================================================================
245
172
it helps to compare code between versions, and helps with merges conflicts.
175
class Create_func_abs : public Create_func_arg1
178
virtual Item *create(THD *thd, Item *arg1);
180
static Create_func_abs s_singleton;
184
virtual ~Create_func_abs() {}
188
class Create_func_acos : public Create_func_arg1
191
virtual Item *create(THD *thd, Item *arg1);
193
static Create_func_acos s_singleton;
196
Create_func_acos() {}
197
virtual ~Create_func_acos() {}
201
class Create_func_addtime : public Create_func_arg2
204
virtual Item *create(THD *thd, Item *arg1, Item *arg2);
206
static Create_func_addtime s_singleton;
209
Create_func_addtime() {}
210
virtual ~Create_func_addtime() {}
214
class Create_func_asin : public Create_func_arg1
217
virtual Item *create(THD *thd, Item *arg1);
219
static Create_func_asin s_singleton;
222
Create_func_asin() {}
223
virtual ~Create_func_asin() {}
227
class Create_func_atan : public Create_native_func
230
virtual Item *create_native(THD *thd, LEX_STRING name, List<Item> *item_list);
232
static Create_func_atan s_singleton;
235
Create_func_atan() {}
236
virtual ~Create_func_atan() {}
240
class Create_func_benchmark : public Create_func_arg2
243
virtual Item *create(THD *thd, Item *arg1, Item *arg2);
245
static Create_func_benchmark s_singleton;
248
Create_func_benchmark() {}
249
virtual ~Create_func_benchmark() {}
249
253
class Create_func_bin : public Create_func_arg1
252
using Create_func_arg1::create;
254
virtual Item *create(Session *session, Item *arg1);
256
virtual Item *create(THD *thd, Item *arg1);
256
258
static Create_func_bin s_singleton;
260
262
virtual ~Create_func_bin() {}
266
class Create_func_bit_count : public Create_func_arg1
269
virtual Item *create(THD *thd, Item *arg1);
271
static Create_func_bit_count s_singleton;
274
Create_func_bit_count() {}
275
virtual ~Create_func_bit_count() {}
279
class Create_func_bit_length : public Create_func_arg1
282
virtual Item *create(THD *thd, Item *arg1);
284
static Create_func_bit_length s_singleton;
287
Create_func_bit_length() {}
288
virtual ~Create_func_bit_length() {}
292
class Create_func_ceiling : public Create_func_arg1
295
virtual Item *create(THD *thd, Item *arg1);
297
static Create_func_ceiling s_singleton;
300
Create_func_ceiling() {}
301
virtual ~Create_func_ceiling() {}
305
class Create_func_char_length : public Create_func_arg1
308
virtual Item *create(THD *thd, Item *arg1);
310
static Create_func_char_length s_singleton;
313
Create_func_char_length() {}
314
virtual ~Create_func_char_length() {}
318
class Create_func_coercibility : public Create_func_arg1
321
virtual Item *create(THD *thd, Item *arg1);
323
static Create_func_coercibility s_singleton;
326
Create_func_coercibility() {}
327
virtual ~Create_func_coercibility() {}
263
331
class Create_func_concat : public Create_native_func
266
virtual Item *create_native(Session *session, LEX_STRING name, List<Item> *item_list);
334
virtual Item *create_native(THD *thd, LEX_STRING name, List<Item> *item_list);
268
336
static Create_func_concat s_singleton;
433
522
virtual ~Create_func_degrees() {}
526
class Create_func_elt : public Create_native_func
529
virtual Item *create_native(THD *thd, LEX_STRING name, List<Item> *item_list);
531
static Create_func_elt s_singleton;
535
virtual ~Create_func_elt() {}
539
class Create_func_encode : public Create_func_arg2
542
virtual Item *create(THD *thd, Item *arg1, Item *arg2);
544
static Create_func_encode s_singleton;
547
Create_func_encode() {}
548
virtual ~Create_func_encode() {}
552
class Create_func_encrypt : public Create_native_func
555
virtual Item *create_native(THD *thd, LEX_STRING name, List<Item> *item_list);
557
static Create_func_encrypt s_singleton;
560
Create_func_encrypt() {}
561
virtual ~Create_func_encrypt() {}
565
class Create_func_exp : public Create_func_arg1
568
virtual Item *create(THD *thd, Item *arg1);
570
static Create_func_exp s_singleton;
574
virtual ~Create_func_exp() {}
436
578
class Create_func_export_set : public Create_native_func
440
virtual Item *create_native(Session *session, LEX_STRING name, List<Item> *item_list);
581
virtual Item *create_native(THD *thd, LEX_STRING name, List<Item> *item_list);
442
583
static Create_func_export_set s_singleton;
1068
1506
Create_udf_func Create_udf_func::s_singleton;
1071
Create_udf_func::create(Session *session, LEX_STRING name, List<Item> *item_list)
1509
Create_udf_func::create(THD *thd, LEX_STRING name, List<Item> *item_list)
1073
const plugin::Function *udf= plugin::Function::get(name.str, name.length);
1511
udf_func *udf= find_udf(name.str, name.length);
1075
return create(session, udf, item_list);
1513
return create(thd, udf, item_list);
1080
Create_udf_func::create(Session *session, const plugin::Function *udf,
1081
List<Item> *item_list)
1518
Create_udf_func::create(THD *thd, udf_func *udf, List<Item> *item_list)
1083
Item_func *func= NULL;
1084
1521
int arg_count= 0;
1086
1523
if (item_list != NULL)
1087
1524
arg_count= item_list->elements;
1089
func= (*udf)(session->mem_root);
1091
if(!func->check_argument_count(arg_count))
1093
my_error(ER_WRONG_PARAMCOUNT_TO_FUNCTION, MYF(0), func->func_name());
1098
func->set_arguments(*item_list);
1526
thd->lex->set_stmt_unsafe();
1528
assert( (udf->type == UDFTYPE_FUNCTION)
1529
|| (udf->type == UDFTYPE_AGGREGATE));
1531
switch(udf->returns) {
1534
if (udf->type == UDFTYPE_FUNCTION)
1537
func= new (thd->mem_root) Item_func_udf_str(udf, *item_list);
1539
func= new (thd->mem_root) Item_func_udf_str(udf);
1544
func= new (thd->mem_root) Item_sum_udf_str(udf, *item_list);
1546
func= new (thd->mem_root) Item_sum_udf_str(udf);
1552
if (udf->type == UDFTYPE_FUNCTION)
1555
func= new (thd->mem_root) Item_func_udf_float(udf, *item_list);
1557
func= new (thd->mem_root) Item_func_udf_float(udf);
1562
func= new (thd->mem_root) Item_sum_udf_float(udf, *item_list);
1564
func= new (thd->mem_root) Item_sum_udf_float(udf);
1570
if (udf->type == UDFTYPE_FUNCTION)
1573
func= new (thd->mem_root) Item_func_udf_int(udf, *item_list);
1575
func= new (thd->mem_root) Item_func_udf_int(udf);
1580
func= new (thd->mem_root) Item_sum_udf_int(udf, *item_list);
1582
func= new (thd->mem_root) Item_sum_udf_int(udf);
1586
case DECIMAL_RESULT:
1588
if (udf->type == UDFTYPE_FUNCTION)
1591
func= new (thd->mem_root) Item_func_udf_decimal(udf, *item_list);
1593
func= new (thd->mem_root) Item_func_udf_decimal(udf);
1598
func= new (thd->mem_root) Item_sum_udf_decimal(udf, *item_list);
1600
func= new (thd->mem_root) Item_sum_udf_decimal(udf);
1606
my_error(ER_NOT_SUPPORTED_YET, MYF(0), "UDF return type");
1105
Create_native_func::create(Session *session, LEX_STRING name, List<Item> *item_list)
1615
Create_native_func::create(THD *thd, LEX_STRING name, List<Item> *item_list)
1107
1617
if (has_named_parameters(item_list))
1215
return create(session, param_1, param_2, param_3);
1725
return create(thd, param_1, param_2, param_3);
1729
Create_func_abs Create_func_abs::s_singleton;
1732
Create_func_abs::create(THD *thd, Item *arg1)
1734
return new (thd->mem_root) Item_func_abs(arg1);
1738
Create_func_acos Create_func_acos::s_singleton;
1741
Create_func_acos::create(THD *thd, Item *arg1)
1743
return new (thd->mem_root) Item_func_acos(arg1);
1747
Create_func_addtime Create_func_addtime::s_singleton;
1750
Create_func_addtime::create(THD *thd, Item *arg1, Item *arg2)
1752
return new (thd->mem_root) Item_func_add_time(arg1, arg2, 0, 0);
1756
Create_func_asin Create_func_asin::s_singleton;
1759
Create_func_asin::create(THD *thd, Item *arg1)
1761
return new (thd->mem_root) Item_func_asin(arg1);
1765
Create_func_atan Create_func_atan::s_singleton;
1768
Create_func_atan::create_native(THD *thd, LEX_STRING name,
1769
List<Item> *item_list)
1774
if (item_list != NULL)
1775
arg_count= item_list->elements;
1777
switch (arg_count) {
1780
Item *param_1= item_list->pop();
1781
func= new (thd->mem_root) Item_func_atan(param_1);
1786
Item *param_1= item_list->pop();
1787
Item *param_2= item_list->pop();
1788
func= new (thd->mem_root) Item_func_atan(param_1, param_2);
1793
my_error(ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT, MYF(0), name.str);
1802
Create_func_benchmark Create_func_benchmark::s_singleton;
1805
Create_func_benchmark::create(THD *thd, Item *arg1, Item *arg2)
1807
return new (thd->mem_root) Item_func_benchmark(arg1, arg2);
1218
1811
Create_func_bin Create_func_bin::s_singleton;
1221
Create_func_bin::create(Session *session, Item *arg1)
1223
Item *i10= new (session->mem_root) Item_int((int32_t) 10,2);
1224
Item *i2= new (session->mem_root) Item_int((int32_t) 2,1);
1225
return new (session->mem_root) Item_func_conv(arg1, i10, i2);
1814
Create_func_bin::create(THD *thd, Item *arg1)
1816
Item *i10= new (thd->mem_root) Item_int((int32) 10,2);
1817
Item *i2= new (thd->mem_root) Item_int((int32) 2,1);
1818
return new (thd->mem_root) Item_func_conv(arg1, i10, i2);
1822
Create_func_bit_count Create_func_bit_count::s_singleton;
1825
Create_func_bit_count::create(THD *thd, Item *arg1)
1827
return new (thd->mem_root) Item_func_bit_count(arg1);
1831
Create_func_bit_length Create_func_bit_length::s_singleton;
1834
Create_func_bit_length::create(THD *thd, Item *arg1)
1836
return new (thd->mem_root) Item_func_bit_length(arg1);
1840
Create_func_ceiling Create_func_ceiling::s_singleton;
1843
Create_func_ceiling::create(THD *thd, Item *arg1)
1845
return new (thd->mem_root) Item_func_ceiling(arg1);
1849
Create_func_char_length Create_func_char_length::s_singleton;
1852
Create_func_char_length::create(THD *thd, Item *arg1)
1854
return new (thd->mem_root) Item_func_char_length(arg1);
1858
Create_func_coercibility Create_func_coercibility::s_singleton;
1861
Create_func_coercibility::create(THD *thd, Item *arg1)
1863
return new (thd->mem_root) Item_func_coercibility(arg1);
1228
1867
Create_func_concat Create_func_concat::s_singleton;
1231
Create_func_concat::create_native(Session *session, LEX_STRING name,
1870
Create_func_concat::create_native(THD *thd, LEX_STRING name,
1232
1871
List<Item> *item_list)
1234
1873
int arg_count= 0;
1260
1899
/* "WS" stands for "With Separator": this function takes 2+ arguments */
1261
1900
if (arg_count < 2)
1263
my_error(ER_WRONG_PARAMCOUNT_TO_FUNCTION, MYF(0), name.str);
1902
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);
1906
return new (thd->mem_root) Item_func_concat_ws(*item_list);
1910
Create_func_connection_id Create_func_connection_id::s_singleton;
1913
Create_func_connection_id::create(THD *thd)
1915
return new (thd->mem_root) Item_func_connection_id();
1271
1919
Create_func_conv Create_func_conv::s_singleton;
1274
Create_func_conv::create(Session *session, Item *arg1, Item *arg2, Item *arg3)
1276
return new (session->mem_root) Item_func_conv(arg1, arg2, arg3);
1922
Create_func_conv::create(THD *thd, Item *arg1, Item *arg2, Item *arg3)
1924
return new (thd->mem_root) Item_func_conv(arg1, arg2, arg3);
1928
Create_func_cos Create_func_cos::s_singleton;
1931
Create_func_cos::create(THD *thd, Item *arg1)
1933
return new (thd->mem_root) Item_func_cos(arg1);
1279
1937
Create_func_cot Create_func_cot::s_singleton;
1282
Create_func_cot::create(Session *session, Item *arg1)
1284
Item *i1= new (session->mem_root) Item_int((char*) "1", 1, 1);
1285
Item *i2= new (session->mem_root) Item_func_tan(arg1);
1286
return new (session->mem_root) Item_func_div(session, i1, i2);
1940
Create_func_cot::create(THD *thd, Item *arg1)
1942
Item *i1= new (thd->mem_root) Item_int((char*) "1", 1, 1);
1943
Item *i2= new (thd->mem_root) Item_func_tan(arg1);
1944
return new (thd->mem_root) Item_func_div(i1, i2);
1948
Create_func_crc32 Create_func_crc32::s_singleton;
1951
Create_func_crc32::create(THD *thd, Item *arg1)
1953
return new (thd->mem_root) Item_func_crc32(arg1);
1289
1957
Create_func_date_format Create_func_date_format::s_singleton;
1292
Create_func_date_format::create(Session *session, Item *arg1, Item *arg2)
1960
Create_func_date_format::create(THD *thd, Item *arg1, Item *arg2)
1294
return new (session->mem_root) Item_func_date_format(arg1, arg2, 0);
1962
return new (thd->mem_root) Item_func_date_format(arg1, arg2, 0);
1298
1966
Create_func_datediff Create_func_datediff::s_singleton;
1301
Create_func_datediff::create(Session *session, Item *arg1, Item *arg2)
1969
Create_func_datediff::create(THD *thd, Item *arg1, Item *arg2)
1303
Item *i1= new (session->mem_root) Item_func_to_days(arg1);
1304
Item *i2= new (session->mem_root) Item_func_to_days(arg2);
1971
Item *i1= new (thd->mem_root) Item_func_to_days(arg1);
1972
Item *i2= new (thd->mem_root) Item_func_to_days(arg2);
1306
return new (session->mem_root) Item_func_minus(i1, i2);
1974
return new (thd->mem_root) Item_func_minus(i1, i2);
1310
1978
Create_func_dayname Create_func_dayname::s_singleton;
1313
Create_func_dayname::create(Session *session, Item *arg1)
1981
Create_func_dayname::create(THD *thd, Item *arg1)
1315
return new (session->mem_root) Item_func_dayname(arg1);
1983
return new (thd->mem_root) Item_func_dayname(arg1);
1319
1987
Create_func_dayofmonth Create_func_dayofmonth::s_singleton;
1322
Create_func_dayofmonth::create(Session *session, Item *arg1)
1990
Create_func_dayofmonth::create(THD *thd, Item *arg1)
1324
return new (session->mem_root) Item_func_dayofmonth(arg1);
1992
return new (thd->mem_root) Item_func_dayofmonth(arg1);
1328
1996
Create_func_dayofweek Create_func_dayofweek::s_singleton;
1331
Create_func_dayofweek::create(Session *session, Item *arg1)
1999
Create_func_dayofweek::create(THD *thd, Item *arg1)
1333
return new (session->mem_root) Item_func_weekday(arg1, 1);
2001
return new (thd->mem_root) Item_func_weekday(arg1, 1);
1337
2005
Create_func_dayofyear Create_func_dayofyear::s_singleton;
1340
Create_func_dayofyear::create(Session *session, Item *arg1)
1342
return new (session->mem_root) Item_func_dayofyear(arg1);
2008
Create_func_dayofyear::create(THD *thd, Item *arg1)
2010
return new (thd->mem_root) Item_func_dayofyear(arg1);
2014
Create_func_decode Create_func_decode::s_singleton;
2017
Create_func_decode::create(THD *thd, Item *arg1, Item *arg2)
2019
return new (thd->mem_root) Item_func_decode(arg1, arg2);
1346
2023
Create_func_degrees Create_func_degrees::s_singleton;
1349
Create_func_degrees::create(Session *session, Item *arg1)
2026
Create_func_degrees::create(THD *thd, Item *arg1)
1351
return new (session->mem_root) Item_func_units((char*) "degrees", arg1,
2028
return new (thd->mem_root) Item_func_units((char*) "degrees", arg1,
1352
2029
180/M_PI, 0.0);
2033
Create_func_elt Create_func_elt::s_singleton;
2036
Create_func_elt::create_native(THD *thd, LEX_STRING name,
2037
List<Item> *item_list)
2041
if (item_list != NULL)
2042
arg_count= item_list->elements;
2046
my_error(ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT, MYF(0), name.str);
2050
return new (thd->mem_root) Item_func_elt(*item_list);
2054
Create_func_encode Create_func_encode::s_singleton;
2057
Create_func_encode::create(THD *thd, Item *arg1, Item *arg2)
2059
return new (thd->mem_root) Item_func_encode(arg1, arg2);
2063
Create_func_encrypt Create_func_encrypt::s_singleton;
2066
Create_func_encrypt::create_native(THD *thd, LEX_STRING name,
2067
List<Item> *item_list)
2072
if (item_list != NULL)
2073
arg_count= item_list->elements;
2075
switch (arg_count) {
2078
Item *param_1= item_list->pop();
2079
func= new (thd->mem_root) Item_func_encrypt(param_1);
2084
Item *param_1= item_list->pop();
2085
Item *param_2= item_list->pop();
2086
func= new (thd->mem_root) Item_func_encrypt(param_1, param_2);
2091
my_error(ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT, MYF(0), name.str);
2100
Create_func_exp Create_func_exp::s_singleton;
2103
Create_func_exp::create(THD *thd, Item *arg1)
2105
return new (thd->mem_root) Item_func_exp(arg1);
1355
2109
Create_func_export_set Create_func_export_set::s_singleton;
1358
Create_func_export_set::create_native(Session *session, LEX_STRING name,
2112
Create_func_export_set::create_native(THD *thd, LEX_STRING name,
1359
2113
List<Item> *item_list)
1361
2115
Item *func= NULL;
1419
2173
if (arg_count < 2)
1421
my_error(ER_WRONG_PARAMCOUNT_TO_FUNCTION, MYF(0), name.str);
2175
my_error(ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT, MYF(0), name.str);
1425
return new (session->mem_root) Item_func_field(*item_list);
2179
return new (thd->mem_root) Item_func_field(*item_list);
1429
2183
Create_func_find_in_set Create_func_find_in_set::s_singleton;
1432
Create_func_find_in_set::create(Session *session, Item *arg1, Item *arg2)
1434
return new (session->mem_root) Item_func_find_in_set(arg1, arg2);
2186
Create_func_find_in_set::create(THD *thd, Item *arg1, Item *arg2)
2188
return new (thd->mem_root) Item_func_find_in_set(arg1, arg2);
2192
Create_func_floor Create_func_floor::s_singleton;
2195
Create_func_floor::create(THD *thd, Item *arg1)
2197
return new (thd->mem_root) Item_func_floor(arg1);
2201
Create_func_format Create_func_format::s_singleton;
2204
Create_func_format::create(THD *thd, Item *arg1, Item *arg2)
2206
return new (thd->mem_root) Item_func_format(arg1, arg2);
1437
2210
Create_func_found_rows Create_func_found_rows::s_singleton;
1440
Create_func_found_rows::create(Session *session)
2213
Create_func_found_rows::create(THD *thd)
1442
return new (session->mem_root) Item_func_found_rows();
2215
thd->lex->set_stmt_unsafe();
2216
return new (thd->mem_root) Item_func_found_rows();
1446
2220
Create_func_from_days Create_func_from_days::s_singleton;
1449
Create_func_from_days::create(Session *session, Item *arg1)
2223
Create_func_from_days::create(THD *thd, Item *arg1)
1451
return new (session->mem_root) Item_func_from_days(arg1);
2225
return new (thd->mem_root) Item_func_from_days(arg1);
1455
2229
Create_func_from_unixtime Create_func_from_unixtime::s_singleton;
1458
Create_func_from_unixtime::create_native(Session *session, LEX_STRING name,
2232
Create_func_from_unixtime::create_native(THD *thd, LEX_STRING name,
1459
2233
List<Item> *item_list)
1461
2235
Item *func= NULL;
1504
2278
if (arg_count < 2)
1506
my_error(ER_WRONG_PARAMCOUNT_TO_FUNCTION, MYF(0), name.str);
2280
my_error(ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT, MYF(0), name.str);
1510
return new (session->mem_root) Item_func_max(*item_list);
2284
return new (thd->mem_root) Item_func_max(*item_list);
2288
Create_func_hex Create_func_hex::s_singleton;
2291
Create_func_hex::create(THD *thd, Item *arg1)
2293
return new (thd->mem_root) Item_func_hex(arg1);
1513
2297
Create_func_ifnull Create_func_ifnull::s_singleton;
1516
Create_func_ifnull::create(Session *session, Item *arg1, Item *arg2)
2300
Create_func_ifnull::create(THD *thd, Item *arg1, Item *arg2)
1518
return new (session->mem_root) Item_func_ifnull(arg1, arg2);
2302
return new (thd->mem_root) Item_func_ifnull(arg1, arg2);
1522
2306
Create_func_instr Create_func_instr::s_singleton;
1525
Create_func_instr::create(Session *session, Item *arg1, Item *arg2)
2309
Create_func_instr::create(THD *thd, Item *arg1, Item *arg2)
1527
return new (session->mem_root) Item_func_locate(arg1, arg2);
2311
return new (thd->mem_root) Item_func_locate(arg1, arg2);
1531
2315
Create_func_isnull Create_func_isnull::s_singleton;
1534
Create_func_isnull::create(Session *session, Item *arg1)
2318
Create_func_isnull::create(THD *thd, Item *arg1)
1536
return new (session->mem_root) Item_func_isnull(arg1);
2320
return new (thd->mem_root) Item_func_isnull(arg1);
1540
2324
Create_func_last_day Create_func_last_day::s_singleton;
1543
Create_func_last_day::create(Session *session, Item *arg1)
2327
Create_func_last_day::create(THD *thd, Item *arg1)
1545
return new (session->mem_root) Item_func_last_day(arg1);
2329
return new (thd->mem_root) Item_func_last_day(arg1);
1549
2333
Create_func_last_insert_id Create_func_last_insert_id::s_singleton;
1552
Create_func_last_insert_id::create_native(Session *session, LEX_STRING name,
2336
Create_func_last_insert_id::create_native(THD *thd, LEX_STRING name,
1553
2337
List<Item> *item_list)
1555
2339
Item *func= NULL;
1604
2388
if (arg_count < 2)
1606
my_error(ER_WRONG_PARAMCOUNT_TO_FUNCTION, MYF(0), name.str);
2390
my_error(ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT, MYF(0), name.str);
1610
return new (session->mem_root) Item_func_min(*item_list);
2394
return new (thd->mem_root) Item_func_min(*item_list);
2398
Create_func_length Create_func_length::s_singleton;
2401
Create_func_length::create(THD *thd, Item *arg1)
2403
return new (thd->mem_root) Item_func_length(arg1);
2407
Create_func_ln Create_func_ln::s_singleton;
2410
Create_func_ln::create(THD *thd, Item *arg1)
2412
return new (thd->mem_root) Item_func_ln(arg1);
1613
2416
Create_func_load_file Create_func_load_file::s_singleton;
1616
Create_func_load_file::create(Session *session, Item *arg1)
2419
Create_func_load_file::create(THD *thd, Item *arg1)
1618
return new (session->mem_root) Item_load_file(*session, arg1);
2421
return new (thd->mem_root) Item_load_file(arg1);
1622
2425
Create_func_locate Create_func_locate::s_singleton;
1625
Create_func_locate::create_native(Session *session, LEX_STRING name,
2428
Create_func_locate::create_native(THD *thd, LEX_STRING name,
1626
2429
List<Item> *item_list)
1628
2431
Item *func= NULL;
1646
2449
Item *param_2= item_list->pop();
1647
2450
Item *param_3= item_list->pop();
1648
2451
/* Yes, parameters in that order : 2, 1, 3 */
1649
func= new (session->mem_root) Item_func_locate(param_2, param_1, param_3);
1654
my_error(ER_WRONG_PARAMCOUNT_TO_FUNCTION, MYF(0), name.str);
2452
func= new (thd->mem_root) Item_func_locate(param_2, param_1, param_3);
2457
my_error(ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT, MYF(0), name.str);
2466
Create_func_log Create_func_log::s_singleton;
2469
Create_func_log::create_native(THD *thd, LEX_STRING name,
2470
List<Item> *item_list)
2475
if (item_list != NULL)
2476
arg_count= item_list->elements;
2478
switch (arg_count) {
2481
Item *param_1= item_list->pop();
2482
func= new (thd->mem_root) Item_func_log(param_1);
2487
Item *param_1= item_list->pop();
2488
Item *param_2= item_list->pop();
2489
func= new (thd->mem_root) Item_func_log(param_1, param_2);
2494
my_error(ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT, MYF(0), name.str);
2503
Create_func_log10 Create_func_log10::s_singleton;
2506
Create_func_log10::create(THD *thd, Item *arg1)
2508
return new (thd->mem_root) Item_func_log10(arg1);
2512
Create_func_log2 Create_func_log2::s_singleton;
2515
Create_func_log2::create(THD *thd, Item *arg1)
2517
return new (thd->mem_root) Item_func_log2(arg1);
1662
2521
Create_func_lpad Create_func_lpad::s_singleton;
1665
Create_func_lpad::create(Session *session, Item *arg1, Item *arg2, Item *arg3)
2524
Create_func_lpad::create(THD *thd, Item *arg1, Item *arg2, Item *arg3)
1667
return new (session->mem_root) Item_func_lpad(*session, arg1, arg2, arg3);
2526
return new (thd->mem_root) Item_func_lpad(arg1, arg2, arg3);
1671
2530
Create_func_ltrim Create_func_ltrim::s_singleton;
1674
Create_func_ltrim::create(Session *session, Item *arg1)
2533
Create_func_ltrim::create(THD *thd, Item *arg1)
1676
return new (session->mem_root) Item_func_ltrim(arg1);
2535
return new (thd->mem_root) Item_func_ltrim(arg1);
1680
2539
Create_func_makedate Create_func_makedate::s_singleton;
1683
Create_func_makedate::create(Session *session, Item *arg1, Item *arg2)
1685
return new (session->mem_root) Item_func_makedate(arg1, arg2);
2542
Create_func_makedate::create(THD *thd, Item *arg1, Item *arg2)
2544
return new (thd->mem_root) Item_func_makedate(arg1, arg2);
2548
Create_func_maketime Create_func_maketime::s_singleton;
2551
Create_func_maketime::create(THD *thd, Item *arg1, Item *arg2, Item *arg3)
2553
return new (thd->mem_root) Item_func_maketime(arg1, arg2, arg3);
1689
2557
Create_func_make_set Create_func_make_set::s_singleton;
1692
Create_func_make_set::create_native(Session *session_arg, LEX_STRING name,
2560
Create_func_make_set::create_native(THD *thd, LEX_STRING name,
1693
2561
List<Item> *item_list)
1695
2563
int arg_count= 0;
1700
2568
if (arg_count < 2)
1702
my_error(ER_WRONG_PARAMCOUNT_TO_FUNCTION, MYF(0), name.str);
2570
my_error(ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT, MYF(0), name.str);
1706
2574
Item *param_1= item_list->pop();
1707
return new (session_arg->mem_root) Item_func_make_set(*session_arg, param_1, *item_list);
2575
return new (thd->mem_root) Item_func_make_set(param_1, *item_list);
2579
Create_func_master_pos_wait Create_func_master_pos_wait::s_singleton;
2582
Create_func_master_pos_wait::create_native(THD *thd, LEX_STRING name,
2583
List<Item> *item_list)
2589
if (item_list != NULL)
2590
arg_count= item_list->elements;
2592
switch (arg_count) {
2595
Item *param_1= item_list->pop();
2596
Item *param_2= item_list->pop();
2597
func= new (thd->mem_root) Item_master_pos_wait(param_1, param_2);
2602
Item *param_1= item_list->pop();
2603
Item *param_2= item_list->pop();
2604
Item *param_3= item_list->pop();
2605
func= new (thd->mem_root) Item_master_pos_wait(param_1, param_2, param_3);
2610
my_error(ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT, MYF(0), name.str);
2619
Create_func_md5 Create_func_md5::s_singleton;
2622
Create_func_md5::create(THD *thd, Item *arg1)
2624
return new (thd->mem_root) Item_func_md5(arg1);
1711
2628
Create_func_monthname Create_func_monthname::s_singleton;
1714
Create_func_monthname::create(Session *session, Item *arg1)
2631
Create_func_monthname::create(THD *thd, Item *arg1)
1716
return new (session->mem_root) Item_func_monthname(arg1);
2633
return new (thd->mem_root) Item_func_monthname(arg1);
1720
2637
Create_func_nullif Create_func_nullif::s_singleton;
1723
Create_func_nullif::create(Session *session, Item *arg1, Item *arg2)
2640
Create_func_nullif::create(THD *thd, Item *arg1, Item *arg2)
1725
return new (session->mem_root) Item_func_nullif(arg1, arg2);
2642
return new (thd->mem_root) Item_func_nullif(arg1, arg2);
1729
2646
Create_func_oct Create_func_oct::s_singleton;
1732
Create_func_oct::create(Session *session, Item *arg1)
1734
Item *i10= new (session->mem_root) Item_int((int32_t) 10,2);
1735
Item *i8= new (session->mem_root) Item_int((int32_t) 8,1);
1736
return new (session->mem_root) Item_func_conv(arg1, i10, i8);
2649
Create_func_oct::create(THD *thd, Item *arg1)
2651
Item *i10= new (thd->mem_root) Item_int((int32) 10,2);
2652
Item *i8= new (thd->mem_root) Item_int((int32) 8,1);
2653
return new (thd->mem_root) Item_func_conv(arg1, i10, i8);
2657
Create_func_ord Create_func_ord::s_singleton;
2660
Create_func_ord::create(THD *thd, Item *arg1)
2662
return new (thd->mem_root) Item_func_ord(arg1);
1739
2666
Create_func_period_add Create_func_period_add::s_singleton;
1742
Create_func_period_add::create(Session *session, Item *arg1, Item *arg2)
2669
Create_func_period_add::create(THD *thd, Item *arg1, Item *arg2)
1744
return new (session->mem_root) Item_func_period_add(arg1, arg2);
2671
return new (thd->mem_root) Item_func_period_add(arg1, arg2);
1748
2675
Create_func_period_diff Create_func_period_diff::s_singleton;
1751
Create_func_period_diff::create(Session *session, Item *arg1, Item *arg2)
2678
Create_func_period_diff::create(THD *thd, Item *arg1, Item *arg2)
1753
return new (session->mem_root) Item_func_period_diff(arg1, arg2);
2680
return new (thd->mem_root) Item_func_period_diff(arg1, arg2);
1757
2684
Create_func_pi Create_func_pi::s_singleton;
1760
Create_func_pi::create(Session *session)
1762
return new (session->mem_root) Item_static_float_func("pi()", M_PI, 6, 8);
2687
Create_func_pi::create(THD *thd)
2689
return new (thd->mem_root) Item_static_float_func("pi()", M_PI, 6, 8);
2693
Create_func_pow Create_func_pow::s_singleton;
2696
Create_func_pow::create(THD *thd, Item *arg1, Item *arg2)
2698
return new (thd->mem_root) Item_func_pow(arg1, arg2);
2702
Create_func_quote Create_func_quote::s_singleton;
2705
Create_func_quote::create(THD *thd, Item *arg1)
2707
return new (thd->mem_root) Item_func_quote(arg1);
1765
2711
Create_func_radians Create_func_radians::s_singleton;
1768
Create_func_radians::create(Session *session, Item *arg1)
2714
Create_func_radians::create(THD *thd, Item *arg1)
1770
return new (session->mem_root) Item_func_units((char*) "radians", arg1,
2716
return new (thd->mem_root) Item_func_units((char*) "radians", arg1,
1771
2717
M_PI/180, 0.0);
2721
Create_func_rand Create_func_rand::s_singleton;
2724
Create_func_rand::create_native(THD *thd, LEX_STRING name,
2725
List<Item> *item_list)
2730
if (item_list != NULL)
2731
arg_count= item_list->elements;
2733
switch (arg_count) {
2736
func= new (thd->mem_root) Item_func_rand();
2741
Item *param_1= item_list->pop();
2742
func= new (thd->mem_root) Item_func_rand(param_1);
2747
my_error(ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT, MYF(0), name.str);
1774
2756
Create_func_round Create_func_round::s_singleton;
1777
Create_func_round::create_native(Session *session, LEX_STRING name,
2759
Create_func_round::create_native(THD *thd, LEX_STRING name,
1778
2760
List<Item> *item_list)
1780
2762
Item *func= NULL;
1812
2794
Create_func_row_count Create_func_row_count::s_singleton;
1815
Create_func_row_count::create(Session *session)
2797
Create_func_row_count::create(THD *thd)
1817
return new (session->mem_root) Item_func_row_count();
2799
thd->lex->set_stmt_unsafe();
2800
return new (thd->mem_root) Item_func_row_count();
1821
2804
Create_func_rpad Create_func_rpad::s_singleton;
1824
Create_func_rpad::create(Session *session, Item *arg1, Item *arg2, Item *arg3)
2807
Create_func_rpad::create(THD *thd, Item *arg1, Item *arg2, Item *arg3)
1826
return new (session->mem_root) Item_func_rpad(*session, arg1, arg2, arg3);
2809
return new (thd->mem_root) Item_func_rpad(arg1, arg2, arg3);
1830
2813
Create_func_rtrim Create_func_rtrim::s_singleton;
1833
Create_func_rtrim::create(Session *session, Item *arg1)
1835
return new (session->mem_root) Item_func_rtrim(arg1);
2816
Create_func_rtrim::create(THD *thd, Item *arg1)
2818
return new (thd->mem_root) Item_func_rtrim(arg1);
2822
Create_func_sec_to_time Create_func_sec_to_time::s_singleton;
2825
Create_func_sec_to_time::create(THD *thd, Item *arg1)
2827
return new (thd->mem_root) Item_func_sec_to_time(arg1);
1839
2831
Create_func_sign Create_func_sign::s_singleton;
1842
Create_func_sign::create(Session *session, Item *arg1)
1844
return new (session->mem_root) Item_func_sign(arg1);
2834
Create_func_sign::create(THD *thd, Item *arg1)
2836
return new (thd->mem_root) Item_func_sign(arg1);
2840
Create_func_sin Create_func_sin::s_singleton;
2843
Create_func_sin::create(THD *thd, Item *arg1)
2845
return new (thd->mem_root) Item_func_sin(arg1);
1847
2849
Create_func_space Create_func_space::s_singleton;
1850
Create_func_space::create(Session *session, Item *arg1)
2852
Create_func_space::create(THD *thd, Item *arg1)
1853
2855
TODO: Fix Bug#23637
1854
2856
The parsed item tree should not depend on
1855
<code>session->variables.collation_connection</code>.
2857
<code>thd->variables.collation_connection</code>.
1857
const CHARSET_INFO * const cs= session->variables.getCollation();
2859
CHARSET_INFO *cs= thd->variables.collation_connection;
1860
2862
if (cs->mbminlen > 1)
1862
size_t dummy_errors;
1863
sp= new (session->mem_root) Item_string("", 0, cs, DERIVATION_COERCIBLE);
1864
sp->str_value.copy(" ", 1, &my_charset_utf8_general_ci, cs, &dummy_errors);
2865
sp= new (thd->mem_root) Item_string("", 0, cs, DERIVATION_COERCIBLE, MY_REPERTOIRE_ASCII);
2866
sp->str_value.copy(" ", 1, &my_charset_latin1, cs, &dummy_errors);
1868
sp= new (session->mem_root) Item_string(" ", 1, cs, DERIVATION_COERCIBLE);
2870
sp= new (thd->mem_root) Item_string(" ", 1, cs, DERIVATION_COERCIBLE, MY_REPERTOIRE_ASCII);
1871
return new (session->mem_root) Item_func_repeat(*session, sp, arg1);
2873
return new (thd->mem_root) Item_func_repeat(sp, arg1);
2877
Create_func_sqrt Create_func_sqrt::s_singleton;
2880
Create_func_sqrt::create(THD *thd, Item *arg1)
2882
return new (thd->mem_root) Item_func_sqrt(arg1);
2886
Create_func_str_to_date Create_func_str_to_date::s_singleton;
2889
Create_func_str_to_date::create(THD *thd, Item *arg1, Item *arg2)
2891
return new (thd->mem_root) Item_func_str_to_date(arg1, arg2);
1874
2895
Create_func_strcmp Create_func_strcmp::s_singleton;
1877
Create_func_strcmp::create(Session *session, Item *arg1, Item *arg2)
1879
return new (session->mem_root) Item_func_strcmp(arg1, arg2);
2898
Create_func_strcmp::create(THD *thd, Item *arg1, Item *arg2)
2900
return new (thd->mem_root) Item_func_strcmp(arg1, arg2);
2904
Create_func_substr_index Create_func_substr_index::s_singleton;
2907
Create_func_substr_index::create(THD *thd, Item *arg1, Item *arg2, Item *arg3)
2909
return new (thd->mem_root) Item_func_substr_index(arg1, arg2, arg3);
2913
Create_func_subtime Create_func_subtime::s_singleton;
2916
Create_func_subtime::create(THD *thd, Item *arg1, Item *arg2)
2918
return new (thd->mem_root) Item_func_add_time(arg1, arg2, 0, 1);
1883
2922
Create_func_tan Create_func_tan::s_singleton;
1886
Create_func_tan::create(Session *session, Item *arg1)
2925
Create_func_tan::create(THD *thd, Item *arg1)
1888
return new (session->mem_root) Item_func_tan(arg1);
2927
return new (thd->mem_root) Item_func_tan(arg1);
1892
2931
Create_func_time_format Create_func_time_format::s_singleton;
1895
Create_func_time_format::create(Session *session, Item *arg1, Item *arg2)
1897
return new (session->mem_root) Item_func_date_format(arg1, arg2, 1);
2934
Create_func_time_format::create(THD *thd, Item *arg1, Item *arg2)
2936
return new (thd->mem_root) Item_func_date_format(arg1, arg2, 1);
2940
Create_func_time_to_sec Create_func_time_to_sec::s_singleton;
2943
Create_func_time_to_sec::create(THD *thd, Item *arg1)
2945
return new (thd->mem_root) Item_func_time_to_sec(arg1);
2949
Create_func_timediff Create_func_timediff::s_singleton;
2952
Create_func_timediff::create(THD *thd, Item *arg1, Item *arg2)
2954
return new (thd->mem_root) Item_func_timediff(arg1, arg2);
1900
2958
Create_func_to_days Create_func_to_days::s_singleton;
1903
Create_func_to_days::create(Session *session, Item *arg1)
2961
Create_func_to_days::create(THD *thd, Item *arg1)
1905
return new (session->mem_root) Item_func_to_days(arg1);
2963
return new (thd->mem_root) Item_func_to_days(arg1);
1909
2967
Create_func_ucase Create_func_ucase::s_singleton;
1912
Create_func_ucase::create(Session *session, Item *arg1)
1914
return new (session->mem_root) Item_func_ucase(arg1);
2970
Create_func_ucase::create(THD *thd, Item *arg1)
2972
return new (thd->mem_root) Item_func_ucase(arg1);
2976
Create_func_unhex Create_func_unhex::s_singleton;
2979
Create_func_unhex::create(THD *thd, Item *arg1)
2981
return new (thd->mem_root) Item_func_unhex(arg1);
1917
2985
Create_func_unix_timestamp Create_func_unix_timestamp::s_singleton;
1920
Create_func_unix_timestamp::create_native(Session *session, LEX_STRING name,
2988
Create_func_unix_timestamp::create_native(THD *thd, LEX_STRING name,
1921
2989
List<Item> *item_list)
1923
2991
Item *func= NULL;
3020
Create_func_uuid Create_func_uuid::s_singleton;
3023
Create_func_uuid::create(THD *thd)
3025
thd->lex->set_stmt_unsafe();
3026
return new (thd->mem_root) Item_func_uuid();
3030
Create_func_version Create_func_version::s_singleton;
3033
Create_func_version::create(THD *thd)
3035
return new (thd->mem_root) Item_static_string_func("version()",
3037
(uint) strlen(server_version),
3038
system_charset_info,
3039
DERIVATION_SYSCONST);
1952
3043
Create_func_weekday Create_func_weekday::s_singleton;
1955
Create_func_weekday::create(Session *session, Item *arg1)
1957
return new (session->mem_root) Item_func_weekday(arg1, 0);
3046
Create_func_weekday::create(THD *thd, Item *arg1)
3048
return new (thd->mem_root) Item_func_weekday(arg1, 0);
3052
Create_func_weekofyear Create_func_weekofyear::s_singleton;
3055
Create_func_weekofyear::create(THD *thd, Item *arg1)
3057
Item *i1= new (thd->mem_root) Item_int((char*) "0", 3, 1);
3058
return new (thd->mem_root) Item_func_week(arg1, i1);
3062
Create_func_year_week Create_func_year_week::s_singleton;
3065
Create_func_year_week::create_native(THD *thd, LEX_STRING name,
3066
List<Item> *item_list)
3071
if (item_list != NULL)
3072
arg_count= item_list->elements;
3074
switch (arg_count) {
3077
Item *param_1= item_list->pop();
3078
Item *i0= new (thd->mem_root) Item_int((char*) "0", 0, 1);
3079
func= new (thd->mem_root) Item_func_yearweek(param_1, i0);
3084
Item *param_1= item_list->pop();
3085
Item *param_2= item_list->pop();
3086
func= new (thd->mem_root) Item_func_yearweek(param_1, param_2);
3091
my_error(ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT, MYF(0), name.str);
1960
3100
struct Native_func_registry
1975
3115
static Native_func_registry func_array[] =
3117
{ { C_STRING_WITH_LEN("ABS") }, BUILDER(Create_func_abs)},
3118
{ { C_STRING_WITH_LEN("ACOS") }, BUILDER(Create_func_acos)},
3119
{ { C_STRING_WITH_LEN("ADDTIME") }, BUILDER(Create_func_addtime)},
3120
{ { C_STRING_WITH_LEN("ASIN") }, BUILDER(Create_func_asin)},
3121
{ { C_STRING_WITH_LEN("ATAN") }, BUILDER(Create_func_atan)},
3122
{ { C_STRING_WITH_LEN("ATAN2") }, BUILDER(Create_func_atan)},
3123
{ { C_STRING_WITH_LEN("BENCHMARK") }, BUILDER(Create_func_benchmark)},
1977
3124
{ { C_STRING_WITH_LEN("BIN") }, BUILDER(Create_func_bin)},
3125
{ { C_STRING_WITH_LEN("BIT_COUNT") }, BUILDER(Create_func_bit_count)},
3126
{ { C_STRING_WITH_LEN("BIT_LENGTH") }, BUILDER(Create_func_bit_length)},
3127
{ { C_STRING_WITH_LEN("CEIL") }, BUILDER(Create_func_ceiling)},
3128
{ { C_STRING_WITH_LEN("CEILING") }, BUILDER(Create_func_ceiling)},
3129
{ { C_STRING_WITH_LEN("CHARACTER_LENGTH") }, BUILDER(Create_func_char_length)},
3130
{ { C_STRING_WITH_LEN("CHAR_LENGTH") }, BUILDER(Create_func_char_length)},
3131
{ { C_STRING_WITH_LEN("COERCIBILITY") }, BUILDER(Create_func_coercibility)},
1978
3132
{ { C_STRING_WITH_LEN("CONCAT") }, BUILDER(Create_func_concat)},
1979
3133
{ { C_STRING_WITH_LEN("CONCAT_WS") }, BUILDER(Create_func_concat_ws)},
3134
{ { C_STRING_WITH_LEN("CONNECTION_ID") }, BUILDER(Create_func_connection_id)},
1980
3135
{ { C_STRING_WITH_LEN("CONV") }, BUILDER(Create_func_conv)},
3136
{ { C_STRING_WITH_LEN("COS") }, BUILDER(Create_func_cos)},
1981
3137
{ { C_STRING_WITH_LEN("COT") }, BUILDER(Create_func_cot)},
3138
{ { C_STRING_WITH_LEN("CRC32") }, BUILDER(Create_func_crc32)},
1982
3139
{ { C_STRING_WITH_LEN("DATEDIFF") }, BUILDER(Create_func_datediff)},
1983
3140
{ { C_STRING_WITH_LEN("DATE_FORMAT") }, BUILDER(Create_func_date_format)},
1984
3141
{ { C_STRING_WITH_LEN("DAYNAME") }, BUILDER(Create_func_dayname)},
1985
3142
{ { C_STRING_WITH_LEN("DAYOFMONTH") }, BUILDER(Create_func_dayofmonth)},
1986
3143
{ { C_STRING_WITH_LEN("DAYOFWEEK") }, BUILDER(Create_func_dayofweek)},
1987
3144
{ { C_STRING_WITH_LEN("DAYOFYEAR") }, BUILDER(Create_func_dayofyear)},
3145
{ { C_STRING_WITH_LEN("DECODE") }, BUILDER(Create_func_decode)},
1988
3146
{ { C_STRING_WITH_LEN("DEGREES") }, BUILDER(Create_func_degrees)},
3147
{ { C_STRING_WITH_LEN("ELT") }, BUILDER(Create_func_elt)},
3148
{ { C_STRING_WITH_LEN("ENCODE") }, BUILDER(Create_func_encode)},
3149
{ { C_STRING_WITH_LEN("ENCRYPT") }, BUILDER(Create_func_encrypt)},
3150
{ { C_STRING_WITH_LEN("EXP") }, BUILDER(Create_func_exp)},
1989
3151
{ { C_STRING_WITH_LEN("EXPORT_SET") }, BUILDER(Create_func_export_set)},
1990
3152
{ { C_STRING_WITH_LEN("FIELD") }, BUILDER(Create_func_field)},
1991
3153
{ { C_STRING_WITH_LEN("FIND_IN_SET") }, BUILDER(Create_func_find_in_set)},
3154
{ { C_STRING_WITH_LEN("FLOOR") }, BUILDER(Create_func_floor)},
3155
{ { C_STRING_WITH_LEN("FORMAT") }, BUILDER(Create_func_format)},
1992
3156
{ { C_STRING_WITH_LEN("FOUND_ROWS") }, BUILDER(Create_func_found_rows)},
1993
3157
{ { C_STRING_WITH_LEN("FROM_DAYS") }, BUILDER(Create_func_from_days)},
1994
3158
{ { C_STRING_WITH_LEN("FROM_UNIXTIME") }, BUILDER(Create_func_from_unixtime)},
1995
3159
{ { C_STRING_WITH_LEN("GREATEST") }, BUILDER(Create_func_greatest)},
3160
{ { C_STRING_WITH_LEN("HEX") }, BUILDER(Create_func_hex)},
1996
3161
{ { C_STRING_WITH_LEN("IFNULL") }, BUILDER(Create_func_ifnull)},
1997
3162
{ { C_STRING_WITH_LEN("INSTR") }, BUILDER(Create_func_instr)},
1998
3163
{ { C_STRING_WITH_LEN("ISNULL") }, BUILDER(Create_func_isnull)},
2000
3165
{ { C_STRING_WITH_LEN("LAST_INSERT_ID") }, BUILDER(Create_func_last_insert_id)},
2001
3166
{ { C_STRING_WITH_LEN("LCASE") }, BUILDER(Create_func_lcase)},
2002
3167
{ { C_STRING_WITH_LEN("LEAST") }, BUILDER(Create_func_least)},
3168
{ { C_STRING_WITH_LEN("LENGTH") }, BUILDER(Create_func_length)},
3169
{ { C_STRING_WITH_LEN("LN") }, BUILDER(Create_func_ln)},
2003
3170
{ { C_STRING_WITH_LEN("LOAD_FILE") }, BUILDER(Create_func_load_file)},
2004
3171
{ { C_STRING_WITH_LEN("LOCATE") }, BUILDER(Create_func_locate)},
3172
{ { C_STRING_WITH_LEN("LOG") }, BUILDER(Create_func_log)},
3173
{ { C_STRING_WITH_LEN("LOG10") }, BUILDER(Create_func_log10)},
3174
{ { C_STRING_WITH_LEN("LOG2") }, BUILDER(Create_func_log2)},
2005
3175
{ { C_STRING_WITH_LEN("LOWER") }, BUILDER(Create_func_lcase)},
2006
3176
{ { C_STRING_WITH_LEN("LPAD") }, BUILDER(Create_func_lpad)},
2007
3177
{ { C_STRING_WITH_LEN("LTRIM") }, BUILDER(Create_func_ltrim)},
2008
3178
{ { C_STRING_WITH_LEN("MAKEDATE") }, BUILDER(Create_func_makedate)},
3179
{ { C_STRING_WITH_LEN("MAKETIME") }, BUILDER(Create_func_maketime)},
2009
3180
{ { C_STRING_WITH_LEN("MAKE_SET") }, BUILDER(Create_func_make_set)},
3181
{ { C_STRING_WITH_LEN("MASTER_POS_WAIT") }, BUILDER(Create_func_master_pos_wait)},
3182
{ { C_STRING_WITH_LEN("MD5") }, BUILDER(Create_func_md5)},
2010
3183
{ { C_STRING_WITH_LEN("MONTHNAME") }, BUILDER(Create_func_monthname)},
2011
3184
{ { C_STRING_WITH_LEN("NULLIF") }, BUILDER(Create_func_nullif)},
2012
3185
{ { C_STRING_WITH_LEN("OCT") }, BUILDER(Create_func_oct)},
3186
{ { C_STRING_WITH_LEN("OCTET_LENGTH") }, BUILDER(Create_func_length)},
3187
{ { C_STRING_WITH_LEN("ORD") }, BUILDER(Create_func_ord)},
2013
3188
{ { C_STRING_WITH_LEN("PERIOD_ADD") }, BUILDER(Create_func_period_add)},
2014
3189
{ { C_STRING_WITH_LEN("PERIOD_DIFF") }, BUILDER(Create_func_period_diff)},
2015
3190
{ { C_STRING_WITH_LEN("PI") }, BUILDER(Create_func_pi)},
3191
{ { C_STRING_WITH_LEN("POW") }, BUILDER(Create_func_pow)},
3192
{ { C_STRING_WITH_LEN("POWER") }, BUILDER(Create_func_pow)},
3193
{ { C_STRING_WITH_LEN("QUOTE") }, BUILDER(Create_func_quote)},
2016
3194
{ { C_STRING_WITH_LEN("RADIANS") }, BUILDER(Create_func_radians)},
3195
{ { C_STRING_WITH_LEN("RAND") }, BUILDER(Create_func_rand)},
2017
3196
{ { C_STRING_WITH_LEN("ROUND") }, BUILDER(Create_func_round)},
2018
3197
{ { C_STRING_WITH_LEN("ROW_COUNT") }, BUILDER(Create_func_row_count)},
2019
3198
{ { C_STRING_WITH_LEN("RPAD") }, BUILDER(Create_func_rpad)},
2020
3199
{ { C_STRING_WITH_LEN("RTRIM") }, BUILDER(Create_func_rtrim)},
3200
{ { C_STRING_WITH_LEN("SEC_TO_TIME") }, BUILDER(Create_func_sec_to_time)},
2021
3201
{ { C_STRING_WITH_LEN("SIGN") }, BUILDER(Create_func_sign)},
3202
{ { C_STRING_WITH_LEN("SIN") }, BUILDER(Create_func_sin)},
2022
3203
{ { C_STRING_WITH_LEN("SPACE") }, BUILDER(Create_func_space)},
3204
{ { C_STRING_WITH_LEN("SQRT") }, BUILDER(Create_func_sqrt)},
2023
3205
{ { C_STRING_WITH_LEN("STRCMP") }, BUILDER(Create_func_strcmp)},
3206
{ { C_STRING_WITH_LEN("STR_TO_DATE") }, BUILDER(Create_func_str_to_date)},
3207
{ { C_STRING_WITH_LEN("SUBSTRING_INDEX") }, BUILDER(Create_func_substr_index)},
3208
{ { C_STRING_WITH_LEN("SUBTIME") }, BUILDER(Create_func_subtime)},
2024
3209
{ { C_STRING_WITH_LEN("TAN") }, BUILDER(Create_func_tan)},
3210
{ { C_STRING_WITH_LEN("TIMEDIFF") }, BUILDER(Create_func_timediff)},
2025
3211
{ { C_STRING_WITH_LEN("TIME_FORMAT") }, BUILDER(Create_func_time_format)},
3212
{ { C_STRING_WITH_LEN("TIME_TO_SEC") }, BUILDER(Create_func_time_to_sec)},
2026
3213
{ { C_STRING_WITH_LEN("TO_DAYS") }, BUILDER(Create_func_to_days)},
2027
3214
{ { C_STRING_WITH_LEN("UCASE") }, BUILDER(Create_func_ucase)},
3215
{ { C_STRING_WITH_LEN("UNHEX") }, BUILDER(Create_func_unhex)},
2028
3216
{ { C_STRING_WITH_LEN("UNIX_TIMESTAMP") }, BUILDER(Create_func_unix_timestamp)},
2029
3217
{ { C_STRING_WITH_LEN("UPPER") }, BUILDER(Create_func_ucase)},
3218
{ { C_STRING_WITH_LEN("UUID") }, BUILDER(Create_func_uuid)},
3219
{ { C_STRING_WITH_LEN("VERSION") }, BUILDER(Create_func_version)},
2030
3220
{ { C_STRING_WITH_LEN("WEEKDAY") }, BUILDER(Create_func_weekday)},
3221
{ { C_STRING_WITH_LEN("WEEKOFYEAR") }, BUILDER(Create_func_weekofyear)},
3222
{ { C_STRING_WITH_LEN("YEARWEEK") }, BUILDER(Create_func_year_week)},
2032
3224
{ {0, 0}, NULL}
3227
static HASH native_functions_hash;
3230
get_native_fct_hash_key(const uchar *buff, size_t *length,
3231
my_bool /* unused */)
3233
Native_func_registry *func= (Native_func_registry*) buff;
3234
*length= func->name.length;
3235
return (uchar*) func->name.str;
2036
3239
Load the hash table for native functions.
2037
3240
Note: this code is not thread safe, and is intended to be used at server
2041
3244
int item_create_init()
2045
3246
Native_func_registry *func;
3248
if (hash_init(& native_functions_hash,
3249
system_charset_info,
3250
array_elements(func_array),
3253
(hash_get_key) get_native_fct_hash_key,
3254
NULL, /* Nothing to free */
2046
3258
for (func= func_array; func->builder != NULL; func++)
2048
func_name.assign(func->name.str, func->name.length);
2050
FunctionContainer::getMap()[func_name]= func->builder;
3260
if (my_hash_insert(& native_functions_hash, (uchar*) func))
3268
Empty the hash table for native functions.
3269
Note: this code is not thread safe, and is intended to be used at server
3270
shutdown only (after thread requests have been executed).
3273
void item_create_cleanup()
3275
hash_free(& native_functions_hash);
2058
find_native_function_builder(LEX_STRING name)
3280
find_native_function_builder(THD *thd __attribute__((__unused__)),
3283
Native_func_registry *func;
2060
3284
Create_func *builder= NULL;
2062
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())
3287
func= (Native_func_registry*) hash_search(& native_functions_hash,
2069
builder= (*func_iter).second;
3293
builder= func->builder;
2072
3296
return builder;
2077
create_func_char_cast(Session *session, Item *a, int len, const CHARSET_INFO * const cs)
3301
create_func_char_cast(THD *thd, Item *a, int len, CHARSET_INFO *cs)
2079
const CHARSET_INFO * const real_cs= (cs ? cs : session->variables.getCollation());
2080
return new (session->mem_root) Item_char_typecast(a, len, real_cs);
3303
CHARSET_INFO *real_cs= (cs ? cs : thd->variables.collation_connection);
3304
return new (thd->mem_root) Item_char_typecast(a, len, real_cs);
2085
create_func_cast(Session *session, Item *a, Cast_target cast_type,
3309
create_func_cast(THD *thd, Item *a, Cast_target cast_type,
2086
3310
const char *c_len, const char *c_dec,
2087
const CHARSET_INFO * const cs)
2093
3317
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
3318
case ITEM_CAST_BINARY:
2103
res= new (session->mem_root) Item_func_binary(a);
2106
case ITEM_CAST_BOOLEAN:
2107
res= new (session->mem_root) function::cast::Boolean(a);
3319
res= new (thd->mem_root) Item_func_binary(a);
3321
case ITEM_CAST_SIGNED_INT:
3322
res= new (thd->mem_root) Item_func_signed(a);
3324
case ITEM_CAST_UNSIGNED_INT:
3325
res= new (thd->mem_root) Item_func_unsigned(a);
3327
case ITEM_CAST_DATE:
3328
res= new (thd->mem_root) Item_date_typecast(a);
2110
3330
case ITEM_CAST_TIME:
2111
res= new (session->mem_root) function::cast::Time(a);
2114
case ITEM_CAST_DATE:
2115
res= new (session->mem_root) Item_date_typecast(a);
3331
res= new (thd->mem_root) Item_time_typecast(a);
2118
3333
case ITEM_CAST_DATETIME:
2119
res= new (session->mem_root) Item_datetime_typecast(a);
3334
res= new (thd->mem_root) Item_datetime_typecast(a);
2122
3336
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);
3338
len= c_len ? atoi(c_len) : 0;
3339
dec= c_dec ? atoi(c_dec) : 0;
3340
my_decimal_trim(&len, &dec);
3343
my_error(ER_M_BIGGER_THAN_D, MYF(0), "");
3346
if (len > DECIMAL_MAX_PRECISION)
3348
my_error(ER_TOO_BIG_PRECISION, MYF(0), len, a->name,
3349
DECIMAL_MAX_PRECISION);
3352
if (dec > DECIMAL_MAX_SCALE)
3354
my_error(ER_TOO_BIG_SCALE, MYF(0), dec, a->name,
3358
res= new (thd->mem_root) Item_decimal_typecast(a, len, dec);
2147
3361
case ITEM_CAST_CHAR:
2149
len= c_len ? atoi(c_len) : -1;
2150
res= create_func_char_cast(session, a, len, cs);
3363
len= c_len ? atoi(c_len) : -1;
3364
res= create_func_char_cast(thd, a, len, cs);
2158
} /* namespace drizzled */