diff options
Diffstat (limited to 'sql/sp.cc')
-rw-r--r-- | sql/sp.cc | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/sql/sp.cc b/sql/sp.cc index b77f60a32ad..d70da1b1421 100644 --- a/sql/sp.cc +++ b/sql/sp.cc @@ -314,9 +314,19 @@ db_create_routine(THD *thd, int type, sp_head *sp) TABLE *table; TABLE_LIST tables; char definer[HOSTNAME_LENGTH+USERNAME_LENGTH+2]; + char olddb[128]; + bool dbchanged; DBUG_ENTER("db_create_routine"); DBUG_PRINT("enter", ("type: %d name: %*s",type,sp->m_name.length,sp->m_name.str)); + dbchanged= FALSE; + if ((ret= sp_use_new_db(thd, sp->m_db.str, olddb, sizeof(olddb), + 0, &dbchanged))) + { + ret= SP_NO_DB_ERROR; + goto done; + } + memset(&tables, 0, sizeof(tables)); tables.db= (char*)"mysql"; tables.real_name= tables.alias= (char*)"proc"; @@ -370,6 +380,8 @@ db_create_routine(THD *thd, int type, sp_head *sp) done: close_thread_tables(thd); + if (dbchanged) + (void)sp_change_db(thd, olddb, 1); DBUG_RETURN(ret); } |