diff options
author | unknown <msvensson@devsrv-b.mysql.com> | 2006-02-15 17:11:24 +0100 |
---|---|---|
committer | unknown <msvensson@devsrv-b.mysql.com> | 2006-02-15 17:11:24 +0100 |
commit | 79258e4480bfacd94384263240feba68f83a9a79 (patch) | |
tree | ecb3d7a4c5fccfa3a7864020bfd8137d609c0dde /mysql-test/r/udf.result | |
parent | 86c920ba776ddf5e9999e8293d5824be25bb43b6 (diff) | |
download | mariadb-git-79258e4480bfacd94384263240feba68f83a9a79.tar.gz |
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''
Diffstat (limited to 'mysql-test/r/udf.result')
-rw-r--r-- | mysql-test/r/udf.result | 86 |
1 files changed, 86 insertions, 0 deletions
diff --git a/mysql-test/r/udf.result b/mysql-test/r/udf.result new file mode 100644 index 00000000000..d6f58d35fb7 --- /dev/null +++ b/mysql-test/r/udf.result @@ -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; |