A fix for the bug in a SELECT with joined tables with ORDER BY and
LIMIT clause when filesort had to be used. In that case LIMIT was applied to filesort of one of the tables, although it could not be. This fix solved problems with LEFT JOIN too...
This commit is contained in:
parent
ad2be3b2b2
commit
dd2012067e
@ -3468,3 +3468,16 @@ a a a
|
||||
2 2 2
|
||||
3 3 3
|
||||
drop table t1;
|
||||
drop table if exists t1,t2;
|
||||
CREATE TABLE t1 ( aa char(2), id int(11) NOT NULL auto_increment, t2_id int(11) NOT NULL default '0', PRIMARY KEY (id), KEY replace_id (t2_id)) TYPE=MyISAM;
|
||||
INSERT INTO t1 VALUES ("1",8264,2506),("2",8299,2517),("3",8301,2518),("4",8302,2519),("5",8303,2520),("6",8304,2521),("7",8305,2522);
|
||||
CREATE TABLE t2 ( id int(11) NOT NULL auto_increment, PRIMARY KEY (id)) TYPE=MyISAM;
|
||||
INSERT INTO t2 VALUES (2517), (2518), (2519), (2520), (2521), (2522);
|
||||
select * from t1, t2 WHERE t1.t2_id = t2.id and t1.t2_id > 0 order by t1.id LIMIT 0, 5;
|
||||
aa id t2_id id
|
||||
2 8299 2517 2517
|
||||
3 8301 2518 2518
|
||||
4 8302 2519 2519
|
||||
5 8303 2520 2520
|
||||
6 8304 2521 2521
|
||||
drop table if exists t1,t2;
|
||||
|
@ -1795,5 +1795,11 @@ select * from t1 natural right join (t1 as t2 left join t1 as t3 using (a));
|
||||
# natural join
|
||||
select * from t1 natural join (t1 as t2 left join t1 as t3 using (a));
|
||||
select * from (t1 as t2 left join t1 as t3 using (a)) natural join t1;
|
||||
|
||||
drop table t1;
|
||||
drop table if exists t1,t2;
|
||||
CREATE TABLE t1 ( aa char(2), id int(11) NOT NULL auto_increment, t2_id int(11) NOT NULL default '0', PRIMARY KEY (id), KEY replace_id (t2_id)) TYPE=MyISAM;
|
||||
INSERT INTO t1 VALUES ("1",8264,2506),("2",8299,2517),("3",8301,2518),("4",8302,2519),("5",8303,2520),("6",8304,2521),("7",8305,2522);
|
||||
CREATE TABLE t2 ( id int(11) NOT NULL auto_increment, PRIMARY KEY (id)) TYPE=MyISAM;
|
||||
INSERT INTO t2 VALUES (2517), (2518), (2519), (2520), (2521), (2522);
|
||||
select * from t1, t2 WHERE t1.t2_id = t2.id and t1.t2_id > 0 order by t1.id LIMIT 0, 5;
|
||||
drop table if exists t1,t2;
|
||||
|
@ -923,7 +923,13 @@ mysql_select(THD *thd,TABLE_LIST *tables,List<Item> &fields,COND *conds,
|
||||
JOIN_TAB *end_table= &join.join_tab[join.tables];
|
||||
for (; table < end_table ; table++)
|
||||
{
|
||||
if (table->select_cond)
|
||||
/*
|
||||
table->keyuse is set in the case there was an original WHERE clause
|
||||
on the table that was optimized away.
|
||||
table->on_expr tells us that it was a LEFT JOIN and there will be
|
||||
at least one row generated from the table.
|
||||
*/
|
||||
if (table->select_cond || (table->keyuse && !table->on_expr))
|
||||
{
|
||||
/* We have to sort all rows */
|
||||
select_limit= HA_POS_ERROR;
|
||||
|
Loading…
x
Reference in New Issue
Block a user