diff options
-rw-r--r-- | mysql-test/r/sp.result | 6 | ||||
-rw-r--r-- | mysql-test/t/sp.test | 17 | ||||
-rw-r--r-- | sql/item_func.h | 12 |
3 files changed, 32 insertions, 3 deletions
diff --git a/mysql-test/r/sp.result b/mysql-test/r/sp.result index 4cc59679ce5..a4a3968672f 100644 --- a/mysql-test/r/sp.result +++ b/mysql-test/r/sp.result @@ -2964,4 +2964,10 @@ select bug9102(); drop function bug9102| bug9102() a +drop procedure if exists bug7648| +create function bug7648() returns bit(8) return 'a'| +select bug7648()| +bug7648() +a +drop function bug7648| drop table t1,t2; diff --git a/mysql-test/t/sp.test b/mysql-test/t/sp.test index 3934e8ad17a..6c833b14482 100644 --- a/mysql-test/t/sp.test +++ b/mysql-test/t/sp.test @@ -3627,16 +3627,29 @@ set global query_cache_size = @qcs1| delete from t1| drop function bug9902| + # -# BUG#9102: New bug synopsis +# BUG#9102: Stored proccedures: function which returns blob causes crash # --disable_warnings drop function if exists bug9102| --enable_warnings create function bug9102() returns blob return 'a'| -select bug9102(); +select bug9102()| drop function bug9102| + +# +# BUG#7648: Stored procedure crash when invoking a function that returns a bit +# +--disable_warnings +drop procedure if exists bug7648| +--enable_warnings +create function bug7648() returns bit(8) return 'a'| +select bug7648()| +drop function bug7648| + + # # BUG#NNNN: New bug synopsis # diff --git a/sql/item_func.h b/sql/item_func.h index 9bf21fa1aa3..b39786e5544 100644 --- a/sql/item_func.h +++ b/sql/item_func.h @@ -1308,7 +1308,17 @@ public: longlong val_int() { - return (longlong)Item_func_sp::val_real(); + Item *it; + longlong l; + + if (execute(&it)) + { + null_value= 1; + return 0LL; + } + l= it->val_int(); + null_value= it->null_value; + return l; } double val_real() |