summaryrefslogtreecommitdiff
path: root/sql/sql_select.cc
diff options
context:
space:
mode:
authorunknown <igor@rurik.mysql.com>2006-02-02 21:23:36 -0800
committerunknown <igor@rurik.mysql.com>2006-02-02 21:23:36 -0800
commit8300149963a83b86c6ae2b1adf1a6f44f374fc8c (patch)
tree30c426e55f2f4aa73ad712d97bb4db5876251b77 /sql/sql_select.cc
parent6a2a94b50be1c6da3b916702683b8b8162de6afa (diff)
parent6757503847039fa8758dffc7263a38a792848685 (diff)
downloadmariadb-git-8300149963a83b86c6ae2b1adf1a6f44f374fc8c.tar.gz
Merge rurik.mysql.com:/home/igor/dev/mysql-4.1-0
into rurik.mysql.com:/home/igor/dev/mysql-5.0-0 mysql-test/t/having.test: Auto merged mysql-test/r/having.result: Manual merge sql/sql_lex.cc: Manual merge sql/sql_lex.h: Manual merge sql/sql_prepare.cc: Manual merge sql/sql_select.cc: Manual merge
Diffstat (limited to 'sql/sql_select.cc')
-rw-r--r--sql/sql_select.cc28
1 files changed, 21 insertions, 7 deletions
diff --git a/sql/sql_select.cc b/sql/sql_select.cc
index 4ac2bb91af5..6d3c32b1239 100644
--- a/sql/sql_select.cc
+++ b/sql/sql_select.cc
@@ -612,6 +612,7 @@ JOIN::optimize()
build_bitmap_for_nested_joins(join_list, 0);
sel->prep_where= conds ? conds->copy_andor_structure(thd) : 0;
+ sel->prep_having= having ? having->copy_andor_structure(thd) : 0;
if (arena)
thd->restore_active_arena(arena, &backup);
@@ -625,13 +626,26 @@ JOIN::optimize()
DBUG_RETURN(1);
}
- if (cond_value == Item::COND_FALSE ||
- (!unit->select_limit_cnt && !(select_options & OPTION_FOUND_ROWS)))
- { /* Impossible cond */
- DBUG_PRINT("info", ("Impossible WHERE"));
- zero_result_cause= "Impossible WHERE";
- error= 0;
- DBUG_RETURN(0);
+ {
+ Item::cond_result having_value;
+ having= optimize_cond(thd, having, &having_value);
+ if (thd->net.report_error)
+ {
+ error= 1;
+ DBUG_PRINT("error",("Error from optimize_cond"));
+ DBUG_RETURN(1);
+ }
+
+ if (cond_value == Item::COND_FALSE || having_value == Item::COND_FALSE ||
+ (!unit->select_limit_cnt && !(select_options & OPTION_FOUND_ROWS)))
+ { /* Impossible cond */
+ DBUG_PRINT("info", (having_value == Item::COND_FALSE ?
+ "Impossible HAVING" : "Impossible WHERE"));
+ zero_result_cause= ?
+ "Impossible HAVING" : "Impossible WHERE";
+ error= 0;
+ DBUG_RETURN(0);
+ }
}
/* Optimize count(*), min() and max() */