Skip to content

Commit

Permalink
MDEV-26362: incorrect nest_level value with INTERSECT
Browse files Browse the repository at this point in the history
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)
  • Loading branch information
sanja-byelkin committed Sep 5, 2021
1 parent e835cc8 commit 391f6b4
Show file tree
Hide file tree
Showing 2 changed files with 11 additions and 2 deletions.
11 changes: 11 additions & 0 deletions sql/sql_base.cc
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
2 changes: 0 additions & 2 deletions sql/sql_lex.cc
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand All @@ -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);
}

Expand Down

0 comments on commit 391f6b4

Please sign in to comment.