diff options
author | unknown <igor@rurik.mysql.com> | 2006-02-02 21:23:36 -0800 |
---|---|---|
committer | unknown <igor@rurik.mysql.com> | 2006-02-02 21:23:36 -0800 |
commit | 8300149963a83b86c6ae2b1adf1a6f44f374fc8c (patch) | |
tree | 30c426e55f2f4aa73ad712d97bb4db5876251b77 /sql/sql_select.cc | |
parent | 6a2a94b50be1c6da3b916702683b8b8162de6afa (diff) | |
parent | 6757503847039fa8758dffc7263a38a792848685 (diff) | |
download | mariadb-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.cc | 28 |
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() */ |