Details
-
Bug
-
Status: Closed (View Workflow)
-
Major
-
Resolution: Fixed
-
10.1(EOL), 10.2(EOL), 10.3(EOL), 10.4(EOL), 10.5
-
None
Description
An example
EXPLAIN SELECT * FROM one_k |
WHERE a IN (SELECT t10.b |
FROM t10, t11, t12, t13, t14 |
WHERE t11.a=t10.b+1 AND t12.a=t10.b AND |
t13.a=t10.b AND t14.a=t10.b); |
this case uses Semi Join Materializaion and the subquery is added to the table list of select #1.
The total number of tables for select #1 is 1(one_k)+ 5(inner_tables) + 1(SJM_TABLE). But for the top level we are only considered about 2 and should only have two JOIN_TAB structures.
In the function JOIN::get_best_combination
we allocate space for JOIN_TAB array like
if (!(join_tab= (JOIN_TAB*) thd->alloc(sizeof(JOIN_TAB)* |
(top_join_tab_count + aggr_tables))))
|
In the debugger
(gdb) p top_join_tab_count
$8 = 6
So in this issue we would like to correct the value of top_join_tab_count, to only consider the tables that would be present at the top level. In this case
the value of top_join_tab_count should be 2.
Attachments
Issue Links
- relates to
-
MDEV-20014 Assertion failure: thd->mdl_context.is_lock_owner(MDL_key::TABLE
- Closed
-
MDEV-33100 Backport MDEV-20468 to 10.4
- Closed