summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexander Barkov <bar@mariadb.org>2017-07-12 22:51:06 +0400
committerAlexander Barkov <bar@mariadb.org>2017-07-12 22:51:06 +0400
commit0f348bcd965cd47784634508da2202aba2dc0547 (patch)
tree31b7a3b309ec46e02355ab397c16a131e0ae07be
parent7c3df72d0a627aa6c12af14d57b2664af7f8b380 (diff)
downloadmariadb-git-0f348bcd965cd47784634508da2202aba2dc0547.tar.gz
MDEV-13302 Avoid using LEX::spname during CREATE PROCEDURE and CREATE FUNCTION
-rw-r--r--sql/sp.cc11
-rw-r--r--sql/sp_cache.cc2
-rw-r--r--sql/sp_cache.h4
-rw-r--r--sql/sql_parse.cc4
-rw-r--r--sql/sql_yacc.yy2
-rw-r--r--sql/sql_yacc_ora.yy2
6 files changed, 11 insertions, 14 deletions
diff --git a/sql/sp.cc b/sql/sp.cc
index a01861b3d61..c80078ebe19 100644
--- a/sql/sp.cc
+++ b/sql/sp.cc
@@ -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;
diff --git a/sql/sp_cache.cc b/sql/sp_cache.cc
index a97db59b9c6..70ba5084914 100644
--- a/sql/sp_cache.cc
+++ b/sql/sp_cache.cc
@@ -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;
diff --git a/sql/sp_cache.h b/sql/sp_cache.h
index 4ab9240430a..51886a61ee9 100644
--- a/sql/sp_cache.h
+++ b/sql/sp_cache.h
@@ -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();
diff --git a/sql/sql_parse.cc b/sql/sql_parse.cc
index 95af02f6ab3..f9be9019489 100644
--- a/sql/sql_parse.cc
+++ b/sql/sql_parse.cc
@@ -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;
}
diff --git a/sql/sql_yacc.yy b/sql/sql_yacc.yy
index 17f8b3849d3..c9c922f6a55 100644
--- a/sql/sql_yacc.yy
+++ b/sql/sql_yacc.yy
@@ -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
diff --git a/sql/sql_yacc_ora.yy b/sql/sql_yacc_ora.yy
index e177ed1cb48..95d60b463c2 100644
--- a/sql/sql_yacc_ora.yy
+++ b/sql/sql_yacc_ora.yy
@@ -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