Additional fix for BUG#7049, after review.
Make sure "select" aborts when finding a SP condition handler beyond the current scope.
This commit is contained in:
parent
6a88684eb3
commit
e585315703
@ -3310,7 +3310,6 @@ select 1|
|
||||
1
|
||||
call bug12379_1()|
|
||||
bug12379()
|
||||
NULL
|
||||
42
|
||||
42
|
||||
select 2|
|
||||
@ -3318,7 +3317,6 @@ select 2|
|
||||
2
|
||||
call bug12379_2()|
|
||||
bug12379()
|
||||
NULL
|
||||
select 3|
|
||||
3
|
||||
3
|
||||
|
@ -2342,6 +2342,8 @@ static int my_message_sql(uint error, const char *str, myf MyFlags)
|
||||
if (thd->spcont &&
|
||||
thd->spcont->find_handler(error, MYSQL_ERROR::WARN_LEVEL_ERROR))
|
||||
{
|
||||
if (! thd->spcont->found_handler_here())
|
||||
thd->net.report_error= 1; /* Make "select" abort correctly */
|
||||
DBUG_RETURN(0);
|
||||
}
|
||||
|
||||
|
@ -76,6 +76,8 @@ void net_send_error(THD *thd, uint sql_errno, const char *err)
|
||||
if (thd->spcont && thd->spcont->find_handler(sql_errno,
|
||||
MYSQL_ERROR::WARN_LEVEL_ERROR))
|
||||
{
|
||||
if (! thd->spcont->found_handler_here())
|
||||
thd->net.report_error= 1; /* Make "select" abort correctly */
|
||||
DBUG_VOID_RETURN;
|
||||
}
|
||||
thd->query_error= 1; // needed to catch query errors during replication
|
||||
@ -181,6 +183,8 @@ net_printf_error(THD *thd, uint errcode, ...)
|
||||
if (thd->spcont && thd->spcont->find_handler(errcode,
|
||||
MYSQL_ERROR::WARN_LEVEL_ERROR))
|
||||
{
|
||||
if (! thd->spcont->found_handler_here())
|
||||
thd->net.report_error= 1; /* Make "select" abort correctly */
|
||||
DBUG_VOID_RETURN;
|
||||
}
|
||||
thd->query_error= 1; // needed to catch query errors during replication
|
||||
|
@ -149,6 +149,13 @@ class sp_rcontext : public Sql_alloc
|
||||
return m_handler[m_hfound].type;
|
||||
}
|
||||
|
||||
// Returns true if we found a handler in this context
|
||||
inline bool
|
||||
found_handler_here()
|
||||
{
|
||||
return (m_hfound >= 0);
|
||||
}
|
||||
|
||||
// Clears the handler find state
|
||||
inline void
|
||||
clear_handler()
|
||||
|
@ -144,6 +144,8 @@ MYSQL_ERROR *push_warning(THD *thd, MYSQL_ERROR::enum_warning_level level,
|
||||
thd->really_abort_on_warning()) ?
|
||||
MYSQL_ERROR::WARN_LEVEL_ERROR : level))
|
||||
{
|
||||
if (! thd->spcont->found_handler_here())
|
||||
thd->net.report_error= 1; /* Make "select" abort correctly */
|
||||
DBUG_RETURN(NULL);
|
||||
}
|
||||
query_cache_abort(&thd->net);
|
||||
|
Loading…
x
Reference in New Issue
Block a user