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:
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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 */
|
||||
|
Reference in New Issue
Block a user