This commit adds the same call of st_select_lex::set_unique_exclude() that
complemented the fix for MDEV-24823 in 10.2. As it is the only call of this function in 10.3 the commit also has added the code of the function.
This commit is contained in:
parent
c425d93b92
commit
2c9bf0ae87
@ -1013,7 +1013,7 @@ int mysql_multi_delete_prepare(THD *thd)
|
||||
Multi-delete can't be constructed over-union => we always have
|
||||
single SELECT on top and have to check underlying SELECTs of it
|
||||
*/
|
||||
lex->select_lex.exclude_from_table_unique_test= TRUE;
|
||||
lex->select_lex.set_unique_exclude();
|
||||
/* Fix tables-to-be-deleted-from list to point at opened tables */
|
||||
for (target_tbl= (TABLE_LIST*) aux_tables;
|
||||
target_tbl;
|
||||
|
@ -4927,6 +4927,27 @@ bool st_select_lex::save_prep_leaf_tables(THD *thd)
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
Set exclude_from_table_unique_test for selects of this select and all selects
|
||||
belonging to the underlying units of derived tables or views
|
||||
*/
|
||||
|
||||
void st_select_lex::set_unique_exclude()
|
||||
{
|
||||
exclude_from_table_unique_test= TRUE;
|
||||
for (SELECT_LEX_UNIT *unit= first_inner_unit();
|
||||
unit;
|
||||
unit= unit->next_unit())
|
||||
{
|
||||
if (unit->derived && unit->derived->is_view_or_derived())
|
||||
{
|
||||
for (SELECT_LEX *sl= unit->first_select(); sl; sl= sl->next_select())
|
||||
sl->set_unique_exclude();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
Return true if this select_lex has been converted into a semi-join nest
|
||||
within 'ancestor'.
|
||||
|
@ -1354,6 +1354,8 @@ public:
|
||||
bool save_leaf_tables(THD *thd);
|
||||
bool save_prep_leaf_tables(THD *thd);
|
||||
|
||||
void set_unique_exclude();
|
||||
|
||||
bool is_merged_child_of(st_select_lex *ancestor);
|
||||
|
||||
/*
|
||||
|
Loading…
x
Reference in New Issue
Block a user