mirror of
https://github.com/MariaDB/server.git
synced 2025-01-17 20:42:30 +01:00
Merge damien-katzs-computer.local:/Users/dkatz/mysql50
into damien-katzs-computer.local:/Users/dkatz/50_udf_const sql/item_func.cc: Auto merged
This commit is contained in:
commit
b371ee8a40
5 changed files with 99 additions and 1 deletions
|
@ -296,4 +296,28 @@ Qcache_queries_in_cache 0
|
||||||
drop table t1;
|
drop table t1;
|
||||||
drop function metaphon;
|
drop function metaphon;
|
||||||
set GLOBAL query_cache_size=default;
|
set GLOBAL query_cache_size=default;
|
||||||
|
CREATE TABLE const_len_bug (
|
||||||
|
str_const varchar(4000),
|
||||||
|
result1 varchar(4000),
|
||||||
|
result2 varchar(4000)
|
||||||
|
);
|
||||||
|
CREATE TRIGGER check_const_len_trigger BEFORE INSERT ON const_len_bug FOR EACH ROW BEGIN
|
||||||
|
set NEW.str_const = 'bar';
|
||||||
|
set NEW.result2 = check_const_len(NEW.str_const);
|
||||||
|
END |
|
||||||
|
CREATE PROCEDURE check_const_len_sp (IN str_const VARCHAR(4000))
|
||||||
|
BEGIN
|
||||||
|
DECLARE result VARCHAR(4000);
|
||||||
|
SET result = check_const_len(str_const);
|
||||||
|
insert into const_len_bug values(str_const, result, "");
|
||||||
|
END |
|
||||||
|
CREATE FUNCTION check_const_len RETURNS string SONAME "UDF_EXAMPLE_LIB";
|
||||||
|
CALL check_const_len_sp("foo");
|
||||||
|
SELECT * from const_len_bug;
|
||||||
|
str_const result1 result2
|
||||||
|
bar Correct length Correct length
|
||||||
|
DROP FUNCTION check_const_len;
|
||||||
|
DROP PROCEDURE check_const_len_sp;
|
||||||
|
DROP TRIGGER check_const_len_trigger;
|
||||||
|
DROP TABLE const_len_bug;
|
||||||
End of 5.0 tests.
|
End of 5.0 tests.
|
||||||
|
|
|
@ -312,4 +312,40 @@ drop function metaphon;
|
||||||
set GLOBAL query_cache_size=default;
|
set GLOBAL query_cache_size=default;
|
||||||
|
|
||||||
|
|
||||||
|
#
|
||||||
|
# Bug #29804 UDF parameters don't contain correct string length
|
||||||
|
#
|
||||||
|
|
||||||
|
CREATE TABLE const_len_bug (
|
||||||
|
str_const varchar(4000),
|
||||||
|
result1 varchar(4000),
|
||||||
|
result2 varchar(4000)
|
||||||
|
);
|
||||||
|
|
||||||
|
DELIMITER |;
|
||||||
|
CREATE TRIGGER check_const_len_trigger BEFORE INSERT ON const_len_bug FOR EACH ROW BEGIN
|
||||||
|
set NEW.str_const = 'bar';
|
||||||
|
set NEW.result2 = check_const_len(NEW.str_const);
|
||||||
|
END |
|
||||||
|
|
||||||
|
CREATE PROCEDURE check_const_len_sp (IN str_const VARCHAR(4000))
|
||||||
|
BEGIN
|
||||||
|
DECLARE result VARCHAR(4000);
|
||||||
|
SET result = check_const_len(str_const);
|
||||||
|
insert into const_len_bug values(str_const, result, "");
|
||||||
|
END |
|
||||||
|
DELIMITER ;|
|
||||||
|
|
||||||
|
--replace_result $UDF_EXAMPLE_LIB UDF_EXAMPLE_LIB
|
||||||
|
eval CREATE FUNCTION check_const_len RETURNS string SONAME "$UDF_EXAMPLE_LIB";
|
||||||
|
|
||||||
|
CALL check_const_len_sp("foo");
|
||||||
|
|
||||||
|
SELECT * from const_len_bug;
|
||||||
|
|
||||||
|
DROP FUNCTION check_const_len;
|
||||||
|
DROP PROCEDURE check_const_len_sp;
|
||||||
|
DROP TRIGGER check_const_len_trigger;
|
||||||
|
DROP TABLE const_len_bug;
|
||||||
|
|
||||||
--echo End of 5.0 tests.
|
--echo End of 5.0 tests.
|
||||||
|
|
|
@ -2924,7 +2924,8 @@ udf_handler::fix_fields(THD *thd, Item_result_field *func,
|
||||||
String *res= arguments[i]->val_str(&buffers[i]);
|
String *res= arguments[i]->val_str(&buffers[i]);
|
||||||
if (arguments[i]->null_value)
|
if (arguments[i]->null_value)
|
||||||
continue;
|
continue;
|
||||||
f_args.args[i]= (char*) res->ptr();
|
f_args.args[i]= (char*) res->c_ptr();
|
||||||
|
f_args.lengths[i]= res->length();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case INT_RESULT:
|
case INT_RESULT:
|
||||||
|
|
|
@ -1106,4 +1106,39 @@ char * is_const(UDF_INIT *initid, UDF_ARGS *args __attribute__((unused)),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
my_bool check_const_len_init(UDF_INIT *initid, UDF_ARGS *args, char *message)
|
||||||
|
{
|
||||||
|
if (args->arg_count != 1)
|
||||||
|
{
|
||||||
|
strmov(message, "CHECK_CONST_LEN accepts only one argument");
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
if (args->args[0] == 0)
|
||||||
|
{
|
||||||
|
initid->ptr= (char*)"Not constant";
|
||||||
|
}
|
||||||
|
else if(strlen(args->args[0]) == args->lengths[0])
|
||||||
|
{
|
||||||
|
initid->ptr= (char*)"Correct length";
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
initid->ptr= (char*)"Wrong length";
|
||||||
|
}
|
||||||
|
initid->max_length = 100;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
char * check_const_len(UDF_INIT *initid, UDF_ARGS *args __attribute__((unused)),
|
||||||
|
char *result, unsigned long *length,
|
||||||
|
char *is_null, char *error __attribute__((unused)))
|
||||||
|
{
|
||||||
|
strmov(result, initid->ptr);
|
||||||
|
*length= strlen(result);
|
||||||
|
*is_null= 0;
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
#endif /* HAVE_DLOPEN */
|
#endif /* HAVE_DLOPEN */
|
||||||
|
|
|
@ -23,3 +23,5 @@ EXPORTS
|
||||||
avgcost
|
avgcost
|
||||||
is_const
|
is_const
|
||||||
is_const_init
|
is_const_init
|
||||||
|
check_const_len
|
||||||
|
check_const_len_init
|
||||||
|
|
Loading…
Reference in a new issue