Commit 0f348bcd authored by Alexander Barkov's avatar Alexander Barkov

MDEV-13302 Avoid using LEX::spname during CREATE PROCEDURE and CREATE FUNCTION

parent 7c3df72d
......@@ -470,7 +470,8 @@ static TABLE *open_proc_table_for_update(THD *thd)
*/
static int
db_find_routine_aux(THD *thd, stored_procedure_type type, const sp_name *name,
db_find_routine_aux(THD *thd, stored_procedure_type type,
const Database_qualified_name *name,
TABLE *table)
{
uchar key[MAX_KEY_LENGTH]; // db, name, optional key length type
......@@ -969,7 +970,7 @@ sp_returns_type(THD *thd, String &result, sp_head *sp)
*/
static int
sp_drop_routine_internal(THD *thd, stored_procedure_type type,
const sp_name *name, TABLE *table)
const Database_qualified_name *name, TABLE *table)
{
DBUG_ENTER("sp_drop_routine_internal");
......@@ -1079,11 +1080,11 @@ sp_create_routine(THD *thd, stored_procedure_type type, sp_head *sp)
else
{
/* Checking if the routine already exists */
if (db_find_routine_aux(thd, type, lex->spname, table) == SP_OK)
if (db_find_routine_aux(thd, type, sp, table) == SP_OK)
{
if (lex->create_info.or_replace())
{
if ((ret= sp_drop_routine_internal(thd, type, lex->spname, table)))
if ((ret= sp_drop_routine_internal(thd, type, sp, table)))
goto done;
}
else if (lex->create_info.if_not_exists())
......@@ -1092,7 +1093,7 @@ sp_create_routine(THD *thd, stored_procedure_type type, sp_head *sp)
ER_SP_ALREADY_EXISTS,
ER_THD(thd, ER_SP_ALREADY_EXISTS),
SP_TYPE_STRING(type),
lex->spname->m_name.str);
sp->m_name.str);
ret= FALSE;
......
......@@ -189,7 +189,7 @@ void sp_cache_insert(sp_cache **cp, sp_head *sp)
NULL if the routine not found.
*/
sp_head *sp_cache_lookup(sp_cache **cp, const sp_name *name)
sp_head *sp_cache_lookup(sp_cache **cp, const Database_qualified_name *name)
{
char buf[NAME_LEN * 2 + 2];
sp_cache *c= *cp;
......
......@@ -32,7 +32,7 @@
class sp_head;
class sp_cache;
class sp_name;
class Database_qualified_name;
/*
Cache usage scenarios:
......@@ -59,7 +59,7 @@ void sp_cache_init();
void sp_cache_end();
void sp_cache_clear(sp_cache **cp);
void sp_cache_insert(sp_cache **cp, sp_head *sp);
sp_head *sp_cache_lookup(sp_cache **cp, const sp_name *name);
sp_head *sp_cache_lookup(sp_cache **cp, const Database_qualified_name *name);
void sp_cache_invalidate();
void sp_cache_flush_obsolete(sp_cache **cp, sp_head **sp);
ulong sp_cache_version();
......
......@@ -2935,8 +2935,8 @@ static int mysql_create_routine(THD *thd, LEX *lex)
/* Checking the drop permissions if CREATE OR REPLACE is used */
if (lex->create_info.or_replace())
{
if (check_routine_access(thd, ALTER_PROC_ACL, lex->spname->m_db.str,
lex->spname->m_name.str,
if (check_routine_access(thd, ALTER_PROC_ACL, lex->sphead->m_db.str,
lex->sphead->m_name.str,
lex->sql_command == SQLCOM_DROP_PROCEDURE, 0))
return true;
}
......
......@@ -16664,7 +16664,6 @@ sf_tail:
if (!Lex->make_sp_head_no_recursive(thd, $1, $2,
TYPE_ENUM_FUNCTION))
MYSQL_YYABORT;
Lex->spname= $2;
}
sp_parenthesized_fdparam_list
sf_return_type
......@@ -16700,7 +16699,6 @@ sp_tail:
if (!Lex->make_sp_head_no_recursive(thd, $1, $2,
TYPE_ENUM_PROCEDURE))
MYSQL_YYABORT;
Lex->spname= $2;
}
sp_parenthesized_pdparam_list
sp_c_chistics
......
......@@ -16903,7 +16903,6 @@ sf_tail:
if (!Lex->make_sp_head_no_recursive(thd, $1, $2,
TYPE_ENUM_FUNCTION))
MYSQL_YYABORT;
Lex->spname= $2;
}
opt_sp_parenthesized_fdparam_list
sf_return_type
......@@ -16942,7 +16941,6 @@ sp_tail:
if (!Lex->make_sp_head_no_recursive(thd, $1, $2,
TYPE_ENUM_PROCEDURE))
MYSQL_YYABORT;
Lex->spname= $2;
}
opt_sp_parenthesized_pdparam_list
sp_c_chistics
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment