mirror of
https://github.com/MariaDB/server.git
synced 2025-08-31 22:22:30 +03:00
Merge branch '10.1' into 10.2
This commit is contained in:
@@ -119,8 +119,6 @@ static void wsrep_mysql_parse(THD *thd, char *rawbuf, uint length,
|
||||
*/
|
||||
|
||||
/* Used in error handling only */
|
||||
#define SP_TYPE_STRING(LP) \
|
||||
((LP)->sphead->m_type == TYPE_ENUM_FUNCTION ? "FUNCTION" : "PROCEDURE")
|
||||
#define SP_COM_STRING(LP) \
|
||||
((LP)->sql_command == SQLCOM_CREATE_SPFUNCTION || \
|
||||
(LP)->sql_command == SQLCOM_ALTER_FUNCTION || \
|
||||
@@ -5495,7 +5493,6 @@ end_with_restore_list:
|
||||
{
|
||||
uint namelen;
|
||||
char *name;
|
||||
int sp_result= SP_INTERNAL_ERROR;
|
||||
|
||||
DBUG_ASSERT(lex->sphead != 0);
|
||||
DBUG_ASSERT(lex->sphead->m_db.str); /* Must be initialized in the parser */
|
||||
@@ -5506,23 +5503,12 @@ end_with_restore_list:
|
||||
if (check_db_name(&lex->sphead->m_db))
|
||||
{
|
||||
my_error(ER_WRONG_DB_NAME, MYF(0), lex->sphead->m_db.str);
|
||||
goto create_sp_error;
|
||||
goto error;
|
||||
}
|
||||
|
||||
if (check_access(thd, CREATE_PROC_ACL, lex->sphead->m_db.str,
|
||||
NULL, NULL, 0, 0))
|
||||
goto create_sp_error;
|
||||
|
||||
/*
|
||||
Check that a database directory with this name
|
||||
exists. Design note: This won't work on virtual databases
|
||||
like information_schema.
|
||||
*/
|
||||
if (check_db_dir_existence(lex->sphead->m_db.str))
|
||||
{
|
||||
my_error(ER_BAD_DB_ERROR, MYF(0), lex->sphead->m_db.str);
|
||||
goto create_sp_error;
|
||||
}
|
||||
goto error;
|
||||
|
||||
/* Checking the drop permissions if CREATE OR REPLACE is used */
|
||||
if (lex->create_info.or_replace())
|
||||
@@ -5530,7 +5516,7 @@ end_with_restore_list:
|
||||
if (check_routine_access(thd, ALTER_PROC_ACL, lex->spname->m_db.str,
|
||||
lex->spname->m_name.str,
|
||||
lex->sql_command == SQLCOM_DROP_PROCEDURE, 0))
|
||||
goto create_sp_error;
|
||||
goto error;
|
||||
}
|
||||
|
||||
name= lex->sphead->name(&namelen);
|
||||
@@ -5542,18 +5528,17 @@ end_with_restore_list:
|
||||
if (udf)
|
||||
{
|
||||
my_error(ER_UDF_EXISTS, MYF(0), name);
|
||||
goto create_sp_error;
|
||||
goto error;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
if (sp_process_definer(thd))
|
||||
goto create_sp_error;
|
||||
goto error;
|
||||
|
||||
WSREP_TO_ISOLATION_BEGIN(WSREP_MYSQL_DB, NULL, NULL)
|
||||
res= (sp_result= sp_create_routine(thd, lex->sphead->m_type, lex->sphead));
|
||||
switch (sp_result) {
|
||||
case SP_OK: {
|
||||
if (!sp_create_routine(thd, lex->sphead->m_type, lex->sphead))
|
||||
{
|
||||
#ifndef NO_EMBEDDED_ACCESS_CHECKS
|
||||
/* only add privileges if really neccessary */
|
||||
|
||||
@@ -5618,31 +5603,8 @@ end_with_restore_list:
|
||||
}
|
||||
|
||||
#endif
|
||||
break;
|
||||
}
|
||||
case SP_WRITE_ROW_FAILED:
|
||||
my_error(ER_SP_ALREADY_EXISTS, MYF(0), SP_TYPE_STRING(lex), name);
|
||||
break;
|
||||
case SP_BAD_IDENTIFIER:
|
||||
my_error(ER_TOO_LONG_IDENT, MYF(0), name);
|
||||
break;
|
||||
case SP_BODY_TOO_LONG:
|
||||
my_error(ER_TOO_LONG_BODY, MYF(0), name);
|
||||
break;
|
||||
case SP_FLD_STORE_FAILED:
|
||||
my_error(ER_CANT_CREATE_SROUTINE, MYF(0), name);
|
||||
break;
|
||||
default:
|
||||
my_error(ER_SP_STORE_FAILED, MYF(0), SP_TYPE_STRING(lex), name);
|
||||
break;
|
||||
} /* end switch */
|
||||
|
||||
/*
|
||||
Capture all errors within this CASE and
|
||||
clean up the environment.
|
||||
*/
|
||||
create_sp_error:
|
||||
if (sp_result != SP_OK )
|
||||
else
|
||||
goto error;
|
||||
my_ok(thd);
|
||||
break; /* break super switch */
|
||||
@@ -6042,6 +6004,8 @@ create_sp_error:
|
||||
if (check_global_access(thd, SUPER_ACL))
|
||||
break;
|
||||
|
||||
WSREP_TO_ISOLATION_BEGIN(WSREP_MYSQL_DB, NULL, NULL)
|
||||
|
||||
res= create_server(thd, &lex->server_options);
|
||||
break;
|
||||
}
|
||||
@@ -6053,6 +6017,8 @@ create_sp_error:
|
||||
if (check_global_access(thd, SUPER_ACL))
|
||||
break;
|
||||
|
||||
WSREP_TO_ISOLATION_BEGIN(WSREP_MYSQL_DB, NULL, NULL)
|
||||
|
||||
if ((error= alter_server(thd, &lex->server_options)))
|
||||
{
|
||||
DBUG_PRINT("info", ("problem altering server <%s>",
|
||||
@@ -6071,6 +6037,8 @@ create_sp_error:
|
||||
if (check_global_access(thd, SUPER_ACL))
|
||||
break;
|
||||
|
||||
WSREP_TO_ISOLATION_BEGIN(WSREP_MYSQL_DB, NULL, NULL)
|
||||
|
||||
if ((err_code= drop_server(thd, &lex->server_options)))
|
||||
{
|
||||
if (! lex->if_exists() && err_code == ER_FOREIGN_SERVER_DOESNT_EXIST)
|
||||
@@ -8369,7 +8337,7 @@ bool st_select_lex_unit::add_fake_select_lex(THD *thd_arg)
|
||||
@retval
|
||||
FALSE if all is OK
|
||||
@retval
|
||||
TRUE if a memory allocation error occured
|
||||
TRUE if a memory allocation error occurred
|
||||
*/
|
||||
|
||||
bool
|
||||
|
Reference in New Issue
Block a user