1
/* Copyright (C) 2000-2003 MySQL AB
3
This program is free software; you can redistribute it and/or modify
4
it under the terms of the GNU General Public License as published by
5
the Free Software Foundation; version 2 of the License.
7
This program is distributed in the hope that it will be useful,
8
but WITHOUT ANY WARRANTY; without even the implied warranty of
9
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
10
GNU General Public License for more details.
12
You should have received a copy of the GNU General Public License
13
along with this program; if not, write to the Free Software
14
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
20
Functions to create an item. Used by sql_yac.yy
23
#include "mysql_priv.h"
24
#include "item_create.h"
27
=============================================================================
29
=============================================================================
33
Adapter for native functions with a variable number of arguments.
34
The main use of this class is to discard the following calls:
35
<code>foo(expr1 AS name1, expr2 AS name2, ...)</code>
36
which are syntactically correct (the syntax can refer to a UDF),
37
but semantically invalid for native functions.
40
class Create_native_func : public Create_func
43
virtual Item *create(THD *thd, LEX_STRING name, List<Item> *item_list);
46
Builder method, with no arguments.
47
@param thd The current thread
48
@param name The native function name
49
@param item_list The function parameters, none of which are named
50
@return An item representing the function call
52
virtual Item *create_native(THD *thd, LEX_STRING name,
53
List<Item> *item_list) = 0;
57
Create_native_func() {}
59
virtual ~Create_native_func() {}
64
Adapter for functions that takes exactly zero arguments.
67
class Create_func_arg0 : public Create_func
70
virtual Item *create(THD *thd, LEX_STRING name, List<Item> *item_list);
73
Builder method, with no arguments.
74
@param thd The current thread
75
@return An item representing the function call
77
virtual Item *create(THD *thd) = 0;
83
virtual ~Create_func_arg0() {}
88
Adapter for functions that takes exactly one argument.
91
class Create_func_arg1 : public Create_func
94
virtual Item *create(THD *thd, LEX_STRING name, List<Item> *item_list);
97
Builder method, with one argument.
98
@param thd The current thread
99
@param arg1 The first argument of the function
100
@return An item representing the function call
102
virtual Item *create(THD *thd, Item *arg1) = 0;
106
Create_func_arg1() {}
108
virtual ~Create_func_arg1() {}
113
Adapter for functions that takes exactly two arguments.
116
class Create_func_arg2 : public Create_func
119
virtual Item *create(THD *thd, LEX_STRING name, List<Item> *item_list);
122
Builder method, with two arguments.
123
@param thd The current thread
124
@param arg1 The first argument of the function
125
@param arg2 The second argument of the function
126
@return An item representing the function call
128
virtual Item *create(THD *thd, Item *arg1, Item *arg2) = 0;
132
Create_func_arg2() {}
134
virtual ~Create_func_arg2() {}
139
Adapter for functions that takes exactly three arguments.
142
class Create_func_arg3 : public Create_func
145
virtual Item *create(THD *thd, LEX_STRING name, List<Item> *item_list);
148
Builder method, with three arguments.
149
@param thd The current thread
150
@param arg1 The first argument of the function
151
@param arg2 The second argument of the function
152
@param arg3 The third argument of the function
153
@return An item representing the function call
155
virtual Item *create(THD *thd, Item *arg1, Item *arg2, Item *arg3) = 0;
159
Create_func_arg3() {}
161
virtual ~Create_func_arg3() {}
166
Function builder for Stored Functions.
170
Concrete functions builders (native functions).
171
Please keep this list sorted in alphabetical order,
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() {}
253
class Create_func_bin : public Create_func_arg1
256
virtual Item *create(THD *thd, Item *arg1);
258
static Create_func_bin s_singleton;
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() {}
331
class Create_func_concat : public Create_native_func
334
virtual Item *create_native(THD *thd, LEX_STRING name, List<Item> *item_list);
336
static Create_func_concat s_singleton;
339
Create_func_concat() {}
340
virtual ~Create_func_concat() {}
344
class Create_func_concat_ws : public Create_native_func
347
virtual Item *create_native(THD *thd, LEX_STRING name, List<Item> *item_list);
349
static Create_func_concat_ws s_singleton;
352
Create_func_concat_ws() {}
353
virtual ~Create_func_concat_ws() {}
357
class Create_func_connection_id : public Create_func_arg0
360
virtual Item *create(THD *thd);
362
static Create_func_connection_id s_singleton;
365
Create_func_connection_id() {}
366
virtual ~Create_func_connection_id() {}
370
class Create_func_conv : public Create_func_arg3
373
virtual Item *create(THD *thd, Item *arg1, Item *arg2, Item *arg3);
375
static Create_func_conv s_singleton;
378
Create_func_conv() {}
379
virtual ~Create_func_conv() {}
383
class Create_func_convert_tz : public Create_func_arg3
386
virtual Item *create(THD *thd, Item *arg1, Item *arg2, Item *arg3);
388
static Create_func_convert_tz s_singleton;
391
Create_func_convert_tz() {}
392
virtual ~Create_func_convert_tz() {}
396
class Create_func_cos : public Create_func_arg1
399
virtual Item *create(THD *thd, Item *arg1);
401
static Create_func_cos s_singleton;
405
virtual ~Create_func_cos() {}
409
class Create_func_cot : public Create_func_arg1
412
virtual Item *create(THD *thd, Item *arg1);
414
static Create_func_cot s_singleton;
418
virtual ~Create_func_cot() {}
422
class Create_func_crc32 : public Create_func_arg1
425
virtual Item *create(THD *thd, Item *arg1);
427
static Create_func_crc32 s_singleton;
430
Create_func_crc32() {}
431
virtual ~Create_func_crc32() {}
435
class Create_func_date_format : public Create_func_arg2
438
virtual Item *create(THD *thd, Item *arg1, Item *arg2);
440
static Create_func_date_format s_singleton;
443
Create_func_date_format() {}
444
virtual ~Create_func_date_format() {}
448
class Create_func_datediff : public Create_func_arg2
451
virtual Item *create(THD *thd, Item *arg1, Item *arg2);
453
static Create_func_datediff s_singleton;
456
Create_func_datediff() {}
457
virtual ~Create_func_datediff() {}
461
class Create_func_dayname : public Create_func_arg1
464
virtual Item *create(THD *thd, Item *arg1);
466
static Create_func_dayname s_singleton;
469
Create_func_dayname() {}
470
virtual ~Create_func_dayname() {}
474
class Create_func_dayofmonth : public Create_func_arg1
477
virtual Item *create(THD *thd, Item *arg1);
479
static Create_func_dayofmonth s_singleton;
482
Create_func_dayofmonth() {}
483
virtual ~Create_func_dayofmonth() {}
487
class Create_func_dayofweek : public Create_func_arg1
490
virtual Item *create(THD *thd, Item *arg1);
492
static Create_func_dayofweek s_singleton;
495
Create_func_dayofweek() {}
496
virtual ~Create_func_dayofweek() {}
500
class Create_func_dayofyear : public Create_func_arg1
503
virtual Item *create(THD *thd, Item *arg1);
505
static Create_func_dayofyear s_singleton;
508
Create_func_dayofyear() {}
509
virtual ~Create_func_dayofyear() {}
513
class Create_func_decode : public Create_func_arg2
516
virtual Item *create(THD *thd, Item *arg1, Item *arg2);
518
static Create_func_decode s_singleton;
521
Create_func_decode() {}
522
virtual ~Create_func_decode() {}
526
class Create_func_degrees : public Create_func_arg1
529
virtual Item *create(THD *thd, Item *arg1);
531
static Create_func_degrees s_singleton;
534
Create_func_degrees() {}
535
virtual ~Create_func_degrees() {}
539
class Create_func_elt : public Create_native_func
542
virtual Item *create_native(THD *thd, LEX_STRING name, List<Item> *item_list);
544
static Create_func_elt s_singleton;
548
virtual ~Create_func_elt() {}
552
class Create_func_encode : public Create_func_arg2
555
virtual Item *create(THD *thd, Item *arg1, Item *arg2);
557
static Create_func_encode s_singleton;
560
Create_func_encode() {}
561
virtual ~Create_func_encode() {}
565
class Create_func_encrypt : public Create_native_func
568
virtual Item *create_native(THD *thd, LEX_STRING name, List<Item> *item_list);
570
static Create_func_encrypt s_singleton;
573
Create_func_encrypt() {}
574
virtual ~Create_func_encrypt() {}
578
class Create_func_exp : public Create_func_arg1
581
virtual Item *create(THD *thd, Item *arg1);
583
static Create_func_exp s_singleton;
587
virtual ~Create_func_exp() {}
591
class Create_func_export_set : public Create_native_func
594
virtual Item *create_native(THD *thd, LEX_STRING name, List<Item> *item_list);
596
static Create_func_export_set s_singleton;
599
Create_func_export_set() {}
600
virtual ~Create_func_export_set() {}
604
class Create_func_field : public Create_native_func
607
virtual Item *create_native(THD *thd, LEX_STRING name, List<Item> *item_list);
609
static Create_func_field s_singleton;
612
Create_func_field() {}
613
virtual ~Create_func_field() {}
617
class Create_func_find_in_set : public Create_func_arg2
620
virtual Item *create(THD *thd, Item *arg1, Item *arg2);
622
static Create_func_find_in_set s_singleton;
625
Create_func_find_in_set() {}
626
virtual ~Create_func_find_in_set() {}
630
class Create_func_floor : public Create_func_arg1
633
virtual Item *create(THD *thd, Item *arg1);
635
static Create_func_floor s_singleton;
638
Create_func_floor() {}
639
virtual ~Create_func_floor() {}
643
class Create_func_format : public Create_func_arg2
646
virtual Item *create(THD *thd, Item *arg1, Item *arg2);
648
static Create_func_format s_singleton;
651
Create_func_format() {}
652
virtual ~Create_func_format() {}
656
class Create_func_found_rows : public Create_func_arg0
659
virtual Item *create(THD *thd);
661
static Create_func_found_rows s_singleton;
664
Create_func_found_rows() {}
665
virtual ~Create_func_found_rows() {}
669
class Create_func_from_days : public Create_func_arg1
672
virtual Item *create(THD *thd, Item *arg1);
674
static Create_func_from_days s_singleton;
677
Create_func_from_days() {}
678
virtual ~Create_func_from_days() {}
682
class Create_func_from_unixtime : public Create_native_func
685
virtual Item *create_native(THD *thd, LEX_STRING name, List<Item> *item_list);
687
static Create_func_from_unixtime s_singleton;
690
Create_func_from_unixtime() {}
691
virtual ~Create_func_from_unixtime() {}
695
class Create_func_greatest : public Create_native_func
698
virtual Item *create_native(THD *thd, LEX_STRING name, List<Item> *item_list);
700
static Create_func_greatest s_singleton;
703
Create_func_greatest() {}
704
virtual ~Create_func_greatest() {}
708
class Create_func_hex : public Create_func_arg1
711
virtual Item *create(THD *thd, Item *arg1);
713
static Create_func_hex s_singleton;
717
virtual ~Create_func_hex() {}
721
class Create_func_ifnull : public Create_func_arg2
724
virtual Item *create(THD *thd, Item *arg1, Item *arg2);
726
static Create_func_ifnull s_singleton;
729
Create_func_ifnull() {}
730
virtual ~Create_func_ifnull() {}
734
class Create_func_instr : public Create_func_arg2
737
virtual Item *create(THD *thd, Item *arg1, Item *arg2);
739
static Create_func_instr s_singleton;
742
Create_func_instr() {}
743
virtual ~Create_func_instr() {}
747
class Create_func_isnull : public Create_func_arg1
750
virtual Item *create(THD *thd, Item *arg1);
752
static Create_func_isnull s_singleton;
755
Create_func_isnull() {}
756
virtual ~Create_func_isnull() {}
760
class Create_func_last_day : public Create_func_arg1
763
virtual Item *create(THD *thd, Item *arg1);
765
static Create_func_last_day s_singleton;
768
Create_func_last_day() {}
769
virtual ~Create_func_last_day() {}
773
class Create_func_last_insert_id : public Create_native_func
776
virtual Item *create_native(THD *thd, LEX_STRING name, List<Item> *item_list);
778
static Create_func_last_insert_id s_singleton;
781
Create_func_last_insert_id() {}
782
virtual ~Create_func_last_insert_id() {}
786
class Create_func_lcase : public Create_func_arg1
789
virtual Item *create(THD *thd, Item *arg1);
791
static Create_func_lcase s_singleton;
794
Create_func_lcase() {}
795
virtual ~Create_func_lcase() {}
799
class Create_func_least : public Create_native_func
802
virtual Item *create_native(THD *thd, LEX_STRING name, List<Item> *item_list);
804
static Create_func_least s_singleton;
807
Create_func_least() {}
808
virtual ~Create_func_least() {}
812
class Create_func_length : public Create_func_arg1
815
virtual Item *create(THD *thd, Item *arg1);
817
static Create_func_length s_singleton;
820
Create_func_length() {}
821
virtual ~Create_func_length() {}
825
class Create_func_ln : public Create_func_arg1
828
virtual Item *create(THD *thd, Item *arg1);
830
static Create_func_ln s_singleton;
834
virtual ~Create_func_ln() {}
838
class Create_func_load_file : public Create_func_arg1
841
virtual Item *create(THD *thd, Item *arg1);
843
static Create_func_load_file s_singleton;
846
Create_func_load_file() {}
847
virtual ~Create_func_load_file() {}
851
class Create_func_locate : public Create_native_func
854
virtual Item *create_native(THD *thd, LEX_STRING name, List<Item> *item_list);
856
static Create_func_locate s_singleton;
859
Create_func_locate() {}
860
virtual ~Create_func_locate() {}
864
class Create_func_log : public Create_native_func
867
virtual Item *create_native(THD *thd, LEX_STRING name, List<Item> *item_list);
869
static Create_func_log s_singleton;
873
virtual ~Create_func_log() {}
877
class Create_func_log10 : public Create_func_arg1
880
virtual Item *create(THD *thd, Item *arg1);
882
static Create_func_log10 s_singleton;
885
Create_func_log10() {}
886
virtual ~Create_func_log10() {}
890
class Create_func_log2 : public Create_func_arg1
893
virtual Item *create(THD *thd, Item *arg1);
895
static Create_func_log2 s_singleton;
898
Create_func_log2() {}
899
virtual ~Create_func_log2() {}
903
class Create_func_lpad : public Create_func_arg3
906
virtual Item *create(THD *thd, Item *arg1, Item *arg2, Item *arg3);
908
static Create_func_lpad s_singleton;
911
Create_func_lpad() {}
912
virtual ~Create_func_lpad() {}
916
class Create_func_ltrim : public Create_func_arg1
919
virtual Item *create(THD *thd, Item *arg1);
921
static Create_func_ltrim s_singleton;
924
Create_func_ltrim() {}
925
virtual ~Create_func_ltrim() {}
929
class Create_func_makedate : public Create_func_arg2
932
virtual Item *create(THD *thd, Item *arg1, Item *arg2);
934
static Create_func_makedate s_singleton;
937
Create_func_makedate() {}
938
virtual ~Create_func_makedate() {}
942
class Create_func_maketime : public Create_func_arg3
945
virtual Item *create(THD *thd, Item *arg1, Item *arg2, Item *arg3);
947
static Create_func_maketime s_singleton;
950
Create_func_maketime() {}
951
virtual ~Create_func_maketime() {}
955
class Create_func_make_set : public Create_native_func
958
virtual Item *create_native(THD *thd, LEX_STRING name, List<Item> *item_list);
960
static Create_func_make_set s_singleton;
963
Create_func_make_set() {}
964
virtual ~Create_func_make_set() {}
968
class Create_func_master_pos_wait : public Create_native_func
971
virtual Item *create_native(THD *thd, LEX_STRING name, List<Item> *item_list);
973
static Create_func_master_pos_wait s_singleton;
976
Create_func_master_pos_wait() {}
977
virtual ~Create_func_master_pos_wait() {}
981
class Create_func_md5 : public Create_func_arg1
984
virtual Item *create(THD *thd, Item *arg1);
986
static Create_func_md5 s_singleton;
990
virtual ~Create_func_md5() {}
994
class Create_func_monthname : public Create_func_arg1
997
virtual Item *create(THD *thd, Item *arg1);
999
static Create_func_monthname s_singleton;
1002
Create_func_monthname() {}
1003
virtual ~Create_func_monthname() {}
1007
class Create_func_name_const : public Create_func_arg2
1010
virtual Item *create(THD *thd, Item *arg1, Item *arg2);
1012
static Create_func_name_const s_singleton;
1015
Create_func_name_const() {}
1016
virtual ~Create_func_name_const() {}
1020
class Create_func_nullif : public Create_func_arg2
1023
virtual Item *create(THD *thd, Item *arg1, Item *arg2);
1025
static Create_func_nullif s_singleton;
1028
Create_func_nullif() {}
1029
virtual ~Create_func_nullif() {}
1033
class Create_func_oct : public Create_func_arg1
1036
virtual Item *create(THD *thd, Item *arg1);
1038
static Create_func_oct s_singleton;
1041
Create_func_oct() {}
1042
virtual ~Create_func_oct() {}
1046
class Create_func_ord : public Create_func_arg1
1049
virtual Item *create(THD *thd, Item *arg1);
1051
static Create_func_ord s_singleton;
1054
Create_func_ord() {}
1055
virtual ~Create_func_ord() {}
1059
class Create_func_period_add : public Create_func_arg2
1062
virtual Item *create(THD *thd, Item *arg1, Item *arg2);
1064
static Create_func_period_add s_singleton;
1067
Create_func_period_add() {}
1068
virtual ~Create_func_period_add() {}
1072
class Create_func_period_diff : public Create_func_arg2
1075
virtual Item *create(THD *thd, Item *arg1, Item *arg2);
1077
static Create_func_period_diff s_singleton;
1080
Create_func_period_diff() {}
1081
virtual ~Create_func_period_diff() {}
1085
class Create_func_pi : public Create_func_arg0
1088
virtual Item *create(THD *thd);
1090
static Create_func_pi s_singleton;
1094
virtual ~Create_func_pi() {}
1098
class Create_func_pow : public Create_func_arg2
1101
virtual Item *create(THD *thd, Item *arg1, Item *arg2);
1103
static Create_func_pow s_singleton;
1106
Create_func_pow() {}
1107
virtual ~Create_func_pow() {}
1111
class Create_func_quote : public Create_func_arg1
1114
virtual Item *create(THD *thd, Item *arg1);
1116
static Create_func_quote s_singleton;
1119
Create_func_quote() {}
1120
virtual ~Create_func_quote() {}
1124
class Create_func_radians : public Create_func_arg1
1127
virtual Item *create(THD *thd, Item *arg1);
1129
static Create_func_radians s_singleton;
1132
Create_func_radians() {}
1133
virtual ~Create_func_radians() {}
1137
class Create_func_rand : public Create_native_func
1140
virtual Item *create_native(THD *thd, LEX_STRING name, List<Item> *item_list);
1142
static Create_func_rand s_singleton;
1145
Create_func_rand() {}
1146
virtual ~Create_func_rand() {}
1150
class Create_func_round : public Create_native_func
1153
virtual Item *create_native(THD *thd, LEX_STRING name, List<Item> *item_list);
1155
static Create_func_round s_singleton;
1158
Create_func_round() {}
1159
virtual ~Create_func_round() {}
1163
class Create_func_row_count : public Create_func_arg0
1166
virtual Item *create(THD *thd);
1168
static Create_func_row_count s_singleton;
1171
Create_func_row_count() {}
1172
virtual ~Create_func_row_count() {}
1176
class Create_func_rpad : public Create_func_arg3
1179
virtual Item *create(THD *thd, Item *arg1, Item *arg2, Item *arg3);
1181
static Create_func_rpad s_singleton;
1184
Create_func_rpad() {}
1185
virtual ~Create_func_rpad() {}
1189
class Create_func_rtrim : public Create_func_arg1
1192
virtual Item *create(THD *thd, Item *arg1);
1194
static Create_func_rtrim s_singleton;
1197
Create_func_rtrim() {}
1198
virtual ~Create_func_rtrim() {}
1202
class Create_func_sec_to_time : public Create_func_arg1
1205
virtual Item *create(THD *thd, Item *arg1);
1207
static Create_func_sec_to_time s_singleton;
1210
Create_func_sec_to_time() {}
1211
virtual ~Create_func_sec_to_time() {}
1215
class Create_func_sign : public Create_func_arg1
1218
virtual Item *create(THD *thd, Item *arg1);
1220
static Create_func_sign s_singleton;
1223
Create_func_sign() {}
1224
virtual ~Create_func_sign() {}
1228
class Create_func_sin : public Create_func_arg1
1231
virtual Item *create(THD *thd, Item *arg1);
1233
static Create_func_sin s_singleton;
1236
Create_func_sin() {}
1237
virtual ~Create_func_sin() {}
1241
class Create_func_space : public Create_func_arg1
1244
virtual Item *create(THD *thd, Item *arg1);
1246
static Create_func_space s_singleton;
1249
Create_func_space() {}
1250
virtual ~Create_func_space() {}
1254
class Create_func_sqrt : public Create_func_arg1
1257
virtual Item *create(THD *thd, Item *arg1);
1259
static Create_func_sqrt s_singleton;
1262
Create_func_sqrt() {}
1263
virtual ~Create_func_sqrt() {}
1267
class Create_func_str_to_date : public Create_func_arg2
1270
virtual Item *create(THD *thd, Item *arg1, Item *arg2);
1272
static Create_func_str_to_date s_singleton;
1275
Create_func_str_to_date() {}
1276
virtual ~Create_func_str_to_date() {}
1280
class Create_func_strcmp : public Create_func_arg2
1283
virtual Item *create(THD *thd, Item *arg1, Item *arg2);
1285
static Create_func_strcmp s_singleton;
1288
Create_func_strcmp() {}
1289
virtual ~Create_func_strcmp() {}
1293
class Create_func_substr_index : public Create_func_arg3
1296
virtual Item *create(THD *thd, Item *arg1, Item *arg2, Item *arg3);
1298
static Create_func_substr_index s_singleton;
1301
Create_func_substr_index() {}
1302
virtual ~Create_func_substr_index() {}
1306
class Create_func_subtime : public Create_func_arg2
1309
virtual Item *create(THD *thd, Item *arg1, Item *arg2);
1311
static Create_func_subtime s_singleton;
1314
Create_func_subtime() {}
1315
virtual ~Create_func_subtime() {}
1319
class Create_func_tan : public Create_func_arg1
1322
virtual Item *create(THD *thd, Item *arg1);
1324
static Create_func_tan s_singleton;
1327
Create_func_tan() {}
1328
virtual ~Create_func_tan() {}
1332
class Create_func_time_format : public Create_func_arg2
1335
virtual Item *create(THD *thd, Item *arg1, Item *arg2);
1337
static Create_func_time_format s_singleton;
1340
Create_func_time_format() {}
1341
virtual ~Create_func_time_format() {}
1345
class Create_func_time_to_sec : public Create_func_arg1
1348
virtual Item *create(THD *thd, Item *arg1);
1350
static Create_func_time_to_sec s_singleton;
1353
Create_func_time_to_sec() {}
1354
virtual ~Create_func_time_to_sec() {}
1358
class Create_func_timediff : public Create_func_arg2
1361
virtual Item *create(THD *thd, Item *arg1, Item *arg2);
1363
static Create_func_timediff s_singleton;
1366
Create_func_timediff() {}
1367
virtual ~Create_func_timediff() {}
1371
class Create_func_to_days : public Create_func_arg1
1374
virtual Item *create(THD *thd, Item *arg1);
1376
static Create_func_to_days s_singleton;
1379
Create_func_to_days() {}
1380
virtual ~Create_func_to_days() {}
1384
class Create_func_ucase : public Create_func_arg1
1387
virtual Item *create(THD *thd, Item *arg1);
1389
static Create_func_ucase s_singleton;
1392
Create_func_ucase() {}
1393
virtual ~Create_func_ucase() {}
1397
class Create_func_unhex : public Create_func_arg1
1400
virtual Item *create(THD *thd, Item *arg1);
1402
static Create_func_unhex s_singleton;
1405
Create_func_unhex() {}
1406
virtual ~Create_func_unhex() {}
1410
class Create_func_unix_timestamp : public Create_native_func
1413
virtual Item *create_native(THD *thd, LEX_STRING name, List<Item> *item_list);
1415
static Create_func_unix_timestamp s_singleton;
1418
Create_func_unix_timestamp() {}
1419
virtual ~Create_func_unix_timestamp() {}
1423
class Create_func_uuid : public Create_func_arg0
1426
virtual Item *create(THD *thd);
1428
static Create_func_uuid s_singleton;
1431
Create_func_uuid() {}
1432
virtual ~Create_func_uuid() {}
1436
class Create_func_uuid_short : public Create_func_arg0
1439
virtual Item *create(THD *thd);
1441
static Create_func_uuid_short s_singleton;
1444
Create_func_uuid_short() {}
1445
virtual ~Create_func_uuid_short() {}
1449
class Create_func_version : public Create_func_arg0
1452
virtual Item *create(THD *thd);
1454
static Create_func_version s_singleton;
1457
Create_func_version() {}
1458
virtual ~Create_func_version() {}
1462
class Create_func_weekday : public Create_func_arg1
1465
virtual Item *create(THD *thd, Item *arg1);
1467
static Create_func_weekday s_singleton;
1470
Create_func_weekday() {}
1471
virtual ~Create_func_weekday() {}
1475
class Create_func_weekofyear : public Create_func_arg1
1478
virtual Item *create(THD *thd, Item *arg1);
1480
static Create_func_weekofyear s_singleton;
1483
Create_func_weekofyear() {}
1484
virtual ~Create_func_weekofyear() {}
1488
class Create_func_year_week : public Create_native_func
1491
virtual Item *create_native(THD *thd, LEX_STRING name, List<Item> *item_list);
1493
static Create_func_year_week s_singleton;
1496
Create_func_year_week() {}
1497
virtual ~Create_func_year_week() {}
1502
=============================================================================
1504
=============================================================================
1508
Checks if there are named parameters in a parameter list.
1509
The syntax to name parameters in a function call is as follow:
1510
<code>foo(expr AS named, expr named, expr AS "named", expr "named")</code>
1511
@param params The parameter list, can be null
1512
@return true if one or more parameter is named
1514
static bool has_named_parameters(List<Item> *params)
1519
List_iterator<Item> it(*params);
1520
while ((param= it++))
1522
if (! param->is_autogenerated_name)
1532
Create_udf_func Create_udf_func::s_singleton;
1535
Create_udf_func::create(THD *thd, LEX_STRING name, List<Item> *item_list)
1537
udf_func *udf= find_udf(name.str, name.length);
1539
return create(thd, udf, item_list);
1544
Create_udf_func::create(THD *thd, udf_func *udf, List<Item> *item_list)
1549
if (item_list != NULL)
1550
arg_count= item_list->elements;
1552
thd->lex->set_stmt_unsafe();
1554
DBUG_ASSERT( (udf->type == UDFTYPE_FUNCTION)
1555
|| (udf->type == UDFTYPE_AGGREGATE));
1557
switch(udf->returns) {
1560
if (udf->type == UDFTYPE_FUNCTION)
1563
func= new (thd->mem_root) Item_func_udf_str(udf, *item_list);
1565
func= new (thd->mem_root) Item_func_udf_str(udf);
1570
func= new (thd->mem_root) Item_sum_udf_str(udf, *item_list);
1572
func= new (thd->mem_root) Item_sum_udf_str(udf);
1578
if (udf->type == UDFTYPE_FUNCTION)
1581
func= new (thd->mem_root) Item_func_udf_float(udf, *item_list);
1583
func= new (thd->mem_root) Item_func_udf_float(udf);
1588
func= new (thd->mem_root) Item_sum_udf_float(udf, *item_list);
1590
func= new (thd->mem_root) Item_sum_udf_float(udf);
1596
if (udf->type == UDFTYPE_FUNCTION)
1599
func= new (thd->mem_root) Item_func_udf_int(udf, *item_list);
1601
func= new (thd->mem_root) Item_func_udf_int(udf);
1606
func= new (thd->mem_root) Item_sum_udf_int(udf, *item_list);
1608
func= new (thd->mem_root) Item_sum_udf_int(udf);
1612
case DECIMAL_RESULT:
1614
if (udf->type == UDFTYPE_FUNCTION)
1617
func= new (thd->mem_root) Item_func_udf_decimal(udf, *item_list);
1619
func= new (thd->mem_root) Item_func_udf_decimal(udf);
1624
func= new (thd->mem_root) Item_sum_udf_decimal(udf, *item_list);
1626
func= new (thd->mem_root) Item_sum_udf_decimal(udf);
1632
my_error(ER_NOT_SUPPORTED_YET, MYF(0), "UDF return type");
1641
Create_native_func::create(THD *thd, LEX_STRING name, List<Item> *item_list)
1643
if (has_named_parameters(item_list))
1645
my_error(ER_WRONG_PARAMETERS_TO_NATIVE_FCT, MYF(0), name.str);
1649
return create_native(thd, name, item_list);
1654
Create_func_arg0::create(THD *thd, LEX_STRING name, List<Item> *item_list)
1658
if (item_list != NULL)
1659
arg_count= item_list->elements;
1663
my_error(ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT, MYF(0), name.str);
1672
Create_func_arg1::create(THD *thd, LEX_STRING name, List<Item> *item_list)
1677
arg_count= item_list->elements;
1681
my_error(ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT, MYF(0), name.str);
1685
Item *param_1= item_list->pop();
1687
if (! param_1->is_autogenerated_name)
1689
my_error(ER_WRONG_PARAMETERS_TO_NATIVE_FCT, MYF(0), name.str);
1693
return create(thd, param_1);
1698
Create_func_arg2::create(THD *thd, LEX_STRING name, List<Item> *item_list)
1703
arg_count= item_list->elements;
1707
my_error(ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT, MYF(0), name.str);
1711
Item *param_1= item_list->pop();
1712
Item *param_2= item_list->pop();
1714
if ( (! param_1->is_autogenerated_name)
1715
|| (! param_2->is_autogenerated_name))
1717
my_error(ER_WRONG_PARAMETERS_TO_NATIVE_FCT, MYF(0), name.str);
1721
return create(thd, param_1, param_2);
1726
Create_func_arg3::create(THD *thd, LEX_STRING name, List<Item> *item_list)
1731
arg_count= item_list->elements;
1735
my_error(ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT, MYF(0), name.str);
1739
Item *param_1= item_list->pop();
1740
Item *param_2= item_list->pop();
1741
Item *param_3= item_list->pop();
1743
if ( (! param_1->is_autogenerated_name)
1744
|| (! param_2->is_autogenerated_name)
1745
|| (! param_3->is_autogenerated_name))
1747
my_error(ER_WRONG_PARAMETERS_TO_NATIVE_FCT, MYF(0), name.str);
1751
return create(thd, param_1, param_2, param_3);
1755
Create_func_abs Create_func_abs::s_singleton;
1758
Create_func_abs::create(THD *thd, Item *arg1)
1760
return new (thd->mem_root) Item_func_abs(arg1);
1764
Create_func_acos Create_func_acos::s_singleton;
1767
Create_func_acos::create(THD *thd, Item *arg1)
1769
return new (thd->mem_root) Item_func_acos(arg1);
1773
Create_func_addtime Create_func_addtime::s_singleton;
1776
Create_func_addtime::create(THD *thd, Item *arg1, Item *arg2)
1778
return new (thd->mem_root) Item_func_add_time(arg1, arg2, 0, 0);
1782
Create_func_asin Create_func_asin::s_singleton;
1785
Create_func_asin::create(THD *thd, Item *arg1)
1787
return new (thd->mem_root) Item_func_asin(arg1);
1791
Create_func_atan Create_func_atan::s_singleton;
1794
Create_func_atan::create_native(THD *thd, LEX_STRING name,
1795
List<Item> *item_list)
1800
if (item_list != NULL)
1801
arg_count= item_list->elements;
1803
switch (arg_count) {
1806
Item *param_1= item_list->pop();
1807
func= new (thd->mem_root) Item_func_atan(param_1);
1812
Item *param_1= item_list->pop();
1813
Item *param_2= item_list->pop();
1814
func= new (thd->mem_root) Item_func_atan(param_1, param_2);
1819
my_error(ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT, MYF(0), name.str);
1828
Create_func_benchmark Create_func_benchmark::s_singleton;
1831
Create_func_benchmark::create(THD *thd, Item *arg1, Item *arg2)
1833
return new (thd->mem_root) Item_func_benchmark(arg1, arg2);
1837
Create_func_bin Create_func_bin::s_singleton;
1840
Create_func_bin::create(THD *thd, Item *arg1)
1842
Item *i10= new (thd->mem_root) Item_int((int32) 10,2);
1843
Item *i2= new (thd->mem_root) Item_int((int32) 2,1);
1844
return new (thd->mem_root) Item_func_conv(arg1, i10, i2);
1848
Create_func_bit_count Create_func_bit_count::s_singleton;
1851
Create_func_bit_count::create(THD *thd, Item *arg1)
1853
return new (thd->mem_root) Item_func_bit_count(arg1);
1857
Create_func_bit_length Create_func_bit_length::s_singleton;
1860
Create_func_bit_length::create(THD *thd, Item *arg1)
1862
return new (thd->mem_root) Item_func_bit_length(arg1);
1866
Create_func_ceiling Create_func_ceiling::s_singleton;
1869
Create_func_ceiling::create(THD *thd, Item *arg1)
1871
return new (thd->mem_root) Item_func_ceiling(arg1);
1875
Create_func_char_length Create_func_char_length::s_singleton;
1878
Create_func_char_length::create(THD *thd, Item *arg1)
1880
return new (thd->mem_root) Item_func_char_length(arg1);
1884
Create_func_coercibility Create_func_coercibility::s_singleton;
1887
Create_func_coercibility::create(THD *thd, Item *arg1)
1889
return new (thd->mem_root) Item_func_coercibility(arg1);
1893
Create_func_concat Create_func_concat::s_singleton;
1896
Create_func_concat::create_native(THD *thd, LEX_STRING name,
1897
List<Item> *item_list)
1901
if (item_list != NULL)
1902
arg_count= item_list->elements;
1906
my_error(ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT, MYF(0), name.str);
1910
return new (thd->mem_root) Item_func_concat(*item_list);
1914
Create_func_concat_ws Create_func_concat_ws::s_singleton;
1917
Create_func_concat_ws::create_native(THD *thd, LEX_STRING name,
1918
List<Item> *item_list)
1922
if (item_list != NULL)
1923
arg_count= item_list->elements;
1925
/* "WS" stands for "With Separator": this function takes 2+ arguments */
1928
my_error(ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT, MYF(0), name.str);
1932
return new (thd->mem_root) Item_func_concat_ws(*item_list);
1936
Create_func_connection_id Create_func_connection_id::s_singleton;
1939
Create_func_connection_id::create(THD *thd)
1941
return new (thd->mem_root) Item_func_connection_id();
1945
Create_func_conv Create_func_conv::s_singleton;
1948
Create_func_conv::create(THD *thd, Item *arg1, Item *arg2, Item *arg3)
1950
return new (thd->mem_root) Item_func_conv(arg1, arg2, arg3);
1954
Create_func_convert_tz Create_func_convert_tz::s_singleton;
1957
Create_func_convert_tz::create(THD *thd, Item *arg1, Item *arg2, Item *arg3)
1959
return new (thd->mem_root) Item_func_convert_tz(arg1, arg2, arg3);
1963
Create_func_cos Create_func_cos::s_singleton;
1966
Create_func_cos::create(THD *thd, Item *arg1)
1968
return new (thd->mem_root) Item_func_cos(arg1);
1972
Create_func_cot Create_func_cot::s_singleton;
1975
Create_func_cot::create(THD *thd, Item *arg1)
1977
Item *i1= new (thd->mem_root) Item_int((char*) "1", 1, 1);
1978
Item *i2= new (thd->mem_root) Item_func_tan(arg1);
1979
return new (thd->mem_root) Item_func_div(i1, i2);
1983
Create_func_crc32 Create_func_crc32::s_singleton;
1986
Create_func_crc32::create(THD *thd, Item *arg1)
1988
return new (thd->mem_root) Item_func_crc32(arg1);
1992
Create_func_date_format Create_func_date_format::s_singleton;
1995
Create_func_date_format::create(THD *thd, Item *arg1, Item *arg2)
1997
return new (thd->mem_root) Item_func_date_format(arg1, arg2, 0);
2001
Create_func_datediff Create_func_datediff::s_singleton;
2004
Create_func_datediff::create(THD *thd, Item *arg1, Item *arg2)
2006
Item *i1= new (thd->mem_root) Item_func_to_days(arg1);
2007
Item *i2= new (thd->mem_root) Item_func_to_days(arg2);
2009
return new (thd->mem_root) Item_func_minus(i1, i2);
2013
Create_func_dayname Create_func_dayname::s_singleton;
2016
Create_func_dayname::create(THD *thd, Item *arg1)
2018
return new (thd->mem_root) Item_func_dayname(arg1);
2022
Create_func_dayofmonth Create_func_dayofmonth::s_singleton;
2025
Create_func_dayofmonth::create(THD *thd, Item *arg1)
2027
return new (thd->mem_root) Item_func_dayofmonth(arg1);
2031
Create_func_dayofweek Create_func_dayofweek::s_singleton;
2034
Create_func_dayofweek::create(THD *thd, Item *arg1)
2036
return new (thd->mem_root) Item_func_weekday(arg1, 1);
2040
Create_func_dayofyear Create_func_dayofyear::s_singleton;
2043
Create_func_dayofyear::create(THD *thd, Item *arg1)
2045
return new (thd->mem_root) Item_func_dayofyear(arg1);
2049
Create_func_decode Create_func_decode::s_singleton;
2052
Create_func_decode::create(THD *thd, Item *arg1, Item *arg2)
2054
return new (thd->mem_root) Item_func_decode(arg1, arg2);
2058
Create_func_degrees Create_func_degrees::s_singleton;
2061
Create_func_degrees::create(THD *thd, Item *arg1)
2063
return new (thd->mem_root) Item_func_units((char*) "degrees", arg1,
2068
Create_func_elt Create_func_elt::s_singleton;
2071
Create_func_elt::create_native(THD *thd, LEX_STRING name,
2072
List<Item> *item_list)
2076
if (item_list != NULL)
2077
arg_count= item_list->elements;
2081
my_error(ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT, MYF(0), name.str);
2085
return new (thd->mem_root) Item_func_elt(*item_list);
2089
Create_func_encode Create_func_encode::s_singleton;
2092
Create_func_encode::create(THD *thd, Item *arg1, Item *arg2)
2094
return new (thd->mem_root) Item_func_encode(arg1, arg2);
2098
Create_func_encrypt Create_func_encrypt::s_singleton;
2101
Create_func_encrypt::create_native(THD *thd, LEX_STRING name,
2102
List<Item> *item_list)
2107
if (item_list != NULL)
2108
arg_count= item_list->elements;
2110
switch (arg_count) {
2113
Item *param_1= item_list->pop();
2114
func= new (thd->mem_root) Item_func_encrypt(param_1);
2119
Item *param_1= item_list->pop();
2120
Item *param_2= item_list->pop();
2121
func= new (thd->mem_root) Item_func_encrypt(param_1, param_2);
2126
my_error(ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT, MYF(0), name.str);
2135
Create_func_exp Create_func_exp::s_singleton;
2138
Create_func_exp::create(THD *thd, Item *arg1)
2140
return new (thd->mem_root) Item_func_exp(arg1);
2144
Create_func_export_set Create_func_export_set::s_singleton;
2147
Create_func_export_set::create_native(THD *thd, LEX_STRING name,
2148
List<Item> *item_list)
2153
if (item_list != NULL)
2154
arg_count= item_list->elements;
2156
switch (arg_count) {
2159
Item *param_1= item_list->pop();
2160
Item *param_2= item_list->pop();
2161
Item *param_3= item_list->pop();
2162
func= new (thd->mem_root) Item_func_export_set(param_1, param_2, param_3);
2167
Item *param_1= item_list->pop();
2168
Item *param_2= item_list->pop();
2169
Item *param_3= item_list->pop();
2170
Item *param_4= item_list->pop();
2171
func= new (thd->mem_root) Item_func_export_set(param_1, param_2, param_3,
2177
Item *param_1= item_list->pop();
2178
Item *param_2= item_list->pop();
2179
Item *param_3= item_list->pop();
2180
Item *param_4= item_list->pop();
2181
Item *param_5= item_list->pop();
2182
func= new (thd->mem_root) Item_func_export_set(param_1, param_2, param_3,
2188
my_error(ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT, MYF(0), name.str);
2197
Create_func_field Create_func_field::s_singleton;
2200
Create_func_field::create_native(THD *thd, LEX_STRING name,
2201
List<Item> *item_list)
2205
if (item_list != NULL)
2206
arg_count= item_list->elements;
2210
my_error(ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT, MYF(0), name.str);
2214
return new (thd->mem_root) Item_func_field(*item_list);
2218
Create_func_find_in_set Create_func_find_in_set::s_singleton;
2221
Create_func_find_in_set::create(THD *thd, Item *arg1, Item *arg2)
2223
return new (thd->mem_root) Item_func_find_in_set(arg1, arg2);
2227
Create_func_floor Create_func_floor::s_singleton;
2230
Create_func_floor::create(THD *thd, Item *arg1)
2232
return new (thd->mem_root) Item_func_floor(arg1);
2236
Create_func_format Create_func_format::s_singleton;
2239
Create_func_format::create(THD *thd, Item *arg1, Item *arg2)
2241
return new (thd->mem_root) Item_func_format(arg1, arg2);
2245
Create_func_found_rows Create_func_found_rows::s_singleton;
2248
Create_func_found_rows::create(THD *thd)
2250
thd->lex->set_stmt_unsafe();
2251
return new (thd->mem_root) Item_func_found_rows();
2255
Create_func_from_days Create_func_from_days::s_singleton;
2258
Create_func_from_days::create(THD *thd, Item *arg1)
2260
return new (thd->mem_root) Item_func_from_days(arg1);
2264
Create_func_from_unixtime Create_func_from_unixtime::s_singleton;
2267
Create_func_from_unixtime::create_native(THD *thd, LEX_STRING name,
2268
List<Item> *item_list)
2273
if (item_list != NULL)
2274
arg_count= item_list->elements;
2276
switch (arg_count) {
2279
Item *param_1= item_list->pop();
2280
func= new (thd->mem_root) Item_func_from_unixtime(param_1);
2285
Item *param_1= item_list->pop();
2286
Item *param_2= item_list->pop();
2287
Item *ut= new (thd->mem_root) Item_func_from_unixtime(param_1);
2288
func= new (thd->mem_root) Item_func_date_format(ut, param_2, 0);
2293
my_error(ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT, MYF(0), name.str);
2302
Create_func_greatest Create_func_greatest::s_singleton;
2305
Create_func_greatest::create_native(THD *thd, LEX_STRING name,
2306
List<Item> *item_list)
2310
if (item_list != NULL)
2311
arg_count= item_list->elements;
2315
my_error(ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT, MYF(0), name.str);
2319
return new (thd->mem_root) Item_func_max(*item_list);
2323
Create_func_hex Create_func_hex::s_singleton;
2326
Create_func_hex::create(THD *thd, Item *arg1)
2328
return new (thd->mem_root) Item_func_hex(arg1);
2332
Create_func_ifnull Create_func_ifnull::s_singleton;
2335
Create_func_ifnull::create(THD *thd, Item *arg1, Item *arg2)
2337
return new (thd->mem_root) Item_func_ifnull(arg1, arg2);
2341
Create_func_instr Create_func_instr::s_singleton;
2344
Create_func_instr::create(THD *thd, Item *arg1, Item *arg2)
2346
return new (thd->mem_root) Item_func_locate(arg1, arg2);
2350
Create_func_isnull Create_func_isnull::s_singleton;
2353
Create_func_isnull::create(THD *thd, Item *arg1)
2355
return new (thd->mem_root) Item_func_isnull(arg1);
2359
Create_func_last_day Create_func_last_day::s_singleton;
2362
Create_func_last_day::create(THD *thd, Item *arg1)
2364
return new (thd->mem_root) Item_func_last_day(arg1);
2368
Create_func_last_insert_id Create_func_last_insert_id::s_singleton;
2371
Create_func_last_insert_id::create_native(THD *thd, LEX_STRING name,
2372
List<Item> *item_list)
2377
if (item_list != NULL)
2378
arg_count= item_list->elements;
2380
switch (arg_count) {
2383
func= new (thd->mem_root) Item_func_last_insert_id();
2388
Item *param_1= item_list->pop();
2389
func= new (thd->mem_root) Item_func_last_insert_id(param_1);
2394
my_error(ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT, MYF(0), name.str);
2403
Create_func_lcase Create_func_lcase::s_singleton;
2406
Create_func_lcase::create(THD *thd, Item *arg1)
2408
return new (thd->mem_root) Item_func_lcase(arg1);
2412
Create_func_least Create_func_least::s_singleton;
2415
Create_func_least::create_native(THD *thd, LEX_STRING name,
2416
List<Item> *item_list)
2420
if (item_list != NULL)
2421
arg_count= item_list->elements;
2425
my_error(ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT, MYF(0), name.str);
2429
return new (thd->mem_root) Item_func_min(*item_list);
2433
Create_func_length Create_func_length::s_singleton;
2436
Create_func_length::create(THD *thd, Item *arg1)
2438
return new (thd->mem_root) Item_func_length(arg1);
2442
Create_func_ln Create_func_ln::s_singleton;
2445
Create_func_ln::create(THD *thd, Item *arg1)
2447
return new (thd->mem_root) Item_func_ln(arg1);
2451
Create_func_load_file Create_func_load_file::s_singleton;
2454
Create_func_load_file::create(THD *thd, Item *arg1)
2456
return new (thd->mem_root) Item_load_file(arg1);
2460
Create_func_locate Create_func_locate::s_singleton;
2463
Create_func_locate::create_native(THD *thd, LEX_STRING name,
2464
List<Item> *item_list)
2469
if (item_list != NULL)
2470
arg_count= item_list->elements;
2472
switch (arg_count) {
2475
Item *param_1= item_list->pop();
2476
Item *param_2= item_list->pop();
2477
/* Yes, parameters in that order : 2, 1 */
2478
func= new (thd->mem_root) Item_func_locate(param_2, param_1);
2483
Item *param_1= item_list->pop();
2484
Item *param_2= item_list->pop();
2485
Item *param_3= item_list->pop();
2486
/* Yes, parameters in that order : 2, 1, 3 */
2487
func= new (thd->mem_root) Item_func_locate(param_2, param_1, param_3);
2492
my_error(ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT, MYF(0), name.str);
2501
Create_func_log Create_func_log::s_singleton;
2504
Create_func_log::create_native(THD *thd, LEX_STRING name,
2505
List<Item> *item_list)
2510
if (item_list != NULL)
2511
arg_count= item_list->elements;
2513
switch (arg_count) {
2516
Item *param_1= item_list->pop();
2517
func= new (thd->mem_root) Item_func_log(param_1);
2522
Item *param_1= item_list->pop();
2523
Item *param_2= item_list->pop();
2524
func= new (thd->mem_root) Item_func_log(param_1, param_2);
2529
my_error(ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT, MYF(0), name.str);
2538
Create_func_log10 Create_func_log10::s_singleton;
2541
Create_func_log10::create(THD *thd, Item *arg1)
2543
return new (thd->mem_root) Item_func_log10(arg1);
2547
Create_func_log2 Create_func_log2::s_singleton;
2550
Create_func_log2::create(THD *thd, Item *arg1)
2552
return new (thd->mem_root) Item_func_log2(arg1);
2556
Create_func_lpad Create_func_lpad::s_singleton;
2559
Create_func_lpad::create(THD *thd, Item *arg1, Item *arg2, Item *arg3)
2561
return new (thd->mem_root) Item_func_lpad(arg1, arg2, arg3);
2565
Create_func_ltrim Create_func_ltrim::s_singleton;
2568
Create_func_ltrim::create(THD *thd, Item *arg1)
2570
return new (thd->mem_root) Item_func_ltrim(arg1);
2574
Create_func_makedate Create_func_makedate::s_singleton;
2577
Create_func_makedate::create(THD *thd, Item *arg1, Item *arg2)
2579
return new (thd->mem_root) Item_func_makedate(arg1, arg2);
2583
Create_func_maketime Create_func_maketime::s_singleton;
2586
Create_func_maketime::create(THD *thd, Item *arg1, Item *arg2, Item *arg3)
2588
return new (thd->mem_root) Item_func_maketime(arg1, arg2, arg3);
2592
Create_func_make_set Create_func_make_set::s_singleton;
2595
Create_func_make_set::create_native(THD *thd, LEX_STRING name,
2596
List<Item> *item_list)
2600
if (item_list != NULL)
2601
arg_count= item_list->elements;
2605
my_error(ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT, MYF(0), name.str);
2609
Item *param_1= item_list->pop();
2610
return new (thd->mem_root) Item_func_make_set(param_1, *item_list);
2614
Create_func_master_pos_wait Create_func_master_pos_wait::s_singleton;
2617
Create_func_master_pos_wait::create_native(THD *thd, LEX_STRING name,
2618
List<Item> *item_list)
2624
if (item_list != NULL)
2625
arg_count= item_list->elements;
2627
switch (arg_count) {
2630
Item *param_1= item_list->pop();
2631
Item *param_2= item_list->pop();
2632
func= new (thd->mem_root) Item_master_pos_wait(param_1, param_2);
2637
Item *param_1= item_list->pop();
2638
Item *param_2= item_list->pop();
2639
Item *param_3= item_list->pop();
2640
func= new (thd->mem_root) Item_master_pos_wait(param_1, param_2, param_3);
2645
my_error(ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT, MYF(0), name.str);
2654
Create_func_md5 Create_func_md5::s_singleton;
2657
Create_func_md5::create(THD *thd, Item *arg1)
2659
return new (thd->mem_root) Item_func_md5(arg1);
2663
Create_func_monthname Create_func_monthname::s_singleton;
2666
Create_func_monthname::create(THD *thd, Item *arg1)
2668
return new (thd->mem_root) Item_func_monthname(arg1);
2672
Create_func_nullif Create_func_nullif::s_singleton;
2675
Create_func_nullif::create(THD *thd, Item *arg1, Item *arg2)
2677
return new (thd->mem_root) Item_func_nullif(arg1, arg2);
2681
Create_func_oct Create_func_oct::s_singleton;
2684
Create_func_oct::create(THD *thd, Item *arg1)
2686
Item *i10= new (thd->mem_root) Item_int((int32) 10,2);
2687
Item *i8= new (thd->mem_root) Item_int((int32) 8,1);
2688
return new (thd->mem_root) Item_func_conv(arg1, i10, i8);
2692
Create_func_ord Create_func_ord::s_singleton;
2695
Create_func_ord::create(THD *thd, Item *arg1)
2697
return new (thd->mem_root) Item_func_ord(arg1);
2701
Create_func_period_add Create_func_period_add::s_singleton;
2704
Create_func_period_add::create(THD *thd, Item *arg1, Item *arg2)
2706
return new (thd->mem_root) Item_func_period_add(arg1, arg2);
2710
Create_func_period_diff Create_func_period_diff::s_singleton;
2713
Create_func_period_diff::create(THD *thd, Item *arg1, Item *arg2)
2715
return new (thd->mem_root) Item_func_period_diff(arg1, arg2);
2719
Create_func_pi Create_func_pi::s_singleton;
2722
Create_func_pi::create(THD *thd)
2724
return new (thd->mem_root) Item_static_float_func("pi()", M_PI, 6, 8);
2728
Create_func_pow Create_func_pow::s_singleton;
2731
Create_func_pow::create(THD *thd, Item *arg1, Item *arg2)
2733
return new (thd->mem_root) Item_func_pow(arg1, arg2);
2737
Create_func_quote Create_func_quote::s_singleton;
2740
Create_func_quote::create(THD *thd, Item *arg1)
2742
return new (thd->mem_root) Item_func_quote(arg1);
2746
Create_func_radians Create_func_radians::s_singleton;
2749
Create_func_radians::create(THD *thd, Item *arg1)
2751
return new (thd->mem_root) Item_func_units((char*) "radians", arg1,
2756
Create_func_rand Create_func_rand::s_singleton;
2759
Create_func_rand::create_native(THD *thd, LEX_STRING name,
2760
List<Item> *item_list)
2765
if (item_list != NULL)
2766
arg_count= item_list->elements;
2768
switch (arg_count) {
2771
func= new (thd->mem_root) Item_func_rand();
2776
Item *param_1= item_list->pop();
2777
func= new (thd->mem_root) Item_func_rand(param_1);
2782
my_error(ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT, MYF(0), name.str);
2791
Create_func_round Create_func_round::s_singleton;
2794
Create_func_round::create_native(THD *thd, LEX_STRING name,
2795
List<Item> *item_list)
2800
if (item_list != NULL)
2801
arg_count= item_list->elements;
2803
switch (arg_count) {
2806
Item *param_1= item_list->pop();
2807
Item *i0 = new (thd->mem_root) Item_int((char*)"0", 0, 1);
2808
func= new (thd->mem_root) Item_func_round(param_1, i0, 0);
2813
Item *param_1= item_list->pop();
2814
Item *param_2= item_list->pop();
2815
func= new (thd->mem_root) Item_func_round(param_1, param_2, 0);
2820
my_error(ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT, MYF(0), name.str);
2829
Create_func_row_count Create_func_row_count::s_singleton;
2832
Create_func_row_count::create(THD *thd)
2834
thd->lex->set_stmt_unsafe();
2835
return new (thd->mem_root) Item_func_row_count();
2839
Create_func_rpad Create_func_rpad::s_singleton;
2842
Create_func_rpad::create(THD *thd, Item *arg1, Item *arg2, Item *arg3)
2844
return new (thd->mem_root) Item_func_rpad(arg1, arg2, arg3);
2848
Create_func_rtrim Create_func_rtrim::s_singleton;
2851
Create_func_rtrim::create(THD *thd, Item *arg1)
2853
return new (thd->mem_root) Item_func_rtrim(arg1);
2857
Create_func_sec_to_time Create_func_sec_to_time::s_singleton;
2860
Create_func_sec_to_time::create(THD *thd, Item *arg1)
2862
return new (thd->mem_root) Item_func_sec_to_time(arg1);
2866
Create_func_sign Create_func_sign::s_singleton;
2869
Create_func_sign::create(THD *thd, Item *arg1)
2871
return new (thd->mem_root) Item_func_sign(arg1);
2875
Create_func_sin Create_func_sin::s_singleton;
2878
Create_func_sin::create(THD *thd, Item *arg1)
2880
return new (thd->mem_root) Item_func_sin(arg1);
2884
Create_func_space Create_func_space::s_singleton;
2887
Create_func_space::create(THD *thd, Item *arg1)
2891
The parsed item tree should not depend on
2892
<code>thd->variables.collation_connection</code>.
2894
CHARSET_INFO *cs= thd->variables.collation_connection;
2897
if (cs->mbminlen > 1)
2900
sp= new (thd->mem_root) Item_string("", 0, cs, DERIVATION_COERCIBLE, MY_REPERTOIRE_ASCII);
2901
sp->str_value.copy(" ", 1, &my_charset_latin1, cs, &dummy_errors);
2905
sp= new (thd->mem_root) Item_string(" ", 1, cs, DERIVATION_COERCIBLE, MY_REPERTOIRE_ASCII);
2908
return new (thd->mem_root) Item_func_repeat(sp, arg1);
2912
Create_func_sqrt Create_func_sqrt::s_singleton;
2915
Create_func_sqrt::create(THD *thd, Item *arg1)
2917
return new (thd->mem_root) Item_func_sqrt(arg1);
2921
Create_func_str_to_date Create_func_str_to_date::s_singleton;
2924
Create_func_str_to_date::create(THD *thd, Item *arg1, Item *arg2)
2926
return new (thd->mem_root) Item_func_str_to_date(arg1, arg2);
2930
Create_func_strcmp Create_func_strcmp::s_singleton;
2933
Create_func_strcmp::create(THD *thd, Item *arg1, Item *arg2)
2935
return new (thd->mem_root) Item_func_strcmp(arg1, arg2);
2939
Create_func_substr_index Create_func_substr_index::s_singleton;
2942
Create_func_substr_index::create(THD *thd, Item *arg1, Item *arg2, Item *arg3)
2944
return new (thd->mem_root) Item_func_substr_index(arg1, arg2, arg3);
2948
Create_func_subtime Create_func_subtime::s_singleton;
2951
Create_func_subtime::create(THD *thd, Item *arg1, Item *arg2)
2953
return new (thd->mem_root) Item_func_add_time(arg1, arg2, 0, 1);
2957
Create_func_tan Create_func_tan::s_singleton;
2960
Create_func_tan::create(THD *thd, Item *arg1)
2962
return new (thd->mem_root) Item_func_tan(arg1);
2966
Create_func_time_format Create_func_time_format::s_singleton;
2969
Create_func_time_format::create(THD *thd, Item *arg1, Item *arg2)
2971
return new (thd->mem_root) Item_func_date_format(arg1, arg2, 1);
2975
Create_func_time_to_sec Create_func_time_to_sec::s_singleton;
2978
Create_func_time_to_sec::create(THD *thd, Item *arg1)
2980
return new (thd->mem_root) Item_func_time_to_sec(arg1);
2984
Create_func_timediff Create_func_timediff::s_singleton;
2987
Create_func_timediff::create(THD *thd, Item *arg1, Item *arg2)
2989
return new (thd->mem_root) Item_func_timediff(arg1, arg2);
2993
Create_func_to_days Create_func_to_days::s_singleton;
2996
Create_func_to_days::create(THD *thd, Item *arg1)
2998
return new (thd->mem_root) Item_func_to_days(arg1);
3002
Create_func_ucase Create_func_ucase::s_singleton;
3005
Create_func_ucase::create(THD *thd, Item *arg1)
3007
return new (thd->mem_root) Item_func_ucase(arg1);
3011
Create_func_unhex Create_func_unhex::s_singleton;
3014
Create_func_unhex::create(THD *thd, Item *arg1)
3016
return new (thd->mem_root) Item_func_unhex(arg1);
3020
Create_func_unix_timestamp Create_func_unix_timestamp::s_singleton;
3023
Create_func_unix_timestamp::create_native(THD *thd, LEX_STRING name,
3024
List<Item> *item_list)
3029
if (item_list != NULL)
3030
arg_count= item_list->elements;
3032
switch (arg_count) {
3035
func= new (thd->mem_root) Item_func_unix_timestamp();
3040
Item *param_1= item_list->pop();
3041
func= new (thd->mem_root) Item_func_unix_timestamp(param_1);
3046
my_error(ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT, MYF(0), name.str);
3055
Create_func_uuid Create_func_uuid::s_singleton;
3058
Create_func_uuid::create(THD *thd)
3060
thd->lex->set_stmt_unsafe();
3061
return new (thd->mem_root) Item_func_uuid();
3065
Create_func_uuid_short Create_func_uuid_short::s_singleton;
3068
Create_func_uuid_short::create(THD *thd)
3070
thd->lex->set_stmt_unsafe();
3071
return new (thd->mem_root) Item_func_uuid_short();
3075
Create_func_version Create_func_version::s_singleton;
3078
Create_func_version::create(THD *thd)
3080
return new (thd->mem_root) Item_static_string_func("version()",
3082
(uint) strlen(server_version),
3083
system_charset_info,
3084
DERIVATION_SYSCONST);
3088
Create_func_weekday Create_func_weekday::s_singleton;
3091
Create_func_weekday::create(THD *thd, Item *arg1)
3093
return new (thd->mem_root) Item_func_weekday(arg1, 0);
3097
Create_func_weekofyear Create_func_weekofyear::s_singleton;
3100
Create_func_weekofyear::create(THD *thd, Item *arg1)
3102
Item *i1= new (thd->mem_root) Item_int((char*) "0", 3, 1);
3103
return new (thd->mem_root) Item_func_week(arg1, i1);
3107
Create_func_year_week Create_func_year_week::s_singleton;
3110
Create_func_year_week::create_native(THD *thd, LEX_STRING name,
3111
List<Item> *item_list)
3116
if (item_list != NULL)
3117
arg_count= item_list->elements;
3119
switch (arg_count) {
3122
Item *param_1= item_list->pop();
3123
Item *i0= new (thd->mem_root) Item_int((char*) "0", 0, 1);
3124
func= new (thd->mem_root) Item_func_yearweek(param_1, i0);
3129
Item *param_1= item_list->pop();
3130
Item *param_2= item_list->pop();
3131
func= new (thd->mem_root) Item_func_yearweek(param_1, param_2);
3136
my_error(ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT, MYF(0), name.str);
3145
struct Native_func_registry
3148
Create_func *builder;
3151
#define BUILDER(F) & F::s_singleton
3154
MySQL native functions.
3156
- Keep sorted for human lookup. At runtime, a hash table is used.
3157
- keep 1 line per entry, it makes grep | sort easier
3160
static Native_func_registry func_array[] =
3162
{ { C_STRING_WITH_LEN("ABS") }, BUILDER(Create_func_abs)},
3163
{ { C_STRING_WITH_LEN("ACOS") }, BUILDER(Create_func_acos)},
3164
{ { C_STRING_WITH_LEN("ADDTIME") }, BUILDER(Create_func_addtime)},
3165
{ { C_STRING_WITH_LEN("ASIN") }, BUILDER(Create_func_asin)},
3166
{ { C_STRING_WITH_LEN("ATAN") }, BUILDER(Create_func_atan)},
3167
{ { C_STRING_WITH_LEN("ATAN2") }, BUILDER(Create_func_atan)},
3168
{ { C_STRING_WITH_LEN("BENCHMARK") }, BUILDER(Create_func_benchmark)},
3169
{ { C_STRING_WITH_LEN("BIN") }, BUILDER(Create_func_bin)},
3170
{ { C_STRING_WITH_LEN("BIT_COUNT") }, BUILDER(Create_func_bit_count)},
3171
{ { C_STRING_WITH_LEN("BIT_LENGTH") }, BUILDER(Create_func_bit_length)},
3172
{ { C_STRING_WITH_LEN("CEIL") }, BUILDER(Create_func_ceiling)},
3173
{ { C_STRING_WITH_LEN("CEILING") }, BUILDER(Create_func_ceiling)},
3174
{ { C_STRING_WITH_LEN("CHARACTER_LENGTH") }, BUILDER(Create_func_char_length)},
3175
{ { C_STRING_WITH_LEN("CHAR_LENGTH") }, BUILDER(Create_func_char_length)},
3176
{ { C_STRING_WITH_LEN("COERCIBILITY") }, BUILDER(Create_func_coercibility)},
3177
{ { C_STRING_WITH_LEN("CONCAT") }, BUILDER(Create_func_concat)},
3178
{ { C_STRING_WITH_LEN("CONCAT_WS") }, BUILDER(Create_func_concat_ws)},
3179
{ { C_STRING_WITH_LEN("CONNECTION_ID") }, BUILDER(Create_func_connection_id)},
3180
{ { C_STRING_WITH_LEN("CONV") }, BUILDER(Create_func_conv)},
3181
{ { C_STRING_WITH_LEN("CONVERT_TZ") }, BUILDER(Create_func_convert_tz)},
3182
{ { C_STRING_WITH_LEN("COS") }, BUILDER(Create_func_cos)},
3183
{ { C_STRING_WITH_LEN("COT") }, BUILDER(Create_func_cot)},
3184
{ { C_STRING_WITH_LEN("CRC32") }, BUILDER(Create_func_crc32)},
3185
{ { C_STRING_WITH_LEN("DATEDIFF") }, BUILDER(Create_func_datediff)},
3186
{ { C_STRING_WITH_LEN("DATE_FORMAT") }, BUILDER(Create_func_date_format)},
3187
{ { C_STRING_WITH_LEN("DAYNAME") }, BUILDER(Create_func_dayname)},
3188
{ { C_STRING_WITH_LEN("DAYOFMONTH") }, BUILDER(Create_func_dayofmonth)},
3189
{ { C_STRING_WITH_LEN("DAYOFWEEK") }, BUILDER(Create_func_dayofweek)},
3190
{ { C_STRING_WITH_LEN("DAYOFYEAR") }, BUILDER(Create_func_dayofyear)},
3191
{ { C_STRING_WITH_LEN("DECODE") }, BUILDER(Create_func_decode)},
3192
{ { C_STRING_WITH_LEN("DEGREES") }, BUILDER(Create_func_degrees)},
3193
{ { C_STRING_WITH_LEN("ELT") }, BUILDER(Create_func_elt)},
3194
{ { C_STRING_WITH_LEN("ENCODE") }, BUILDER(Create_func_encode)},
3195
{ { C_STRING_WITH_LEN("ENCRYPT") }, BUILDER(Create_func_encrypt)},
3196
{ { C_STRING_WITH_LEN("EXP") }, BUILDER(Create_func_exp)},
3197
{ { C_STRING_WITH_LEN("EXPORT_SET") }, BUILDER(Create_func_export_set)},
3198
{ { C_STRING_WITH_LEN("FIELD") }, BUILDER(Create_func_field)},
3199
{ { C_STRING_WITH_LEN("FIND_IN_SET") }, BUILDER(Create_func_find_in_set)},
3200
{ { C_STRING_WITH_LEN("FLOOR") }, BUILDER(Create_func_floor)},
3201
{ { C_STRING_WITH_LEN("FORMAT") }, BUILDER(Create_func_format)},
3202
{ { C_STRING_WITH_LEN("FOUND_ROWS") }, BUILDER(Create_func_found_rows)},
3203
{ { C_STRING_WITH_LEN("FROM_DAYS") }, BUILDER(Create_func_from_days)},
3204
{ { C_STRING_WITH_LEN("FROM_UNIXTIME") }, BUILDER(Create_func_from_unixtime)},
3205
{ { C_STRING_WITH_LEN("GREATEST") }, BUILDER(Create_func_greatest)},
3206
{ { C_STRING_WITH_LEN("HEX") }, BUILDER(Create_func_hex)},
3207
{ { C_STRING_WITH_LEN("IFNULL") }, BUILDER(Create_func_ifnull)},
3208
{ { C_STRING_WITH_LEN("INSTR") }, BUILDER(Create_func_instr)},
3209
{ { C_STRING_WITH_LEN("ISNULL") }, BUILDER(Create_func_isnull)},
3210
{ { C_STRING_WITH_LEN("LAST_DAY") }, BUILDER(Create_func_last_day)},
3211
{ { C_STRING_WITH_LEN("LAST_INSERT_ID") }, BUILDER(Create_func_last_insert_id)},
3212
{ { C_STRING_WITH_LEN("LCASE") }, BUILDER(Create_func_lcase)},
3213
{ { C_STRING_WITH_LEN("LEAST") }, BUILDER(Create_func_least)},
3214
{ { C_STRING_WITH_LEN("LENGTH") }, BUILDER(Create_func_length)},
3215
{ { C_STRING_WITH_LEN("LN") }, BUILDER(Create_func_ln)},
3216
{ { C_STRING_WITH_LEN("LOAD_FILE") }, BUILDER(Create_func_load_file)},
3217
{ { C_STRING_WITH_LEN("LOCATE") }, BUILDER(Create_func_locate)},
3218
{ { C_STRING_WITH_LEN("LOG") }, BUILDER(Create_func_log)},
3219
{ { C_STRING_WITH_LEN("LOG10") }, BUILDER(Create_func_log10)},
3220
{ { C_STRING_WITH_LEN("LOG2") }, BUILDER(Create_func_log2)},
3221
{ { C_STRING_WITH_LEN("LOWER") }, BUILDER(Create_func_lcase)},
3222
{ { C_STRING_WITH_LEN("LPAD") }, BUILDER(Create_func_lpad)},
3223
{ { C_STRING_WITH_LEN("LTRIM") }, BUILDER(Create_func_ltrim)},
3224
{ { C_STRING_WITH_LEN("MAKEDATE") }, BUILDER(Create_func_makedate)},
3225
{ { C_STRING_WITH_LEN("MAKETIME") }, BUILDER(Create_func_maketime)},
3226
{ { C_STRING_WITH_LEN("MAKE_SET") }, BUILDER(Create_func_make_set)},
3227
{ { C_STRING_WITH_LEN("MASTER_POS_WAIT") }, BUILDER(Create_func_master_pos_wait)},
3228
{ { C_STRING_WITH_LEN("MD5") }, BUILDER(Create_func_md5)},
3229
{ { C_STRING_WITH_LEN("MONTHNAME") }, BUILDER(Create_func_monthname)},
3230
{ { C_STRING_WITH_LEN("NULLIF") }, BUILDER(Create_func_nullif)},
3231
{ { C_STRING_WITH_LEN("OCT") }, BUILDER(Create_func_oct)},
3232
{ { C_STRING_WITH_LEN("OCTET_LENGTH") }, BUILDER(Create_func_length)},
3233
{ { C_STRING_WITH_LEN("ORD") }, BUILDER(Create_func_ord)},
3234
{ { C_STRING_WITH_LEN("PERIOD_ADD") }, BUILDER(Create_func_period_add)},
3235
{ { C_STRING_WITH_LEN("PERIOD_DIFF") }, BUILDER(Create_func_period_diff)},
3236
{ { C_STRING_WITH_LEN("PI") }, BUILDER(Create_func_pi)},
3237
{ { C_STRING_WITH_LEN("POW") }, BUILDER(Create_func_pow)},
3238
{ { C_STRING_WITH_LEN("POWER") }, BUILDER(Create_func_pow)},
3239
{ { C_STRING_WITH_LEN("QUOTE") }, BUILDER(Create_func_quote)},
3240
{ { C_STRING_WITH_LEN("RADIANS") }, BUILDER(Create_func_radians)},
3241
{ { C_STRING_WITH_LEN("RAND") }, BUILDER(Create_func_rand)},
3242
{ { C_STRING_WITH_LEN("ROUND") }, BUILDER(Create_func_round)},
3243
{ { C_STRING_WITH_LEN("ROW_COUNT") }, BUILDER(Create_func_row_count)},
3244
{ { C_STRING_WITH_LEN("RPAD") }, BUILDER(Create_func_rpad)},
3245
{ { C_STRING_WITH_LEN("RTRIM") }, BUILDER(Create_func_rtrim)},
3246
{ { C_STRING_WITH_LEN("SEC_TO_TIME") }, BUILDER(Create_func_sec_to_time)},
3247
{ { C_STRING_WITH_LEN("SIGN") }, BUILDER(Create_func_sign)},
3248
{ { C_STRING_WITH_LEN("SIN") }, BUILDER(Create_func_sin)},
3249
{ { C_STRING_WITH_LEN("SPACE") }, BUILDER(Create_func_space)},
3250
{ { C_STRING_WITH_LEN("SQRT") }, BUILDER(Create_func_sqrt)},
3251
{ { C_STRING_WITH_LEN("STRCMP") }, BUILDER(Create_func_strcmp)},
3252
{ { C_STRING_WITH_LEN("STR_TO_DATE") }, BUILDER(Create_func_str_to_date)},
3253
{ { C_STRING_WITH_LEN("SUBSTRING_INDEX") }, BUILDER(Create_func_substr_index)},
3254
{ { C_STRING_WITH_LEN("SUBTIME") }, BUILDER(Create_func_subtime)},
3255
{ { C_STRING_WITH_LEN("TAN") }, BUILDER(Create_func_tan)},
3256
{ { C_STRING_WITH_LEN("TIMEDIFF") }, BUILDER(Create_func_timediff)},
3257
{ { C_STRING_WITH_LEN("TIME_FORMAT") }, BUILDER(Create_func_time_format)},
3258
{ { C_STRING_WITH_LEN("TIME_TO_SEC") }, BUILDER(Create_func_time_to_sec)},
3259
{ { C_STRING_WITH_LEN("TO_DAYS") }, BUILDER(Create_func_to_days)},
3260
{ { C_STRING_WITH_LEN("UCASE") }, BUILDER(Create_func_ucase)},
3261
{ { C_STRING_WITH_LEN("UNHEX") }, BUILDER(Create_func_unhex)},
3262
{ { C_STRING_WITH_LEN("UNIX_TIMESTAMP") }, BUILDER(Create_func_unix_timestamp)},
3263
{ { C_STRING_WITH_LEN("UPPER") }, BUILDER(Create_func_ucase)},
3264
{ { C_STRING_WITH_LEN("UUID") }, BUILDER(Create_func_uuid)},
3265
{ { C_STRING_WITH_LEN("UUID_SHORT") }, BUILDER(Create_func_uuid_short)},
3266
{ { C_STRING_WITH_LEN("VERSION") }, BUILDER(Create_func_version)},
3267
{ { C_STRING_WITH_LEN("WEEKDAY") }, BUILDER(Create_func_weekday)},
3268
{ { C_STRING_WITH_LEN("WEEKOFYEAR") }, BUILDER(Create_func_weekofyear)},
3269
{ { C_STRING_WITH_LEN("YEARWEEK") }, BUILDER(Create_func_year_week)},
3274
static HASH native_functions_hash;
3277
get_native_fct_hash_key(const uchar *buff, size_t *length,
3278
my_bool /* unused */)
3280
Native_func_registry *func= (Native_func_registry*) buff;
3281
*length= func->name.length;
3282
return (uchar*) func->name.str;
3286
Load the hash table for native functions.
3287
Note: this code is not thread safe, and is intended to be used at server
3288
startup only (before going multi-threaded)
3291
int item_create_init()
3293
Native_func_registry *func;
3295
DBUG_ENTER("item_create_init");
3297
if (hash_init(& native_functions_hash,
3298
system_charset_info,
3299
array_elements(func_array),
3302
(hash_get_key) get_native_fct_hash_key,
3303
NULL, /* Nothing to free */
3307
for (func= func_array; func->builder != NULL; func++)
3309
if (my_hash_insert(& native_functions_hash, (uchar*) func))
3314
for (uint i=0 ; i < native_functions_hash.records ; i++)
3316
func= (Native_func_registry*) hash_element(& native_functions_hash, i);
3317
DBUG_PRINT("info", ("native function: %s length: %u",
3318
func->name.str, (uint) func->name.length));
3326
Empty the hash table for native functions.
3327
Note: this code is not thread safe, and is intended to be used at server
3328
shutdown only (after thread requests have been executed).
3331
void item_create_cleanup()
3333
DBUG_ENTER("item_create_cleanup");
3334
hash_free(& native_functions_hash);
3339
find_native_function_builder(THD *thd, LEX_STRING name)
3341
Native_func_registry *func;
3342
Create_func *builder= NULL;
3345
func= (Native_func_registry*) hash_search(& native_functions_hash,
3351
builder= func->builder;
3359
create_func_char_cast(THD *thd, Item *a, int len, CHARSET_INFO *cs)
3361
CHARSET_INFO *real_cs= (cs ? cs : thd->variables.collation_connection);
3362
return new (thd->mem_root) Item_char_typecast(a, len, real_cs);
3367
create_func_cast(THD *thd, Item *a, Cast_target cast_type,
3368
const char *c_len, const char *c_dec,
3375
switch (cast_type) {
3376
case ITEM_CAST_BINARY:
3377
res= new (thd->mem_root) Item_func_binary(a);
3379
case ITEM_CAST_SIGNED_INT:
3380
res= new (thd->mem_root) Item_func_signed(a);
3382
case ITEM_CAST_UNSIGNED_INT:
3383
res= new (thd->mem_root) Item_func_unsigned(a);
3385
case ITEM_CAST_DATE:
3386
res= new (thd->mem_root) Item_date_typecast(a);
3388
case ITEM_CAST_TIME:
3389
res= new (thd->mem_root) Item_time_typecast(a);
3391
case ITEM_CAST_DATETIME:
3392
res= new (thd->mem_root) Item_datetime_typecast(a);
3394
case ITEM_CAST_DECIMAL:
3396
len= c_len ? atoi(c_len) : 0;
3397
dec= c_dec ? atoi(c_dec) : 0;
3398
my_decimal_trim(&len, &dec);
3401
my_error(ER_M_BIGGER_THAN_D, MYF(0), "");
3404
if (len > DECIMAL_MAX_PRECISION)
3406
my_error(ER_TOO_BIG_PRECISION, MYF(0), len, a->name,
3407
DECIMAL_MAX_PRECISION);
3410
if (dec > DECIMAL_MAX_SCALE)
3412
my_error(ER_TOO_BIG_SCALE, MYF(0), dec, a->name,
3416
res= new (thd->mem_root) Item_decimal_typecast(a, len, dec);
3419
case ITEM_CAST_CHAR:
3421
len= c_len ? atoi(c_len) : -1;
3422
res= create_func_char_cast(thd, a, len, cs);