1
0
mirror of https://github.com/MariaDB/server.git synced 2025-07-27 18:02:13 +03:00

A fix and a test case for Bug#29050 Creation of a legal stored procedure

fails if a database is not selected prior.

The problem manifested itself when a user tried to
create a routine that had non-fully-qualified identifiers in its bodies
and there was no current database selected.

This is a regression introduced by the fix for Bug 19022:

The patch for Bug 19022 changes the code to always produce a warning
if we can't resolve the current database in the parser. 
In this case this was not necessary, since even though the produced
parsed tree was incorrect, we never re-use sphead
that was obtained at first parsing of CREATE PROCEDURE.
The sphead that is anyhow used is always obtained through db_load_routine,
and there we change the current database to sphead->m_db before
calling yyparse.

The idea of the fix is to resolve the current database directly using 
lex->sphead->m_db member when parsing a stored routine body, when
such is present.

This patch removes the need to reset the current database
when loading a trigger or routine definition into SP cache.
The redundant code will be removed in 5.1.
This commit is contained in:
kostja@bodhi.(none)
2007-07-05 11:34:04 +04:00
parent c3f37e0b3d
commit a7b05cb786
8 changed files with 93 additions and 14 deletions

View File

@ -1237,6 +1237,8 @@ typedef struct st_lex : public Query_tables_list
context_stack.pop();
}
bool copy_db_to(char **p_db, uint *p_db_length) const;
Name_resolution_context *current_context()
{
return context_stack.head();