Commit 6ad4ef8a authored by unknown's avatar unknown

Bug#19904: UDF: not initialized *is_null per row

The is_null value was initialized once and thereafter only set to indicate
NULL, and never unset to indicate not-NULL.

Now set is_null to false, in addition to only setting it to true when the value 
in question is null.


mysql-test/r/udf.result:
  Add result.
mysql-test/t/udf.test:
  Add test.
sql/sql_udf.h:
  Initialize is_null to false before trying to use it, so that historical NULLs
  don't affect our operation.
parent c3c9685c
......@@ -76,6 +76,24 @@ call XXX2();
metaphon(testval)
HL
drop procedure xxx2;
CREATE TABLE bug19904(n INT, v varchar(10));
INSERT INTO bug19904 VALUES (1,'one'),(2,'two'),(NULL,NULL),(3,'three'),(4,'four');
SELECT myfunc_double(n) AS f FROM bug19904;
f
49.00
50.00
NULL
51.00
52.00
SELECT metaphon(v) AS f FROM bug19904;
f
ON
TW
NULL
0R
FR
DROP TABLE bug19904;
End of 5.0 tests.
DROP FUNCTION metaphon;
DROP FUNCTION myfunc_double;
DROP FUNCTION myfunc_nonexist;
......
......@@ -99,6 +99,17 @@ delimiter ;//
call XXX2();
drop procedure xxx2;
#
# Bug#19904: UDF: not initialized *is_null per row
#
CREATE TABLE bug19904(n INT, v varchar(10));
INSERT INTO bug19904 VALUES (1,'one'),(2,'two'),(NULL,NULL),(3,'three'),(4,'four');
SELECT myfunc_double(n) AS f FROM bug19904;
SELECT metaphon(v) AS f FROM bug19904;
DROP TABLE bug19904;
--echo End of 5.0 tests.
#
# Drop the example functions from udf_example
......@@ -114,3 +125,4 @@ DROP FUNCTION lookup;
DROP FUNCTION reverse_lookup;
DROP FUNCTION avgcost;
......@@ -70,6 +70,7 @@ class udf_handler :public Sql_alloc
void cleanup();
double val(my_bool *null_value)
{
is_null= 0;
if (get_arguments())
{
*null_value=1;
......@@ -88,6 +89,7 @@ class udf_handler :public Sql_alloc
}
longlong val_int(my_bool *null_value)
{
is_null= 0;
if (get_arguments())
{
*null_value=1;
......
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