summaryrefslogtreecommitdiff
path: root/mysql-test
diff options
context:
space:
mode:
authorunknown <evgen@moonbone.local>2006-01-11 22:49:43 +0300
committerunknown <evgen@moonbone.local>2006-01-11 22:49:43 +0300
commit593bed0d929cdc2827439d4697ce6f4b2bc9d941 (patch)
tree6b8d0de32ad9d2874c9c9803e328edad542e33fa /mysql-test
parent95cabee1dc3a6d44a7e7a4c74c0bd49e00047f5b (diff)
downloadmariadb-git-593bed0d929cdc2827439d4697ce6f4b2bc9d941.tar.gz
Fixed bug #15633: Evaluation of Item_equal for non-const table caused wrong
select result Item equal objects are employed only at the optimize phase. Usually they are not supposed to be evaluated. Yet in some cases we call the method val_int() for them. Here we have to take care of restricting the predicate such an object represents f1=f2= ...=fn to the projection of known fields fi1=...=fik. Added a check for field's table being const in Item_equal::val_int(). If the field's table is not const val_int() just skips that field when evaluating Item_equal. mysql-test/t/select.test: Added test case for bug #15633: Evaluation of Item_equal for non-const table caused wrong select result mysql-test/r/select.result: Added test case for bug #15633: Evaluation of Item_equal for non-const table caused wrong select result mysql-test/r/func_group.result: Corrected test result for bug #12882 after fix for bug#15633 sql/item_cmpfunc.h: Fixed bug #15633: Evaluation of Item_equal for non-const table caused wrong select result Added comment about fields from non-const tables in class description. sql/item_cmpfunc.cc: Fixed bug #15633: Evaluation of Item_equal for non-const table caused wrong select result Added check for field's table being const in Item_equal::val_int().
Diffstat (limited to 'mysql-test')
-rw-r--r--mysql-test/r/func_group.result2
-rw-r--r--mysql-test/r/select.result13
-rw-r--r--mysql-test/t/select.test14
3 files changed, 29 insertions, 0 deletions
diff --git a/mysql-test/r/func_group.result b/mysql-test/r/func_group.result
index 2b0176179ed..cfa4cc0ef68 100644
--- a/mysql-test/r/func_group.result
+++ b/mysql-test/r/func_group.result
@@ -865,6 +865,7 @@ select 1, min(a) from t1m where 1=99;
1 NULL
select 1, min(1) from t1m where a=99;
1 min(1)
+1 NULL
select 1, min(1) from t1m where 1=99;
1 min(1)
1 NULL
@@ -876,6 +877,7 @@ select 1, max(a) from t1m where 1=99;
1 NULL
select 1, max(1) from t1m where a=99;
1 max(1)
+1 NULL
select 1, max(1) from t1m where 1=99;
1 max(1)
1 NULL
diff --git a/mysql-test/r/select.result b/mysql-test/r/select.result
index 598ea2b10d1..198493d0a02 100644
--- a/mysql-test/r/select.result
+++ b/mysql-test/r/select.result
@@ -3337,3 +3337,16 @@ id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE t2 const PRIMARY PRIMARY 4 const 1 Using index
1 SIMPLE t3 const PRIMARY PRIMARY 8 const,const 1
DROP TABLE t1,t2,t3;
+create table t1 (f1 int unique);
+create table t2 (f2 int unique);
+create table t3 (f3 int unique);
+insert into t1 values(1),(2);
+insert into t2 values(1),(2);
+insert into t3 values(1),(NULL);
+select * from t3 where f3 is null;
+f3
+NULL
+select t2.f2 from t1 left join t2 on f1=f2 join t3 on f1=f3 where f1=1;
+f2
+1
+drop table t1,t2,t3;
diff --git a/mysql-test/t/select.test b/mysql-test/t/select.test
index a73d08f5f18..595362dbb65 100644
--- a/mysql-test/t/select.test
+++ b/mysql-test/t/select.test
@@ -2805,3 +2805,17 @@ EXPLAIN SELECT t2.key_a,foo
WHERE t2.key_a=2 and key_b=5;
DROP TABLE t1,t2,t3;
+
+#
+# Bug #15633 Evaluation of Item_equal for non-const table caused wrong
+# select result
+#
+create table t1 (f1 int unique);
+create table t2 (f2 int unique);
+create table t3 (f3 int unique);
+insert into t1 values(1),(2);
+insert into t2 values(1),(2);
+insert into t3 values(1),(NULL);
+select * from t3 where f3 is null;
+select t2.f2 from t1 left join t2 on f1=f2 join t3 on f1=f3 where f1=1;
+drop table t1,t2,t3;