128
128
class Create_native_func : public Create_func
131
virtual Item* create(Session* session, str_ref name, List<Item>* item_list)
131
virtual Item* create(Session* session, lex_string_t name, List<Item>* item_list)
133
133
if (item_list && has_named_parameters(*item_list))
135
my_error(ER_WRONG_PARAMETERS_TO_NATIVE_FCT, MYF(0), name.data());
135
my_error(ER_WRONG_PARAMETERS_TO_NATIVE_FCT, MYF(0), name.str);
138
138
return create_native(session, name, item_list);
246
246
virtual Item* create(Session *session, Item *arg1);
248
248
static Create_func_bin s_singleton;
251
254
class Create_func_concat : public Create_native_func
254
virtual Item* create_native(Session *session, str_ref name, List<Item> *item_list);
257
virtual Item* create_native(Session *session, lex_string_t name, List<Item> *item_list);
256
259
static Create_func_concat s_singleton;
262
Create_func_concat() {}
260
266
class Create_func_concat_ws : public Create_native_func
263
virtual Item* create_native(Session *session, str_ref name, List<Item> *item_list);
269
virtual Item* create_native(Session *session, lex_string_t name, List<Item> *item_list);
265
271
static Create_func_concat_ws s_singleton;
274
Create_func_concat_ws() {}
410
virtual Item* create_native(Session *session, str_ref name, List<Item> *item_list);
443
virtual Item* create_native(Session *session, lex_string_t name, List<Item> *item_list);
412
445
static Create_func_export_set s_singleton;
448
Create_func_export_set() {}
416
452
class Create_func_field : public Create_native_func
419
virtual Item* create_native(Session *session, str_ref name, List<Item> *item_list);
455
virtual Item* create_native(Session *session, lex_string_t name, List<Item> *item_list);
421
457
static Create_func_field s_singleton;
460
Create_func_field() {}
428
467
using Create_func_arg2::create;
430
virtual Item* create(Session *session, Item *arg1, Item *arg2)
432
return new (session->mem) Item_func_find_in_set(arg1, arg2);
469
virtual Item* create(Session *session, Item *arg1, Item *arg2);
435
471
static Create_func_find_in_set s_singleton;
474
Create_func_find_in_set() {}
438
477
class Create_func_found_rows : public Create_func_arg0
455
494
using Create_func_arg1::create;
457
virtual Item* create(Session *session, Item *arg1)
459
return new (session->mem) Item_func_from_days(arg1);
496
virtual Item* create(Session *session, Item *arg1);
462
498
static Create_func_from_days s_singleton;
501
Create_func_from_days() {}
466
505
class Create_func_from_unixtime : public Create_native_func
469
virtual Item* create_native(Session *session, str_ref name, List<Item> *item_list);
508
virtual Item* create_native(Session *session, lex_string_t name, List<Item> *item_list);
471
510
static Create_func_from_unixtime s_singleton;
513
Create_func_from_unixtime() {}
475
517
class Create_func_greatest : public Create_native_func
478
virtual Item* create_native(Session *session, str_ref name, List<Item> *item_list);
520
virtual Item* create_native(Session *session, lex_string_t name, List<Item> *item_list);
480
522
static Create_func_greatest s_singleton;
525
Create_func_greatest() {}
529
574
using Create_func_arg1::create;
531
virtual Item* create(Session *session, Item *arg1)
533
return new (session->mem) Item_func_last_day(arg1);
576
virtual Item* create(Session *session, Item *arg1);
536
578
static Create_func_last_day s_singleton;
581
Create_func_last_day() {}
540
585
class Create_func_last_insert_id : public Create_native_func
543
virtual Item* create_native(Session *session, str_ref name, List<Item> *item_list);
588
virtual Item* create_native(Session *session, lex_string_t name, List<Item> *item_list);
545
590
static Create_func_last_insert_id s_singleton;
593
Create_func_last_insert_id() {}
552
600
using Create_func_arg1::create;
554
virtual Item* create(Session *session, Item *arg1)
556
return new (session->mem) Item_func_lcase(arg1);
602
virtual Item* create(Session *session, Item *arg1);
559
604
static Create_func_lcase s_singleton;
607
Create_func_lcase() {}
563
611
class Create_func_least : public Create_native_func
566
virtual Item* create_native(Session *session, str_ref name, List<Item> *item_list);
614
virtual Item* create_native(Session *session, lex_string_t name, List<Item> *item_list);
568
616
static Create_func_least s_singleton;
619
Create_func_least() {}
571
622
class Create_func_load_file : public Create_func_arg1
574
625
using Create_func_arg1::create;
576
virtual Item* create(Session *session, Item *arg1)
578
return new (session->mem) Item_load_file(*session, arg1);
627
virtual Item* create(Session *session, Item *arg1);
581
629
static Create_func_load_file s_singleton;
632
Create_func_load_file() {}
584
636
class Create_func_locate : public Create_native_func
587
virtual Item* create_native(Session *session, str_ref name, List<Item> *item_list);
639
virtual Item* create_native(Session *session, lex_string_t name, List<Item> *item_list);
589
641
static Create_func_locate s_singleton;
644
Create_func_locate() {}
592
648
class Create_func_lpad : public Create_func_arg3
741
816
using Create_func_arg1::create;
743
virtual Item* create(Session *session, Item *arg1)
745
return new (session->mem) Item_func_units("radians", arg1, M_PI/180, 0.0);
818
virtual Item* create(Session *session, Item *arg1);
748
820
static Create_func_radians s_singleton;
822
Create_func_radians() {}
752
826
class Create_func_round : public Create_native_func
755
virtual Item* create_native(Session *session, str_ref name, List<Item> *item_list);
829
virtual Item* create_native(Session *session, lex_string_t name, List<Item> *item_list);
757
831
static Create_func_round s_singleton;
833
Create_func_round() {}
936
1037
Create_udf_func Create_udf_func::s_singleton;
938
Item* Create_udf_func::create(Session *session, str_ref name, List<Item> *item_list)
1039
Item* Create_udf_func::create(Session *session, lex_string_t name, List<Item> *item_list)
940
return create(session, plugin::Function::get(to_string(name)), item_list);
1041
return create(session, plugin::Function::get(std::string(name.str, name.length)), item_list);
943
1044
Item* Create_udf_func::create(Session *session, const plugin::Function *udf, List<Item> *item_list)
1047
int arg_count= item_list ? item_list->size() : 0;
946
1048
Item_func* func= (*udf)(&session->mem);
947
if (!func->check_argument_count(item_list ? item_list->size() : 0))
1049
if (!func->check_argument_count(arg_count))
949
1051
my_error(ER_WRONG_PARAMCOUNT_TO_FUNCTION, MYF(0), func->func_name());
957
Item* Create_func_arg0::create(Session *session, str_ref name, List<Item> *item_list)
1059
Item* Create_func_arg0::create(Session *session, lex_string_t name, List<Item> *item_list)
959
if (not item_list || not item_list->size())
960
return create(session);
961
my_error(ER_WRONG_PARAMCOUNT_TO_FUNCTION, MYF(0), name.data());
1061
if (item_list && item_list->size())
1063
my_error(ER_WRONG_PARAMCOUNT_TO_FUNCTION, MYF(0), name.str);
1066
return create(session);
965
Item* Create_func_arg1::create(Session *session, str_ref name, List<Item> *item_list)
1069
Item* Create_func_arg1::create(Session *session, lex_string_t name, List<Item> *item_list)
967
if (not item_list || item_list->size() != 1)
1071
int arg_count= item_list ? item_list->size() : 0;
969
my_error(ER_WRONG_PARAMCOUNT_TO_FUNCTION, MYF(0), name.data());
1074
my_error(ER_WRONG_PARAMCOUNT_TO_FUNCTION, MYF(0), name.str);
973
1078
Item *param_1= item_list->pop();
974
if (param_1->is_autogenerated_name)
975
return create(session, param_1);
976
my_error(ER_WRONG_PARAMETERS_TO_NATIVE_FCT, MYF(0), name.data());
1080
if (! param_1->is_autogenerated_name)
1082
my_error(ER_WRONG_PARAMETERS_TO_NATIVE_FCT, MYF(0), name.str);
1086
return create(session, param_1);
980
Item* Create_func_arg2::create(Session *session, str_ref name, List<Item> *item_list)
1091
Create_func_arg2::create(Session *session, lex_string_t name, List<Item> *item_list)
982
if (not item_list || item_list->size() != 2)
1093
int arg_count= item_list ? item_list->size() : 0;
984
my_error(ER_WRONG_PARAMCOUNT_TO_FUNCTION, MYF(0), name.data());
1096
my_error(ER_WRONG_PARAMCOUNT_TO_FUNCTION, MYF(0), name.str);
988
1100
Item *param_1= item_list->pop();
989
1101
Item *param_2= item_list->pop();
991
if (param_1->is_autogenerated_name
992
&& param_2->is_autogenerated_name)
1103
if ( (! param_1->is_autogenerated_name)
1104
|| (! param_2->is_autogenerated_name))
1106
my_error(ER_WRONG_PARAMETERS_TO_NATIVE_FCT, MYF(0), name.str);
993
1110
return create(session, param_1, param_2);
994
my_error(ER_WRONG_PARAMETERS_TO_NATIVE_FCT, MYF(0), name.data());
998
Item* Create_func_arg3::create(Session *session, str_ref name, List<Item> *item_list)
1115
Create_func_arg3::create(Session *session, lex_string_t name, List<Item> *item_list)
1000
if (not item_list || item_list->size() != 3)
1117
int arg_count= item_list ? item_list->size() : 0;
1002
my_error(ER_WRONG_PARAMCOUNT_TO_FUNCTION, MYF(0), name.data());
1120
my_error(ER_WRONG_PARAMCOUNT_TO_FUNCTION, MYF(0), name.str);
1007
1125
Item *param_2= item_list->pop();
1008
1126
Item *param_3= item_list->pop();
1010
if (param_1->is_autogenerated_name
1011
&& param_2->is_autogenerated_name
1012
&& param_3->is_autogenerated_name)
1013
return create(session, param_1, param_2, param_3);
1014
my_error(ER_WRONG_PARAMETERS_TO_NATIVE_FCT, MYF(0), name.data());
1128
if ( (! param_1->is_autogenerated_name)
1129
|| (! param_2->is_autogenerated_name)
1130
|| (! param_3->is_autogenerated_name))
1132
my_error(ER_WRONG_PARAMETERS_TO_NATIVE_FCT, MYF(0), name.str);
1136
return create(session, param_1, param_2, param_3);
1018
1139
Create_func_bin Create_func_bin::s_singleton;
1020
Item* Create_func_bin::create(Session *session, Item *arg1)
1142
Create_func_bin::create(Session *session, Item *arg1)
1022
1144
Item *i10= new (session->mem) Item_int(10, 2);
1023
1145
Item *i2= new (session->mem) Item_int(2, 1);
1027
1149
Create_func_concat Create_func_concat::s_singleton;
1029
Item* Create_func_concat::create_native(Session *session, str_ref name, List<Item> *item_list)
1152
Create_func_concat::create_native(Session *session, lex_string_t name, List<Item> *item_list)
1031
if (item_list && item_list->size() >= 1)
1032
return new (session->mem) Item_func_concat(*session, *item_list);
1033
my_error(ER_WRONG_PARAMCOUNT_TO_FUNCTION, MYF(0), name.data());
1154
int arg_count= item_list ? item_list->size() : 0;
1157
my_error(ER_WRONG_PARAMCOUNT_TO_FUNCTION, MYF(0), name.str);
1161
return new (session->mem) Item_func_concat(*session, *item_list);
1037
1165
Create_func_concat_ws Create_func_concat_ws::s_singleton;
1039
Item* Create_func_concat_ws::create_native(Session *session, str_ref name, List<Item> *item_list)
1168
Create_func_concat_ws::create_native(Session *session, lex_string_t name,
1169
List<Item> *item_list)
1171
int arg_count= item_list ? item_list->size() : 0;
1041
1172
/* "WS" stands for "With Separator": this function takes 2+ arguments */
1042
if (item_list && item_list->size() >= 2)
1043
return new (session->mem) Item_func_concat_ws(*session, *item_list);
1044
my_error(ER_WRONG_PARAMCOUNT_TO_FUNCTION, MYF(0), name.data());
1175
my_error(ER_WRONG_PARAMCOUNT_TO_FUNCTION, MYF(0), name.str);
1179
return new (session->mem) Item_func_concat_ws(*session, *item_list);
1048
1182
Create_func_cot Create_func_cot::s_singleton;
1096
1230
Item *param_5= item_list->pop();
1097
1231
return new (session->mem) Item_func_export_set(param_1, param_2, param_3, param_4, param_5);
1234
my_error(ER_WRONG_PARAMCOUNT_TO_FUNCTION, MYF(0), name.str);
1100
my_error(ER_WRONG_PARAMCOUNT_TO_FUNCTION, MYF(0), name.data());
1105
1240
Create_func_field Create_func_field::s_singleton;
1107
Item* Create_func_field::create_native(Session *session, str_ref name, List<Item> *item_list)
1243
Create_func_field::create_native(Session *session, lex_string_t name,
1244
List<Item> *item_list)
1109
if (item_list && item_list->size() >= 2)
1110
return new (session->mem) Item_func_field(*item_list);
1111
my_error(ER_WRONG_PARAMCOUNT_TO_FUNCTION, MYF(0), name.data());
1246
int arg_count= item_list ? item_list->size() : 0;
1249
my_error(ER_WRONG_PARAMCOUNT_TO_FUNCTION, MYF(0), name.str);
1253
return new (session->mem) Item_func_field(*item_list);
1115
1257
Create_func_find_in_set Create_func_find_in_set::s_singleton;
1260
Create_func_find_in_set::create(Session *session, Item *arg1, Item *arg2)
1262
return new (session->mem) Item_func_find_in_set(arg1, arg2);
1116
1265
Create_func_found_rows Create_func_found_rows::s_singleton;
1268
Create_func_found_rows::create(Session *session)
1270
return new (session->mem) Item_func_found_rows();
1117
1274
Create_func_from_days Create_func_from_days::s_singleton;
1277
Create_func_from_days::create(Session *session, Item *arg1)
1279
return new (session->mem) Item_func_from_days(arg1);
1118
1283
Create_func_from_unixtime Create_func_from_unixtime::s_singleton;
1120
Item* Create_func_from_unixtime::create_native(Session *session, str_ref name, List<Item> *item_list)
1286
Create_func_from_unixtime::create_native(Session *session, lex_string_t name,
1287
List<Item> *item_list)
1122
1289
switch (item_list ? item_list->size() : 0)
1133
1300
Item *ut= new (session->mem) Item_func_from_unixtime(param_1);
1134
1301
return new (session->mem) Item_func_date_format(ut, param_2, 0);
1304
my_error(ER_WRONG_PARAMCOUNT_TO_FUNCTION, MYF(0), name.str);
1137
my_error(ER_WRONG_PARAMCOUNT_TO_FUNCTION, MYF(0), name.data());
1141
1310
Create_func_greatest Create_func_greatest::s_singleton;
1143
Item* Create_func_greatest::create_native(Session *session, str_ref name, List<Item> *item_list)
1313
Create_func_greatest::create_native(Session *session, lex_string_t name,
1314
List<Item> *item_list)
1145
if (item_list && item_list->size() >= 2)
1316
int arg_count= item_list ? item_list->size() : 0;
1319
my_error(ER_WRONG_PARAMCOUNT_TO_FUNCTION, MYF(0), name.str);
1146
1323
return new (session->mem) Item_func_max(*item_list);
1147
my_error(ER_WRONG_PARAMCOUNT_TO_FUNCTION, MYF(0), name.data());
1151
1326
Create_func_ifnull Create_func_ifnull::s_singleton;
1329
Create_func_ifnull::create(Session *session, Item *arg1, Item *arg2)
1331
return new (session->mem) Item_func_ifnull(arg1, arg2);
1152
1335
Create_func_instr Create_func_instr::s_singleton;
1338
Create_func_instr::create(Session *session, Item *arg1, Item *arg2)
1340
return new (session->mem) Item_func_locate(arg1, arg2);
1153
1344
Create_func_isnull Create_func_isnull::s_singleton;
1347
Create_func_isnull::create(Session *session, Item *arg1)
1349
return new (session->mem) Item_func_isnull(arg1);
1154
1353
Create_func_last_day Create_func_last_day::s_singleton;
1356
Create_func_last_day::create(Session *session, Item *arg1)
1358
return new (session->mem) Item_func_last_day(arg1);
1155
1362
Create_func_last_insert_id Create_func_last_insert_id::s_singleton;
1157
Item* Create_func_last_insert_id::create_native(Session *session, str_ref name, List<Item> *item_list)
1365
Create_func_last_insert_id::create_native(Session *session, lex_string_t name,
1366
List<Item> *item_list)
1159
1368
int arg_count= item_list ? item_list->size() : 0;
1369
switch (arg_count) {
1164
1372
return new (session->mem) Item_func_last_insert_id();
1168
1376
Item *param_1= item_list->pop();
1169
1377
return new (session->mem) Item_func_last_insert_id(param_1);
1380
my_error(ER_WRONG_PARAMCOUNT_TO_FUNCTION, MYF(0), name.str);
1172
my_error(ER_WRONG_PARAMCOUNT_TO_FUNCTION, MYF(0), name.data());
1176
1386
Create_func_lcase Create_func_lcase::s_singleton;
1389
Create_func_lcase::create(Session *session, Item *arg1)
1391
return new (session->mem) Item_func_lcase(arg1);
1177
1395
Create_func_least Create_func_least::s_singleton;
1179
Item* Create_func_least::create_native(Session *session, str_ref name, List<Item> *item_list)
1398
Create_func_least::create_native(Session *session, lex_string_t name,
1399
List<Item> *item_list)
1181
if (item_list && item_list->size() >= 2)
1182
return new (session->mem) Item_func_min(*item_list);
1183
my_error(ER_WRONG_PARAMCOUNT_TO_FUNCTION, MYF(0), name.data());
1401
int arg_count= item_list ? item_list->size() : 0;
1404
my_error(ER_WRONG_PARAMCOUNT_TO_FUNCTION, MYF(0), name.str);
1408
return new (session->mem) Item_func_min(*item_list);
1187
1411
Create_func_load_file Create_func_load_file::s_singleton;
1414
Create_func_load_file::create(Session *session, Item *arg1)
1416
return new (session->mem) Item_load_file(*session, arg1);
1188
1420
Create_func_locate Create_func_locate::s_singleton;
1190
Item* Create_func_locate::create_native(Session *session, str_ref name, List<Item> *item_list)
1423
Create_func_locate::create_native(Session *session, lex_string_t name,
1424
List<Item> *item_list)
1192
switch (item_list ? item_list->size() : 0)
1426
int arg_count= item_list ? item_list->size() : 0;
1206
1441
/* Yes, parameters in that order : 2, 1, 3 */
1207
1442
return new (session->mem) Item_func_locate(param_2, param_1, param_3);
1445
my_error(ER_WRONG_PARAMCOUNT_TO_FUNCTION, MYF(0), name.str);
1210
my_error(ER_WRONG_PARAMCOUNT_TO_FUNCTION, MYF(0), name.data());
1214
1450
Create_func_make_set Create_func_make_set::s_singleton;
1216
Item* Create_func_make_set::create_native(Session *session_arg, str_ref name, List<Item> *item_list)
1453
Create_func_make_set::create_native(Session *session_arg, lex_string_t name,
1454
List<Item> *item_list)
1218
if (not item_list || item_list->size() < 2)
1456
int arg_count= item_list ? item_list->size() : 0;
1220
my_error(ER_WRONG_PARAMCOUNT_TO_FUNCTION, MYF(0), name.data());
1459
my_error(ER_WRONG_PARAMCOUNT_TO_FUNCTION, MYF(0), name.str);
1237
1477
Create_func_period_add Create_func_period_add::s_singleton;
1480
Create_func_period_add::create(Session *session, Item *arg1, Item *arg2)
1482
return new (session->mem) Item_func_period_add(arg1, arg2);
1238
1486
Create_func_period_diff Create_func_period_diff::s_singleton;
1489
Create_func_period_diff::create(Session *session, Item *arg1, Item *arg2)
1491
return new (session->mem) Item_func_period_diff(arg1, arg2);
1239
1495
Create_func_pi Create_func_pi::s_singleton;
1498
Create_func_pi::create(Session *session)
1500
return new (session->mem) Item_static_float_func("pi()", M_PI, 6, 8);
1240
1503
Create_func_radians Create_func_radians::s_singleton;
1506
Create_func_radians::create(Session *session, Item *arg1)
1508
return new (session->mem) Item_func_units("radians", arg1,
1241
1512
Create_func_round Create_func_round::s_singleton;
1243
Item* Create_func_round::create_native(Session *session, str_ref name, List<Item> *item_list)
1514
Item* Create_func_round::create_native(Session *session, lex_string_t name, List<Item> *item_list)
1245
1516
switch (item_list ? item_list->size() : 0)
1249
Item *param_1= item_list->pop();
1250
Item *i0 = new (session->mem) Item_int("0", 0, 1);
1251
return new (session->mem) Item_func_round(param_1, i0, 0);
1520
Item *param_1= item_list->pop();
1521
Item *i0 = new (session->mem) Item_int("0", 0, 1);
1522
return new (session->mem) Item_func_round(param_1, i0, 0);
1255
Item *param_1= item_list->pop();
1256
Item *param_2= item_list->pop();
1257
return new (session->mem) Item_func_round(param_1, param_2, 0);
1260
my_error(ER_WRONG_PARAMCOUNT_TO_FUNCTION, MYF(0), name.data());
1526
Item *param_1= item_list->pop();
1527
Item *param_2= item_list->pop();
1528
return new (session->mem) Item_func_round(param_1, param_2, 0);
1531
my_error(ER_WRONG_PARAMCOUNT_TO_FUNCTION, MYF(0), name.str);
1264
1536
Create_func_space Create_func_space::s_singleton;
1266
Item* Create_func_space::create(Session *session, Item *arg1)
1539
Create_func_space::create(Session *session, Item *arg1)
1269
1542
TODO: Fix Bug#23637
1276
1549
if (cs->mbminlen > 1)
1278
sp= new (session->mem) Item_string(str_ref(""), cs, DERIVATION_COERCIBLE);
1551
sp= new (session->mem) Item_string("", 0, cs, DERIVATION_COERCIBLE);
1279
1552
sp->str_value.copy(" ", 1, cs);
1283
sp= new (session->mem) Item_string(str_ref(" "), cs, DERIVATION_COERCIBLE);
1556
sp= new (session->mem) Item_string(" ", 1, cs, DERIVATION_COERCIBLE);
1286
1559
return new (session->mem) Item_func_repeat(*session, sp, arg1);