Commit d212d760 authored by unknown's avatar unknown

Merge sgluhov@bk-internal.mysql.com:/home/bk/mysql-4.1

into gluh.mysql.r18.ru:/home/gluh/mysql-4.1.clear

parents 54735ae3 433c2bf5
...@@ -1489,11 +1489,11 @@ udf_handler::fix_fields(THD *thd, TABLE_LIST *tables, Item_result_field *func, ...@@ -1489,11 +1489,11 @@ udf_handler::fix_fields(THD *thd, TABLE_LIST *tables, Item_result_field *func,
arg++,i++) arg++,i++)
{ {
if ((*arg)->fix_fields(thd, tables, arg)) if ((*arg)->fix_fields(thd, tables, arg))
return 1; DBUG_RETURN(1);
// we can't assign 'item' before, because fix_fields() can change arg // we can't assign 'item' before, because fix_fields() can change arg
Item *item= *arg; Item *item= *arg;
if (item->check_cols(1)) if (item->check_cols(1))
return 1; DBUG_RETURN(1);
/* /*
TODO: We should think about this. It is not always TODO: We should think about this. It is not always
right way just to set an UDF result to return my_charset_bin right way just to set an UDF result to return my_charset_bin
......
...@@ -298,7 +298,11 @@ udf_func *find_udf(const char *name,uint length,bool mark_used) ...@@ -298,7 +298,11 @@ udf_func *find_udf(const char *name,uint length,bool mark_used)
DBUG_ENTER("find_udf"); DBUG_ENTER("find_udf");
/* TODO: This should be changed to reader locks someday! */ /* TODO: This should be changed to reader locks someday! */
rw_rdlock(&THR_LOCK_udf); if (mark_used)
rw_wrlock(&THR_LOCK_udf); /* Called during fix_fields */
else
rw_rdlock(&THR_LOCK_udf); /* Called during parsing */
if ((udf=(udf_func*) hash_search(&udf_hash,(byte*) name, if ((udf=(udf_func*) hash_search(&udf_hash,(byte*) name,
length ? length : (uint) strlen(name)))) length ? length : (uint) strlen(name))))
{ {
...@@ -474,7 +478,7 @@ int mysql_drop_function(THD *thd,const LEX_STRING *udf_name) ...@@ -474,7 +478,7 @@ int mysql_drop_function(THD *thd,const LEX_STRING *udf_name)
if (!(udf=(udf_func*) hash_search(&udf_hash,(byte*) udf_name->str, if (!(udf=(udf_func*) hash_search(&udf_hash,(byte*) udf_name->str,
(uint) udf_name->length))) (uint) udf_name->length)))
{ {
net_printf(thd, ER_FUNCTION_NOT_DEFINED, udf_name); net_printf(thd, ER_FUNCTION_NOT_DEFINED, udf_name->str);
goto err; goto err;
} }
del_udf(udf); del_udf(udf);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment