diff options
author | unknown <igor@rurik.mysql.com> | 2004-10-04 22:26:36 -0700 |
---|---|---|
committer | unknown <igor@rurik.mysql.com> | 2004-10-04 22:26:36 -0700 |
commit | dc25de58e58bf64c82e290b5c625fb68caa82953 (patch) | |
tree | c47a3c7624dcde60e441e64b81dc6251c6491495 /sql/sql_select.cc | |
parent | 2f9c7c0b09fd652b1e3523c46973371743782380 (diff) | |
download | mariadb-git-dc25de58e58bf64c82e290b5c625fb68caa82953.tar.gz |
join_outer.result, join_outer.test:
Added a test case for bug #5896.
sql_select.cc:
Fixed the problem of ignoring on expressions depending
only on outer table when outer table either contains
1 row or is guaranteed to return only 1 row (bug #5896).
sql/sql_select.cc:
Fixed the problem of ignoring on expressions depending
only on outer tables when outer tables either contained
1 row or is guaranteed to return not more than 1 row.
(bug #5896).
mysql-test/t/join_outer.test:
Added a test case for bug #5896.
mysql-test/r/join_outer.result:
Added a test case for bug #5896.
Diffstat (limited to 'sql/sql_select.cc')
-rw-r--r-- | sql/sql_select.cc | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/sql/sql_select.cc b/sql/sql_select.cc index 5d5cb0794f0..e104ac1ca38 100644 --- a/sql/sql_select.cc +++ b/sql/sql_select.cc @@ -4895,6 +4895,28 @@ make_join_select(JOIN *join,SQL_SELECT *select,COND *cond) COND *const_cond= make_cond_for_table(cond,join->const_table_map,(table_map) 0); DBUG_EXECUTE("where",print_where(const_cond,"constants");); + for (JOIN_TAB *tab= join->join_tab+join->const_tables; + tab < join->join_tab+join->tables ; tab++) + { + if (tab->on_expr) + { + JOIN_TAB *cond_tab= tab->first_inner; + COND *tmp= make_cond_for_table(tab->on_expr, + join->const_table_map, + (table_map) 0); + if (!tmp) + continue; + tmp= new Item_func_trig_cond(tmp, &cond_tab->not_null_compl); + if (!tmp) + DBUG_RETURN(1); + tmp->quick_fix_field(); + cond_tab->select_cond= !cond_tab->select_cond ? tmp : + new Item_cond_and(cond_tab->select_cond,tmp); + if (!cond_tab->select_cond) + DBUG_RETURN(1); + cond_tab->select_cond->quick_fix_field(); + } + } if (const_cond && !const_cond->val_int()) { DBUG_PRINT("info",("Found impossible WHERE condition")); |