mirror of
https://github.com/MariaDB/server.git
synced 2025-07-29 05:21:33 +03:00
Merge branch '10.6' into 10.11
This commit is contained in:
110
sql/sql_parse.cc
110
sql/sql_parse.cc
@ -2250,6 +2250,7 @@ dispatch_command_return dispatch_command(enum enum_server_command command, THD *
|
||||
my_eof(thd);
|
||||
kill_mysql(thd);
|
||||
error=TRUE;
|
||||
DBUG_EXECUTE_IF("simulate_slow_client_at_shutdown", my_sleep(2000000););
|
||||
break;
|
||||
}
|
||||
#endif
|
||||
@ -2407,6 +2408,11 @@ resume:
|
||||
}
|
||||
#endif /* WITH_WSREP */
|
||||
|
||||
if (thd->reset_sp_cache)
|
||||
{
|
||||
thd->sp_caches_empty();
|
||||
thd->reset_sp_cache= false;
|
||||
}
|
||||
|
||||
if (do_end_of_statement)
|
||||
{
|
||||
@ -2483,6 +2489,7 @@ resume:
|
||||
MYSQL_COMMAND_DONE(res);
|
||||
}
|
||||
DEBUG_SYNC(thd,"dispatch_command_end");
|
||||
DEBUG_SYNC(thd,"dispatch_command_end2");
|
||||
|
||||
/* Check that some variables are reset properly */
|
||||
DBUG_ASSERT(thd->abort_on_warning == 0);
|
||||
@ -5890,7 +5897,7 @@ mysql_execute_command(THD *thd, bool is_called_from_prepared_stmt)
|
||||
if (sph->sp_resolve_package_routine(thd, thd->lex->sphead,
|
||||
lex->spname, &sph, &pkgname))
|
||||
return true;
|
||||
if (sph->sp_cache_routine(thd, lex->spname, false, &sp))
|
||||
if (sph->sp_cache_routine(thd, lex->spname, &sp))
|
||||
goto error;
|
||||
if (!sp || sp->show_routine_code(thd))
|
||||
{
|
||||
@ -8263,10 +8270,6 @@ TABLE_LIST *st_select_lex::add_table_to_list(THD *thd,
|
||||
List<String> *partition_names,
|
||||
LEX_STRING *option)
|
||||
{
|
||||
TABLE_LIST *ptr;
|
||||
TABLE_LIST *UNINIT_VAR(previous_table_ref); /* The table preceding the current one. */
|
||||
LEX_CSTRING alias_str;
|
||||
LEX *lex= thd->lex;
|
||||
DBUG_ENTER("add_table_to_list");
|
||||
DBUG_PRINT("enter", ("Table '%s' (%p) Select %p (%u)",
|
||||
(alias ? alias->str : table->table.str),
|
||||
@ -8276,9 +8279,7 @@ TABLE_LIST *st_select_lex::add_table_to_list(THD *thd,
|
||||
|
||||
if (unlikely(!table))
|
||||
DBUG_RETURN(0); // End of memory
|
||||
alias_str= alias ? *alias : table->table;
|
||||
DBUG_ASSERT(alias_str.str);
|
||||
if (!MY_TEST(table_options & TL_OPTION_ALIAS) &&
|
||||
if (!(table_options & TL_OPTION_ALIAS) &&
|
||||
unlikely(check_table_name(table->table.str, table->table.length, FALSE)))
|
||||
{
|
||||
my_error(ER_WRONG_TABLE_NAME, MYF(0), table->table.str);
|
||||
@ -8293,6 +8294,34 @@ TABLE_LIST *st_select_lex::add_table_to_list(THD *thd,
|
||||
DBUG_RETURN(0);
|
||||
}
|
||||
|
||||
LEX_CSTRING db{0, 0};
|
||||
bool fqtn= false;
|
||||
LEX *lex= thd->lex;
|
||||
if (table->db.str)
|
||||
{
|
||||
fqtn= TRUE;
|
||||
db= table->db;
|
||||
}
|
||||
else if (!lex->with_cte_resolution && lex->copy_db_to(&db))
|
||||
DBUG_RETURN(0);
|
||||
else
|
||||
fqtn= FALSE;
|
||||
bool info_schema= is_infoschema_db(&db);
|
||||
if (!table->sel && info_schema &&
|
||||
(table_options & TL_OPTION_UPDATING) &&
|
||||
/* Special cases which are processed by commands itself */
|
||||
lex->sql_command != SQLCOM_CHECK &&
|
||||
lex->sql_command != SQLCOM_CHECKSUM)
|
||||
{
|
||||
my_error(ER_DBACCESS_DENIED_ERROR, MYF(0),
|
||||
thd->security_ctx->priv_user,
|
||||
thd->security_ctx->priv_host,
|
||||
INFORMATION_SCHEMA_NAME.str);
|
||||
DBUG_RETURN(0);
|
||||
}
|
||||
|
||||
LEX_CSTRING alias_str= alias ? *alias : table->table;
|
||||
DBUG_ASSERT(alias_str.str);
|
||||
if (!alias) /* Alias is case sensitive */
|
||||
{
|
||||
if (unlikely(table->sel))
|
||||
@ -8305,65 +8334,15 @@ TABLE_LIST *st_select_lex::add_table_to_list(THD *thd,
|
||||
if (unlikely(!(alias_str.str= (char*) thd->memdup(alias_str.str, alias_str.length+1))))
|
||||
DBUG_RETURN(0);
|
||||
}
|
||||
if (unlikely(!(ptr = (TABLE_LIST *) thd->calloc(sizeof(TABLE_LIST)))))
|
||||
DBUG_RETURN(0); /* purecov: inspected */
|
||||
if (table->db.str)
|
||||
{
|
||||
ptr->is_fqtn= TRUE;
|
||||
ptr->db= table->db;
|
||||
}
|
||||
else if (!lex->with_cte_resolution && lex->copy_db_to(&ptr->db))
|
||||
DBUG_RETURN(0);
|
||||
else
|
||||
ptr->is_fqtn= FALSE;
|
||||
|
||||
ptr->alias= alias_str;
|
||||
ptr->is_alias= alias ? TRUE : FALSE;
|
||||
if (lower_case_table_names)
|
||||
{
|
||||
if (table->table.length)
|
||||
table->table.length= my_casedn_str(files_charset_info,
|
||||
(char*) table->table.str);
|
||||
if (ptr->db.length && ptr->db.str != any_db.str)
|
||||
ptr->db.length= my_casedn_str(files_charset_info, (char*) ptr->db.str);
|
||||
}
|
||||
bool has_alias_ptr= alias != nullptr;
|
||||
void *memregion= thd->calloc(sizeof(TABLE_LIST));
|
||||
TABLE_LIST *ptr= new (memregion) TABLE_LIST(thd, db, fqtn, alias_str,
|
||||
has_alias_ptr, table, lock_type,
|
||||
mdl_type, table_options,
|
||||
info_schema, this,
|
||||
index_hints_arg, option);
|
||||
|
||||
ptr->table_name= table->table;
|
||||
ptr->lock_type= lock_type;
|
||||
ptr->mdl_type= mdl_type;
|
||||
ptr->table_options= table_options;
|
||||
ptr->updating= MY_TEST(table_options & TL_OPTION_UPDATING);
|
||||
/* TODO: remove TL_OPTION_FORCE_INDEX as it looks like it's not used */
|
||||
ptr->force_index= MY_TEST(table_options & TL_OPTION_FORCE_INDEX);
|
||||
ptr->ignore_leaves= MY_TEST(table_options & TL_OPTION_IGNORE_LEAVES);
|
||||
ptr->sequence= MY_TEST(table_options & TL_OPTION_SEQUENCE);
|
||||
ptr->derived= table->sel;
|
||||
if (!ptr->derived && is_infoschema_db(&ptr->db))
|
||||
{
|
||||
if (ptr->updating &&
|
||||
/* Special cases which are processed by commands itself */
|
||||
lex->sql_command != SQLCOM_CHECK &&
|
||||
lex->sql_command != SQLCOM_CHECKSUM)
|
||||
{
|
||||
my_error(ER_DBACCESS_DENIED_ERROR, MYF(0),
|
||||
thd->security_ctx->priv_user,
|
||||
thd->security_ctx->priv_host,
|
||||
INFORMATION_SCHEMA_NAME.str);
|
||||
DBUG_RETURN(0);
|
||||
}
|
||||
ST_SCHEMA_TABLE *schema_table;
|
||||
schema_table= find_schema_table(thd, &ptr->table_name);
|
||||
ptr->schema_table_name= ptr->table_name;
|
||||
ptr->schema_table= schema_table;
|
||||
}
|
||||
ptr->select_lex= this;
|
||||
/*
|
||||
We can't cache internal temporary tables between prepares as the
|
||||
table may be deleted before next exection.
|
||||
*/
|
||||
ptr->cacheable_table= !table->is_derived_table();
|
||||
ptr->index_hints= index_hints_arg;
|
||||
ptr->option= option ? option->str : 0;
|
||||
/* check that used name is unique. Sequences are ignored */
|
||||
if (lock_type != TL_IGNORE && !ptr->sequence)
|
||||
{
|
||||
@ -8386,6 +8365,7 @@ TABLE_LIST *st_select_lex::add_table_to_list(THD *thd,
|
||||
}
|
||||
}
|
||||
/* Store the table reference preceding the current one. */
|
||||
TABLE_LIST *UNINIT_VAR(previous_table_ref); /* The table preceding the current one. */
|
||||
if (table_list.elements > 0 && likely(!ptr->sequence))
|
||||
{
|
||||
/*
|
||||
|
Reference in New Issue
Block a user