diff options
author | Alexander Barkov <bar@mariadb.org> | 2017-07-12 22:51:06 +0400 |
---|---|---|
committer | Alexander Barkov <bar@mariadb.org> | 2017-07-12 22:51:06 +0400 |
commit | 0f348bcd965cd47784634508da2202aba2dc0547 (patch) | |
tree | 31b7a3b309ec46e02355ab397c16a131e0ae07be | |
parent | 7c3df72d0a627aa6c12af14d57b2664af7f8b380 (diff) | |
download | mariadb-git-0f348bcd965cd47784634508da2202aba2dc0547.tar.gz |
MDEV-13302 Avoid using LEX::spname during CREATE PROCEDURE and CREATE FUNCTION
-rw-r--r-- | sql/sp.cc | 11 | ||||
-rw-r--r-- | sql/sp_cache.cc | 2 | ||||
-rw-r--r-- | sql/sp_cache.h | 4 | ||||
-rw-r--r-- | sql/sql_parse.cc | 4 | ||||
-rw-r--r-- | sql/sql_yacc.yy | 2 | ||||
-rw-r--r-- | sql/sql_yacc_ora.yy | 2 |
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 |