From 0cdf7f39af33767fa5cd1b6bbedb14400ea3ad6c Mon Sep 17 00:00:00 2001 From: "hf@deer.(none)" <> Date: Thu, 3 Jul 2003 10:42:13 +0500 Subject: [PATCH] Proposed bugfix for #717 Current table is placed into read_tables set of the current join_tab->select so get_mm_parts function thinks that current table's record is read and tries to calculate WHERE condition with the fields of the record. Result of these calculations is unpredictable. Looks funny - outcome of the SELECT depends on the queries executed before. Anyway i think we should have testcase on this part of the code. --- mysql-test/r/sel000001.result | 14 ++++++++++++++ mysql-test/t/sel000001.test | 13 +++++++++++++ sql/sql_select.cc | 2 +- 3 files changed, 28 insertions(+), 1 deletion(-) diff --git a/mysql-test/r/sel000001.result b/mysql-test/r/sel000001.result index 28f6d3d1d5a..6b6b9b7dffc 100644 --- a/mysql-test/r/sel000001.result +++ b/mysql-test/r/sel000001.result @@ -5,3 +5,17 @@ SELECT s, id FROM t1 WHERE s = 'mouse'; s id mouse 3 drop table t1; +CREATE TABLE t1 ( +node int(11) NOT NULL default '0', +maxchild int(11) NOT NULL default '0', +PRIMARY KEY (`node`) +); +INSERT INTO t1 (node, maxchild) VALUES (4,4),(5,5),(1,244); +SELECT * FROM t1 g1, t1 g2 +WHERE g1.node <= g2.node and g2.node <= g1.maxchild and g2.node = g2.maxchild; +node maxchild node maxchild +4 4 4 4 +5 5 5 5 +1 244 4 4 +1 244 5 5 +DROP TABLE t1; diff --git a/mysql-test/t/sel000001.test b/mysql-test/t/sel000001.test index 77355f8d535..ad4af1f92fb 100644 --- a/mysql-test/t/sel000001.test +++ b/mysql-test/t/sel000001.test @@ -16,3 +16,16 @@ CREATE TABLE t1 (s CHAR(20) PRIMARY KEY, id INT); INSERT INTO t1 VALUES ('cat', 1), ('mouse', 3), ('dog', 2), ('snake', 77); SELECT s, id FROM t1 WHERE s = 'mouse'; drop table t1; + +# +#test for bug #717 +# +CREATE TABLE t1 ( + node int(11) NOT NULL default '0', + maxchild int(11) NOT NULL default '0', + PRIMARY KEY (`node`) +); +INSERT INTO t1 (node, maxchild) VALUES (4,4),(5,5),(1,244); +SELECT * FROM t1 g1, t1 g2 + WHERE g1.node <= g2.node and g2.node <= g1.maxchild and g2.node = g2.maxchild; +DROP TABLE t1; diff --git a/sql/sql_select.cc b/sql/sql_select.cc index 5b5972be384..bde5392d299 100644 --- a/sql/sql_select.cc +++ b/sql/sql_select.cc @@ -2683,7 +2683,7 @@ make_join_select(JOIN *join,SQL_SELECT *select,COND *cond) (select->quick && (select->quick->records >= 100L)))) ? 2 : 1; - sel->read_tables= used_tables; + sel->read_tables= used_tables & ~current_map; } if (i != join->const_tables && tab->use_quick != 2) { /* Read with cache */