• unknown's avatar
    Fix LP BUG#702345 · 3e691bf4
    unknown authored
    Analysis:
    Close to its end JOIN::optimize() assigns having to tmp_having, and
    sets the having clause to NULL:
    
      tmp_having= having;
      if (select_options & SELECT_DESCRIBE)
      {
        error= 0;
        DBUG_RETURN(0);
      }
      having= 0;
    
    At the same time, this query detects an empty result set, and calls
    return_zero_rows(), which checks the HAVING clause as follows:
    
        if (having && having->val_int() == 0)
          send_row=0;
    
    However having has been already set to NULL, so return_zero_rows
    doesn't check the having clause, hence the wrong result.
    
    Solution:
    Check join->tmp_having in addition to join->having.
    
    There is no additional test case, because the failure was in
    the current regression test.
    3e691bf4
sql_select.cc 641 KB