From b1a6ecd64cda0af1c49e850adb7217a9a760bd1d Mon Sep 17 00:00:00 2001 From: unknown Date: Mon, 17 Jan 2011 13:48:14 +0200 Subject: [PATCH] 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. --- sql/sql_select.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sql/sql_select.cc b/sql/sql_select.cc index 1e53785749f..462cbbce4cb 100644 --- a/sql/sql_select.cc +++ b/sql/sql_select.cc @@ -1907,7 +1907,7 @@ JOIN::exec() send_row_on_empty_set(), select_options, zero_result_cause, - having); + having ? having : tmp_having); DBUG_VOID_RETURN; }