1470
1470
thd->lex->set_stmt_unsafe();
1472
func= udf->create_func(thd->mem_root);
1474
func->set_arguments(*item_list);
1472
assert( (udf->type == UDFTYPE_FUNCTION)
1473
|| (udf->type == UDFTYPE_AGGREGATE));
1475
switch(udf->returns) {
1478
if (udf->type == UDFTYPE_FUNCTION)
1481
func= new (thd->mem_root) Item_func_udf_str(udf, *item_list);
1483
func= new (thd->mem_root) Item_func_udf_str(udf);
1488
func= new (thd->mem_root) Item_sum_udf_str(udf, *item_list);
1490
func= new (thd->mem_root) Item_sum_udf_str(udf);
1496
if (udf->type == UDFTYPE_FUNCTION)
1499
func= new (thd->mem_root) Item_func_udf_float(udf, *item_list);
1501
func= new (thd->mem_root) Item_func_udf_float(udf);
1506
func= new (thd->mem_root) Item_sum_udf_float(udf, *item_list);
1508
func= new (thd->mem_root) Item_sum_udf_float(udf);
1514
if (udf->type == UDFTYPE_FUNCTION)
1517
func= new (thd->mem_root) Item_func_udf_int(udf, *item_list);
1519
func= new (thd->mem_root) Item_func_udf_int(udf);
1524
func= new (thd->mem_root) Item_sum_udf_int(udf, *item_list);
1526
func= new (thd->mem_root) Item_sum_udf_int(udf);
1530
case DECIMAL_RESULT:
1532
if (udf->type == UDFTYPE_FUNCTION)
1535
func= new (thd->mem_root) Item_func_udf_decimal(udf, *item_list);
1537
func= new (thd->mem_root) Item_func_udf_decimal(udf);
1542
func= new (thd->mem_root) Item_sum_udf_decimal(udf, *item_list);
1544
func= new (thd->mem_root) Item_sum_udf_decimal(udf);
1550
my_error(ER_NOT_SUPPORTED_YET, MYF(0), "UDF return type");
2654
2731
if (cs->mbminlen > 1)
2656
uint32_t dummy_errors;
2657
2734
sp= new (thd->mem_root) Item_string("", 0, cs, DERIVATION_COERCIBLE, MY_REPERTOIRE_ASCII);
2658
sp->str_value.copy(" ", 1, &my_charset_utf8_general_ci, cs, &dummy_errors);
2735
sp->str_value.copy(" ", 1, &my_charset_latin1, cs, &dummy_errors);
3014
3091
static HASH native_functions_hash;
3016
extern "C" unsigned char*
3017
get_native_fct_hash_key(const unsigned char *buff, size_t *length,
3094
get_native_fct_hash_key(const uchar *buff, size_t *length,
3018
3095
bool /* unused */)
3020
3097
Native_func_registry *func= (Native_func_registry*) buff;
3021
3098
*length= func->name.length;
3022
return (unsigned char*) func->name.str;
3099
return (uchar*) func->name.str;