Uploaded image for project: 'MariaDB Server'
  1. MariaDB Server
  2. MDEV-20468

Allocating more space than required for JOIN_TAB array for a query with SJM table

    Details

    • Type: Bug
    • Status: Closed (View Workflow)
    • Priority: Major
    • Resolution: Fixed
    • Affects Version/s: 10.1, 10.2, 10.3, 10.4, 10.5
    • Fix Version/s: 10.5.0
    • Component/s: Optimizer
    • Labels:
      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

            Activity

              People

              • Assignee:
                varun Varun Gupta
                Reporter:
                varun Varun Gupta
              • Votes:
                0 Vote for this issue
                Watchers:
                2 Start watching this issue

                Dates

                • Created:
                  Updated:
                  Resolved: