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

Odd code in Item_subselect::is_expensive

    XMLWordPrintable

    Details

    • Type: Bug
    • Status: Open (View Workflow)
    • Priority: Major
    • Resolution: Unresolved
    • Affects Version/s: 10.0
    • Fix Version/s: 10.0
    • Component/s: None
    • Labels:
      None

      Description

      Item_subselect::is_expensive() has this code:

        for (SELECT_LEX *sl= unit->first_select(); sl; sl= sl->next_select())
        {
          JOIN *cur_join= sl->join;
          if (!cur_join)
            continue;
       
          /*
            Subqueries whose result is known after optimization are not expensive.
            Such subqueries have all tables optimized away, thus have no join plan.
          */
          if (cur_join->optimized &&
              (cur_join->zero_result_cause || !cur_join->tables_list))
            return false;
      

      The loop walks through parts of UNION. If we find a SELECT that has non-NULL
      join->zero_result_cause, we have is_expensive()=FALSE.
      What about cases like

       (SELECT FROM t1 WHERE 1=2 
        UNION
        SELECT sum(col) FROM very_big_table
       )
      

      Item_subselect::is_expensive() will return FALSE for it, which is wrong.

        Attachments

          Issue Links

            Activity

              People

              Assignee:
              psergey Sergei Petrunia
              Reporter:
              psergey Sergei Petrunia
              Votes:
              0 Vote for this issue
              Watchers:
              1 Start watching this issue

                Dates

                Created:
                Updated: