MDEV-26362: incorrect nest_level value with INTERSECT

Add DBUG_ASSERT (should be kept in merge)
Fix nest_level assignment in LEX::add_unit_in_brackets (should be ignored in merge to 10.4)
This commit is contained in:
Oleksandr Byelkin 2021-08-13 16:54:52 +02:00
parent e835cc851e
commit 391f6b4f1e
2 changed files with 11 additions and 2 deletions

View file

@ -7513,6 +7513,17 @@ bool setup_fields(THD *thd, Ref_ptr_array ref_pointer_array,
thd->column_usage= column_usage;
DBUG_PRINT("info", ("thd->column_usage: %d", thd->column_usage));
/*
Followimg 2 condition always should be true (but they was added
due to an error present only in 10.3):
1) nest_level shoud be 0 or positive;
2) nest level of all SELECTs on the same level shoud be equal first
SELECT on this level (and each other).
*/
DBUG_ASSERT(thd->lex->current_select->nest_level >= 0);
DBUG_ASSERT(thd->lex->current_select->master_unit()->first_select()
->nest_level ==
thd->lex->current_select->nest_level);
if (allow_sum_func)
thd->lex->allow_sum_func.set_bit(thd->lex->current_select->nest_level);
thd->where= THD::DEFAULT_WHERE;

View file

@ -5288,7 +5288,6 @@ bool LEX::add_unit_in_brackets(SELECT_LEX *nselect)
DBUG_ASSERT(nselect->outer_select() == dummy_select);
current_select= dummy_select;
current_select->nest_level--;
SELECT_LEX_UNIT *unit= nselect->master_unit();
Table_ident *ti= new (thd->mem_root) Table_ident(unit);
@ -5314,7 +5313,6 @@ bool LEX::add_unit_in_brackets(SELECT_LEX *nselect)
derived_tables|= DERIVED_SUBQUERY;
current_select= nselect;
current_select->nest_level++;
DBUG_RETURN(rc);
}