1
0
mirror of https://github.com/MariaDB/server.git synced 2025-07-29 05:21:33 +03:00

Merge 10.4 into 10.5

This commit is contained in:
Marko Mäkelä
2021-08-31 10:04:56 +03:00
15 changed files with 75 additions and 44 deletions

View File

@ -4536,13 +4536,13 @@ bool table_already_fk_prelocked(TABLE_LIST *tl, LEX_CSTRING *db,
}
static bool internal_table_exists(TABLE_LIST *global_list,
const char *table_name)
static TABLE_LIST *internal_table_exists(TABLE_LIST *global_list,
const char *table_name)
{
do
{
if (global_list->table_name.str == table_name)
return 1;
return global_list;
} while ((global_list= global_list->next_global));
return 0;
}
@ -4557,13 +4557,23 @@ add_internal_tables(THD *thd, Query_tables_list *prelocking_ctx,
do
{
TABLE_LIST *tmp __attribute__((unused));
DBUG_PRINT("info", ("table name: %s", tables->table_name.str));
/*
Skip table if already in the list. Can happen with prepared statements
*/
if (tables->next_local &&
internal_table_exists(global_table_list, tables->table_name.str))
if ((tmp= internal_table_exists(global_table_list,
tables->table_name.str)))
{
/*
Use the original value for the next local, used by the
original prepared statement. We cannot trust the original
next_local value as it may have been changed by a previous
statement using the same table.
*/
tables->next_local= tmp;
continue;
}
TABLE_LIST *tl= (TABLE_LIST *) thd->alloc(sizeof(TABLE_LIST));
if (!tl)