1
0
mirror of https://github.com/MariaDB/server.git synced 2025-08-01 03:47:19 +03:00

Fix LP BUG#702345

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.
This commit is contained in:
unknown
2011-01-17 13:48:14 +02:00
parent c2e219fb1e
commit b1a6ecd64c

View File

@ -1907,7 +1907,7 @@ JOIN::exec()
send_row_on_empty_set(),
select_options,
zero_result_cause,
having);
having ? having : tmp_having);
DBUG_VOID_RETURN;
}