1
0
mirror of https://github.com/MariaDB/server.git synced 2025-07-29 05:21:33 +03:00

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.
This commit is contained in:
hf@deer.(none)
2003-07-03 10:42:13 +05:00
parent 67b6ba21c3
commit 0cdf7f39af
3 changed files with 28 additions and 1 deletions

View File

@ -5,3 +5,17 @@ SELECT s, id FROM t1 WHERE s = 'mouse';
s id s id
mouse 3 mouse 3
drop table t1; 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;

View File

@ -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); INSERT INTO t1 VALUES ('cat', 1), ('mouse', 3), ('dog', 2), ('snake', 77);
SELECT s, id FROM t1 WHERE s = 'mouse'; SELECT s, id FROM t1 WHERE s = 'mouse';
drop table t1; 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;

View File

@ -2683,7 +2683,7 @@ make_join_select(JOIN *join,SQL_SELECT *select,COND *cond)
(select->quick && (select->quick &&
(select->quick->records >= 100L)))) ? (select->quick->records >= 100L)))) ?
2 : 1; 2 : 1;
sel->read_tables= used_tables; sel->read_tables= used_tables & ~current_map;
} }
if (i != join->const_tables && tab->use_quick != 2) if (i != join->const_tables && tab->use_quick != 2)
{ /* Read with cache */ { /* Read with cache */