1 #ifndef SQL_UDF_INCLUDED
2 #define SQL_UDF_INCLUDED
22 enum Item_udftype {UDFTYPE_FUNCTION=1,UDFTYPE_AGGREGATE};
24 typedef void (*Udf_func_clear)(
UDF_INIT *, uchar *, uchar *);
26 typedef void (*Udf_func_deinit)(
UDF_INIT*);
28 typedef void (*Udf_func_any)();
41 Udf_func_init func_init;
42 Udf_func_deinit func_deinit;
43 Udf_func_clear func_clear;
44 Udf_func_add func_add;
63 table_map used_tables_cache;
64 bool const_item_cache;
67 is_null(0), initialized(0), not_original(0)
70 const char *name()
const {
return u_d ? u_d->name.str :
"?"; }
71 Item_result result_type ()
const
72 {
return u_d ? u_d->returns : STRING_RESULT;}
75 uint arg_count,
Item **args);
77 double val(my_bool *null_value)
85 Udf_func_double func= (Udf_func_double) u_d->func;
86 double tmp=func(&initid, &f_args, &is_null, &error);
95 longlong val_int(my_bool *null_value)
103 Udf_func_longlong func= (Udf_func_longlong) u_d->func;
104 longlong tmp=func(&initid, &f_args, &is_null, &error);
105 if (is_null || error)
117 Udf_func_clear func= u_d->func_clear;
118 func(&initid, &is_null, &error);
120 void add(my_bool *null_value)
127 Udf_func_add func= u_d->func_add;
128 func(&initid, &f_args, &is_null, &error);
129 *null_value= (my_bool) (is_null || error);
136 void udf_init(
void),udf_free(
void);
137 udf_func *find_udf(
const char *
name, uint len=0,
bool mark_used=0);
139 int mysql_create_function(THD *thd,
udf_func *udf);