diff options
author | Davi Arnaut <Davi.Arnaut@Sun.COM> | 2009-11-10 18:31:28 -0200 |
---|---|---|
committer | Davi Arnaut <Davi.Arnaut@Sun.COM> | 2009-11-10 18:31:28 -0200 |
commit | e879919a9f7bb3681bc4a8522c30e335d1fc28ce (patch) | |
tree | d803bec0022e21f905aea52acf60f35a85e92762 /mysql-test/t/sp-error.test | |
parent | 17871ade9a47d1c2e34187c0be9c2cb880d29caa (diff) | |
download | mariadb-git-e879919a9f7bb3681bc4a8522c30e335d1fc28ce.tar.gz |
Backport of Bug#15192 to mysql-next-mr
------------------------------------------------------------
revno: 2597.4.17
revision-id: sp1r-davi@mysql.com/endora.local-20080328174753-24337
parent: sp1r-anozdrin/alik@quad.opbmk-20080328140038-16479
committer: davi@mysql.com/endora.local
timestamp: Fri 2008-03-28 14:47:53 -0300
message:
Bug#15192 "fatal errors" are caught by handlers in stored procedures
The problem is that fatal errors (e.g.: out of memory) were being
caught by stored procedure exception handlers which could cause
the execution to not be stopped due to a continue handler.
The solution is to not call any exception handler if the error is
fatal and send the fatal error to the client.
mysql-test/r/sp-error.result:
Add test case result for Bug#15192
mysql-test/t/sp-error.test:
Add test case for Bug#15192
mysys/my_alloc.c:
Pass flag to signal fatal error in memory root allocations.
sql/event_data_objects.cc:
Use init_sql_alloc to initialize memory roots, which uses
the sql error handler to push errors.
sql/ha_partition.cc:
Pass flag to signal fatal error instead of calling fatal_error.
sql/item_func.cc:
Pass flag to signal fatal error instead of calling fatal_error.
sql/item_subselect.cc:
Remove redundant fatal error, memory root already pushes error.
sql/opt_sum.cc:
Pass flag to signal fatal error instead of calling fatal_error.
sql/sp_head.cc:
Allocator already sets fatal error.
sql/sql_class.h:
A error must exist for it to be fatal. Pass flag to signal fatal
error instead of calling fatal_error.
sql/sql_insert.cc:
Pass flag to signal fatal error instead of calling fatal_error.
sql/sql_list.h:
Pass flag to signal fatal error instead of calling fatal_error.
sql/sql_parse.cc:
Pass flag to signal fatal error instead of calling fatal_error.
sql/sql_partition.cc:
Pass flag to signal fatal error instead of calling fatal_error.
sql/sql_select.cc:
Pass flag to signal fatal error instead of calling fatal_error.
sql/sql_servers.cc:
Use init_sql_alloc to initialize memory roots, which uses
the sql error handler to push errors.
sql/sql_show.cc:
Pass flag to signal fatal error instead of calling fatal_error.
sql/sql_trigger.cc:
Use init_sql_alloc to initialize memory roots, which uses
the sql error handler to push errors.
sql/sql_update.cc:
Pass flag to signal fatal error instead of calling fatal_error.
sql/tztime.cc:
Use init_sql_alloc to initialize memory roots, which uses
the sql error handler to push errors.
Diffstat (limited to 'mysql-test/t/sp-error.test')
-rw-r--r-- | mysql-test/t/sp-error.test | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/mysql-test/t/sp-error.test b/mysql-test/t/sp-error.test index 66b960c938f..574002d3d38 100644 --- a/mysql-test/t/sp-error.test +++ b/mysql-test/t/sp-error.test @@ -2421,6 +2421,27 @@ delimiter ;$$ # +# Bug#15192: "fatal errors" are caught by handlers in stored procedures +# + +--disable_warnings +drop procedure if exists p1; +--enable_warnings +set @old_recursion_depth = @@max_sp_recursion_depth; +set @@max_sp_recursion_depth = 255; +delimiter |; +create procedure p1(a int) +begin + declare continue handler for sqlexception select 'exception'; + call p1(a+1); +end| +delimiter ;| +--error 0,ER_STACK_OVERRUN_NEED_MORE +call p1(1); +set @@max_sp_recursion_depth = @old_recursion_depth; +drop procedure p1; + +# # BUG#NNNN: New bug synopsis # #--disable_warnings |