diff options
-rw-r--r-- | mysql-test/r/func_group.result | 13 | ||||
-rw-r--r-- | mysql-test/t/func_group.test | 20 | ||||
-rw-r--r-- | sql/sql_select.cc | 3 |
3 files changed, 35 insertions, 1 deletions
diff --git a/mysql-test/r/func_group.result b/mysql-test/r/func_group.result index 5fa37f577e9..ebb379dfd7e 100644 --- a/mysql-test/r/func_group.result +++ b/mysql-test/r/func_group.result @@ -2124,4 +2124,17 @@ select z from (select count(*) as z from t1) v group by 1; z 4 drop table t1; +CREATE TABLE t1 (i1 int, INDEX(i1)); +INSERT INTO t1 VALUES (9),(8); +CREATE TABLE t2 (i2 int); +INSERT INTO t2 VALUES (8),(4); +CREATE TABLE t3 (i3 int, INDEX(i3)); +INSERT INTO t3 VALUES (9),(8); +SELECT MAX(t3.i3) FROM t3, t2, t1 WHERE t1.i1 = t2.i2 AND ( 0 OR t3.i3 = t2.i2 ); +MAX(t3.i3) +8 +SELECT MAX(t3.i3) FROM t3, t2, t1 WHERE t1.i1 = t2.i2 AND t3.i3 = t2.i2; +MAX(t3.i3) +8 +DROP TABLE t1,t2,t3; # end of 5.3 tests diff --git a/mysql-test/t/func_group.test b/mysql-test/t/func_group.test index 9f0d7e102da..e61962bc8a4 100644 --- a/mysql-test/t/func_group.test +++ b/mysql-test/t/func_group.test @@ -1403,4 +1403,24 @@ select z from (select count(*) as z from t1) v; select z from (select count(*) as z from t1) v group by 1; drop table t1; +# +# Bug mdev-5015: Degenerate OR condition in an aggregated join +# + +CREATE TABLE t1 (i1 int, INDEX(i1)); +INSERT INTO t1 VALUES (9),(8); + +CREATE TABLE t2 (i2 int); +INSERT INTO t2 VALUES (8),(4); + + +CREATE TABLE t3 (i3 int, INDEX(i3)); +INSERT INTO t3 VALUES (9),(8); + +SELECT MAX(t3.i3) FROM t3, t2, t1 WHERE t1.i1 = t2.i2 AND ( 0 OR t3.i3 = t2.i2 ); + +SELECT MAX(t3.i3) FROM t3, t2, t1 WHERE t1.i1 = t2.i2 AND t3.i3 = t2.i2; + +DROP TABLE t1,t2,t3; + --echo # end of 5.3 tests diff --git a/sql/sql_select.cc b/sql/sql_select.cc index e754c4eced9..7f0362e6555 100644 --- a/sql/sql_select.cc +++ b/sql/sql_select.cc @@ -13505,7 +13505,8 @@ remove_eq_conds(THD *thd, COND *cond, Item::cond_result *cond_value) { if (!(cond= remove_eq_conds(thd, cond, cond_value))) return cond; - } + } + should_fix_fields= 1; } if (should_fix_fields) cond->update_used_tables(); |