mirror of
https://github.com/MariaDB/server.git
synced 2026-05-14 19:07:15 +02:00
Merge with MariaDB 5.1
This commit is contained in:
commit
6920457142
1136 changed files with 25344 additions and 15057 deletions
48
sql/sp.cc
48
sql/sp.cc
|
|
@ -1,4 +1,5 @@
|
|||
/* Copyright (C) 2002 MySQL AB
|
||||
/*
|
||||
Copyright (c) 2002, 2011, Oracle and/or its affiliates.
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
|
|
@ -11,7 +12,8 @@
|
|||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
|
||||
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*/
|
||||
|
||||
#include "mysql_priv.h"
|
||||
#include "sp_head.h"
|
||||
|
|
@ -713,6 +715,37 @@ Silence_deprecated_warning::handle_error(uint sql_errno, const char *message,
|
|||
}
|
||||
|
||||
|
||||
class Bad_db_error_handler : public Internal_error_handler
|
||||
{
|
||||
public:
|
||||
Bad_db_error_handler()
|
||||
:m_error_caught(false)
|
||||
{}
|
||||
|
||||
virtual bool handle_error(uint sql_errno, const char *message,
|
||||
MYSQL_ERROR::enum_warning_level level,
|
||||
THD *thd);
|
||||
|
||||
bool error_caught() const { return m_error_caught; }
|
||||
|
||||
private:
|
||||
bool m_error_caught;
|
||||
};
|
||||
|
||||
bool
|
||||
Bad_db_error_handler::handle_error(uint sql_errno, const char *message,
|
||||
MYSQL_ERROR::enum_warning_level level,
|
||||
THD *thd)
|
||||
{
|
||||
if (sql_errno == ER_BAD_DB_ERROR)
|
||||
{
|
||||
m_error_caught= true;
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
static int
|
||||
db_load_routine(THD *thd, stored_procedure_type type,
|
||||
sp_name *name, sp_head **sphp,
|
||||
|
|
@ -731,7 +764,7 @@ db_load_routine(THD *thd, stored_procedure_type type,
|
|||
ha_rows old_select_limit= thd->variables.select_limit;
|
||||
sp_rcontext *old_spcont= thd->spcont;
|
||||
Silence_deprecated_warning warning_handler;
|
||||
|
||||
Bad_db_error_handler db_not_exists_handler;
|
||||
char definer_user_name_holder[USERNAME_LENGTH + 1];
|
||||
LEX_STRING definer_user_name= { definer_user_name_holder,
|
||||
USERNAME_LENGTH };
|
||||
|
|
@ -772,6 +805,7 @@ db_load_routine(THD *thd, stored_procedure_type type,
|
|||
goto end;
|
||||
}
|
||||
|
||||
thd->push_internal_handler(&db_not_exists_handler);
|
||||
/*
|
||||
Change the current database (if needed).
|
||||
|
||||
|
|
@ -782,9 +816,17 @@ db_load_routine(THD *thd, stored_procedure_type type,
|
|||
&cur_db_changed))
|
||||
{
|
||||
ret= SP_INTERNAL_ERROR;
|
||||
thd->pop_internal_handler();
|
||||
goto end;
|
||||
}
|
||||
thd->pop_internal_handler();
|
||||
if (db_not_exists_handler.error_caught())
|
||||
{
|
||||
ret= SP_INTERNAL_ERROR;
|
||||
my_error(ER_BAD_DB_ERROR, MYF(0), name->m_db.str);
|
||||
|
||||
goto end;
|
||||
}
|
||||
thd->spcont= NULL;
|
||||
|
||||
{
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue