mirror of
https://github.com/MariaDB/server.git
synced 2025-08-01 03:47:19 +03:00
Bug#17261 Passing a variable from a stored procedure to UDF crashes mysqld
- Pass "buffers[i]" to val_str() in udf_handler::fix_fields insteead of NULL. - Add testcase for UDF that will load and run the udf_example functions if available sql/item_func.cc: Instead of passing a NULL pointer into val_str, use the "buffers" array to provide a temp string buffer. sql/udf_example.cc: Spelling error"on"->"one" mysql-test/include/have_udf.inc: New BitKeeper file ``mysql-test/include/have_udf.inc'' mysql-test/r/have_udf.require: New BitKeeper file ``mysql-test/r/have_udf.require'' mysql-test/r/udf.result: New BitKeeper file ``mysql-test/r/udf.result'' mysql-test/t/udf.test: New BitKeeper file ``mysql-test/t/udf.test''
This commit is contained in:
86
mysql-test/r/udf.result
Normal file
86
mysql-test/r/udf.result
Normal file
@ -0,0 +1,86 @@
|
||||
drop table if exists t1;
|
||||
CREATE FUNCTION metaphon RETURNS STRING SONAME 'udf_example.so';
|
||||
CREATE FUNCTION myfunc_double RETURNS REAL SONAME 'udf_example.so';
|
||||
CREATE FUNCTION myfunc_int RETURNS INTEGER SONAME 'udf_example.so';
|
||||
ERROR HY000: Can't find function 'myfunc_int_init' in library
|
||||
CREATE FUNCTION sequence RETURNS INTEGER SONAME "udf_example.so";
|
||||
CREATE FUNCTION lookup RETURNS STRING SONAME 'udf_example.so';
|
||||
CREATE FUNCTION reverse_lookup
|
||||
RETURNS STRING SONAME 'udf_example.so';
|
||||
CREATE AGGREGATE FUNCTION avgcost
|
||||
RETURNS REAL SONAME 'udf_example.so';
|
||||
select myfunc_double();
|
||||
ERROR HY000: myfunc_double must have at least on argument
|
||||
select myfunc_double(1);
|
||||
myfunc_double(1)
|
||||
49.00
|
||||
select myfunc_double(78654);
|
||||
myfunc_double(78654)
|
||||
54.00
|
||||
select myfunc_int();
|
||||
ERROR 42000: FUNCTION test.myfunc_int does not exist
|
||||
select lookup();
|
||||
ERROR HY000: Wrong arguments to lookup; Use the source
|
||||
select lookup("127.0.0.1");
|
||||
lookup("127.0.0.1")
|
||||
127.0.0.1
|
||||
select lookup(127,0,0,1);
|
||||
ERROR HY000: Wrong arguments to lookup; Use the source
|
||||
select lookup("localhost");
|
||||
lookup("localhost")
|
||||
127.0.0.1
|
||||
select reverse_lookup();
|
||||
ERROR HY000: Wrong number of arguments to reverse_lookup; Use the source
|
||||
select reverse_lookup("127.0.0.1");
|
||||
reverse_lookup("127.0.0.1")
|
||||
localhost
|
||||
select reverse_lookup(127,0,0,1);
|
||||
reverse_lookup(127,0,0,1)
|
||||
localhost
|
||||
select reverse_lookup("localhost");
|
||||
reverse_lookup("localhost")
|
||||
NULL
|
||||
select avgcost();
|
||||
ERROR HY000: wrong number of arguments: AVGCOST() requires two arguments
|
||||
select avgcost(100,23.76);
|
||||
ERROR HY000: wrong argument type: AVGCOST() requires an INT and a REAL
|
||||
create table t1(sum int, price float(24));
|
||||
insert into t1 values(100, 50.00), (100, 100.00);
|
||||
select avgcost(sum, price) from t1;
|
||||
avgcost(sum, price)
|
||||
75.0000
|
||||
delete from t1;
|
||||
insert into t1 values(100, 54.33), (200, 199.99);
|
||||
select avgcost(sum, price) from t1;
|
||||
avgcost(sum, price)
|
||||
151.4367
|
||||
drop table t1;
|
||||
select metaphon('hello');
|
||||
metaphon('hello')
|
||||
HL
|
||||
CREATE PROCEDURE `XXX1`(in testval varchar(10))
|
||||
begin
|
||||
select metaphon(testval);
|
||||
end//
|
||||
call XXX1('hello');
|
||||
metaphon(testval)
|
||||
HL
|
||||
drop procedure xxx1;
|
||||
CREATE PROCEDURE `XXX2`()
|
||||
begin
|
||||
declare testval varchar(10);
|
||||
set testval = 'hello';
|
||||
select metaphon(testval);
|
||||
end//
|
||||
call XXX2();
|
||||
metaphon(testval)
|
||||
HL
|
||||
drop procedure xxx2;
|
||||
DROP FUNCTION metaphon;
|
||||
DROP FUNCTION myfunc_double;
|
||||
DROP FUNCTION myfunc_int;
|
||||
ERROR 42000: FUNCTION test.myfunc_int does not exist
|
||||
DROP FUNCTION sequence;
|
||||
DROP FUNCTION lookup;
|
||||
DROP FUNCTION reverse_lookup;
|
||||
DROP FUNCTION avgcost;
|
Reference in New Issue
Block a user