diff --git a/mysql-test/r/sp.result b/mysql-test/r/sp.result index 05f9000bb333a3f0186ad922f2034cb37c6bfc6c..414eeada0dec404ef1882934c7b847770498aeab 100644 --- a/mysql-test/r/sp.result +++ b/mysql-test/r/sp.result @@ -7849,3 +7849,36 @@ c1 c2 count(c3) 2012-03-01 01:00:00 3 1 2012-03-01 02:00:00 3 1 DROP PROCEDURE p1; +# +# LP bug#1002157 : testing stored function +# bug#62125 result for null incorrectly yields 1292 warning. +# +DROP FUNCTION IF EXISTS f1; +DROP FUNCTION IF EXISTS f2; +DROP FUNCTION IF EXISTS f3; +DROP FUNCTION IF EXISTS f4; +CREATE FUNCTION f1() RETURNS VARCHAR(1) +BEGIN RETURN 'X'; END;/ +CREATE FUNCTION f2() RETURNS CHAR(1) +BEGIN RETURN 'X'; END;/ +CREATE FUNCTION f3() RETURNS VARCHAR(1) +BEGIN RETURN NULL; END;/ +CREATE FUNCTION f4() RETURNS CHAR(1) +BEGIN RETURN NULL; END;/ +SELECT f1() IS NULL; +f1() IS NULL +0 +SELECT f2() IS NULL; +f2() IS NULL +0 +SELECT f3() IS NULL; +f3() IS NULL +1 +SELECT f4() IS NULL; +f4() IS NULL +1 +DROP FUNCTION f1; +DROP FUNCTION f2; +DROP FUNCTION f3; +DROP FUNCTION f4; +# End of 5.5 test diff --git a/mysql-test/t/sp.test b/mysql-test/t/sp.test index 5d92fea0bf1bb29d9f81b6790a43f519703fafb0..084210401095db45c4445fb301f1c22ae102c826 100644 --- a/mysql-test/t/sp.test +++ b/mysql-test/t/sp.test @@ -9145,3 +9145,44 @@ CALL p1(2); CALL p1(1); DROP PROCEDURE p1; + +--echo # +--echo # LP bug#1002157 : testing stored function +--echo # bug#62125 result for null incorrectly yields 1292 warning. +--echo # + +--disable_warnings +DROP FUNCTION IF EXISTS f1; +DROP FUNCTION IF EXISTS f2; +DROP FUNCTION IF EXISTS f3; +DROP FUNCTION IF EXISTS f4; +--enable_warnings + +delimiter /; + +CREATE FUNCTION f1() RETURNS VARCHAR(1) +BEGIN RETURN 'X'; END;/ + +CREATE FUNCTION f2() RETURNS CHAR(1) +BEGIN RETURN 'X'; END;/ + +CREATE FUNCTION f3() RETURNS VARCHAR(1) +BEGIN RETURN NULL; END;/ + +CREATE FUNCTION f4() RETURNS CHAR(1) +BEGIN RETURN NULL; END;/ + +delimiter ;/ + +SELECT f1() IS NULL; +SELECT f2() IS NULL; +SELECT f3() IS NULL; +SELECT f4() IS NULL; + +DROP FUNCTION f1; +DROP FUNCTION f2; +DROP FUNCTION f3; +DROP FUNCTION f4; + +--echo # End of 5.5 test + diff --git a/sql/item_func.h b/sql/item_func.h index f91107c54451800206e6ef6ec50a3f09ec6b103e..cb9c1929d7d0fd4df026773b60adffbd82978d29 100644 --- a/sql/item_func.h +++ b/sql/item_func.h @@ -1941,6 +1941,11 @@ class Item_func_sp :public Item_func return str; } + void update_null_value() + { + execute(); + } + virtual bool change_context_processor(uchar *cntx) { context= (Name_resolution_context *)cntx; return FALSE; } @@ -1955,6 +1960,7 @@ class Item_func_sp :public Item_func { return sp_result_field; } + bool check_vcol_func_processor(uchar *int_arg) { return trace_unsupported_by_check_vcol_func_processor(func_name());