mirror of
https://github.com/MariaDB/server.git
synced 2025-07-27 18:02:13 +03:00
MDEV-21603 Crashing SHOW TABLES with derived table in WHERE condition
When you only need view structure, don't call handle_derived with DT_CREATE and rely on its internal hackish check to skip DT_CREATE. Because handle_derived is called from many different places, and this internal hackish check is indiscriminative. Instead, just don't ask handle_derived to do DT_CREATE if you don't want it to do DT_CREATE.
This commit is contained in:
committed by
Oleksandr Byelkin
parent
72fa9dabad
commit
a20195bba5
@ -70,7 +70,6 @@ bool
|
||||
mysql_handle_derived(LEX *lex, uint phases)
|
||||
{
|
||||
bool res= FALSE;
|
||||
THD *thd= lex->thd;
|
||||
DBUG_ENTER("mysql_handle_derived");
|
||||
DBUG_PRINT("enter", ("phases: 0x%x", phases));
|
||||
if (!lex->derived_tables)
|
||||
@ -85,8 +84,6 @@ mysql_handle_derived(LEX *lex, uint phases)
|
||||
break;
|
||||
if (!(phases & phase_flag))
|
||||
continue;
|
||||
if (phase_flag >= DT_CREATE && !thd->fill_derived_tables())
|
||||
break;
|
||||
|
||||
for (SELECT_LEX *sl= lex->all_selects_list;
|
||||
sl && !res;
|
||||
@ -169,7 +166,6 @@ bool
|
||||
mysql_handle_single_derived(LEX *lex, TABLE_LIST *derived, uint phases)
|
||||
{
|
||||
bool res= FALSE;
|
||||
THD *thd= lex->thd;
|
||||
uint8 allowed_phases= (derived->is_merged_derived() ? DT_PHASES_MERGE :
|
||||
DT_PHASES_MATERIALIZE);
|
||||
DBUG_ENTER("mysql_handle_single_derived");
|
||||
@ -192,8 +188,6 @@ mysql_handle_single_derived(LEX *lex, TABLE_LIST *derived, uint phases)
|
||||
if (phase_flag != DT_PREPARE &&
|
||||
!(allowed_phases & phase_flag))
|
||||
continue;
|
||||
if (phase_flag >= DT_CREATE && !thd->fill_derived_tables())
|
||||
break;
|
||||
|
||||
if ((res= (*processors[phase])(lex->thd, lex, derived)))
|
||||
break;
|
||||
@ -1376,4 +1370,3 @@ bool pushdown_cond_for_derived(THD *thd, Item *cond, TABLE_LIST *derived)
|
||||
thd->lex->current_select= save_curr_select;
|
||||
DBUG_RETURN(false);
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user