Fix for BUG#7331 merged manually from 4.1.
This commit is contained in:
parent
2933cd3d35
commit
bb77b2e55f
@ -740,3 +740,41 @@ a b
|
||||
1 2
|
||||
1 1
|
||||
drop table t1;
|
||||
create table t1 (
|
||||
`sid` decimal(8,0) default null,
|
||||
`wnid` varchar(11) not null default '',
|
||||
key `wnid14` (`wnid`(4)),
|
||||
key `wnid` (`wnid`)
|
||||
) engine=myisam default charset=latin1;
|
||||
insert into t1 (`sid`, `wnid`) values
|
||||
('10100','01019000000'),('37986','01019000000'),('37987','01019010000'),
|
||||
('39560','01019090000'),('37989','01019000000'),('37990','01019011000'),
|
||||
('37991','01019011000'),('37992','01019019000'),('37993','01019030000'),
|
||||
('37994','01019090000'),('475','02070000000'),('25253','02071100000'),
|
||||
('25255','02071100000'),('25256','02071110000'),('25258','02071130000'),
|
||||
('25259','02071190000'),('25260','02071200000'),('25261','02071210000'),
|
||||
('25262','02071290000'),('25263','02071300000'),('25264','02071310000'),
|
||||
('25265','02071310000'),('25266','02071320000'),('25267','02071320000'),
|
||||
('25269','02071330000'),('25270','02071340000'),('25271','02071350000'),
|
||||
('25272','02071360000'),('25273','02071370000'),('25281','02071391000'),
|
||||
('25282','02071391000'),('25283','02071399000'),('25284','02071400000'),
|
||||
('25285','02071410000'),('25286','02071410000'),('25287','02071420000'),
|
||||
('25288','02071420000'),('25291','02071430000'),('25290','02071440000'),
|
||||
('25292','02071450000'),('25293','02071460000'),('25294','02071470000'),
|
||||
('25295','02071491000'),('25296','02071491000'),('25297','02071499000');
|
||||
explain select * from t1 where wnid like '0101%' order by wnid;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 range wnid14,wnid wnid 13 NULL 10 Using where
|
||||
select * from t1 where wnid like '0101%' order by wnid;
|
||||
sid wnid
|
||||
10100 01019000000
|
||||
37986 01019000000
|
||||
37989 01019000000
|
||||
37987 01019010000
|
||||
37990 01019011000
|
||||
37991 01019011000
|
||||
37992 01019019000
|
||||
37993 01019030000
|
||||
39560 01019090000
|
||||
37994 01019090000
|
||||
drop table t1;
|
||||
|
@ -506,3 +506,36 @@ insert t1 values (1,1,1),(1,1,2),(1,2,1);
|
||||
select a, b from t1 group by a, b order by sum(c);
|
||||
drop table t1;
|
||||
|
||||
#
|
||||
# Bug #7331
|
||||
#
|
||||
|
||||
create table t1 (
|
||||
`sid` decimal(8,0) default null,
|
||||
`wnid` varchar(11) not null default '',
|
||||
key `wnid14` (`wnid`(4)),
|
||||
key `wnid` (`wnid`)
|
||||
) engine=myisam default charset=latin1;
|
||||
|
||||
insert into t1 (`sid`, `wnid`) values
|
||||
('10100','01019000000'),('37986','01019000000'),('37987','01019010000'),
|
||||
('39560','01019090000'),('37989','01019000000'),('37990','01019011000'),
|
||||
('37991','01019011000'),('37992','01019019000'),('37993','01019030000'),
|
||||
('37994','01019090000'),('475','02070000000'),('25253','02071100000'),
|
||||
('25255','02071100000'),('25256','02071110000'),('25258','02071130000'),
|
||||
('25259','02071190000'),('25260','02071200000'),('25261','02071210000'),
|
||||
('25262','02071290000'),('25263','02071300000'),('25264','02071310000'),
|
||||
('25265','02071310000'),('25266','02071320000'),('25267','02071320000'),
|
||||
('25269','02071330000'),('25270','02071340000'),('25271','02071350000'),
|
||||
('25272','02071360000'),('25273','02071370000'),('25281','02071391000'),
|
||||
('25282','02071391000'),('25283','02071399000'),('25284','02071400000'),
|
||||
('25285','02071410000'),('25286','02071410000'),('25287','02071420000'),
|
||||
('25288','02071420000'),('25291','02071430000'),('25290','02071440000'),
|
||||
('25292','02071450000'),('25293','02071460000'),('25294','02071470000'),
|
||||
('25295','02071491000'),('25296','02071491000'),('25297','02071499000');
|
||||
|
||||
explain select * from t1 where wnid like '0101%' order by wnid;
|
||||
|
||||
select * from t1 where wnid like '0101%' order by wnid;
|
||||
|
||||
drop table t1;
|
||||
|
@ -10426,13 +10426,22 @@ test_if_skip_sort_order(JOIN_TAB *tab,ORDER *order,ha_rows select_limit,
|
||||
}
|
||||
else
|
||||
{
|
||||
select->quick->head->file->ha_index_end();
|
||||
/*
|
||||
We have verified above that select->quick is not
|
||||
index_merge quick select.
|
||||
*/
|
||||
select->quick->index= new_ref_key;
|
||||
select->quick->init();
|
||||
/*
|
||||
The range optimizer constructed QUICK_RANGE for ref_key, and
|
||||
we want to use instead new_ref_key as the index. We can't
|
||||
just change the index of the quick select, because this may
|
||||
result in an incosistent QUICK_SELECT object. Below we
|
||||
create a new QUICK_SELECT from scratch so that all its
|
||||
parameres are set correctly by the range optimizer.
|
||||
*/
|
||||
key_map new_ref_key_map;
|
||||
new_ref_key_map.clear_all(); /* Force the creation of quick select */
|
||||
new_ref_key_map.set_bit(new_ref_key); /* only for new_ref_key. */
|
||||
|
||||
if (select->test_quick_select(tab->join->thd, new_ref_key_map, 0,
|
||||
(tab->join->select_options & OPTION_FOUND_ROWS) ?
|
||||
HA_POS_ERROR : tab->join->unit->select_limit_cnt) <= 0)
|
||||
DBUG_RETURN(0);
|
||||
}
|
||||
ref_key= new_ref_key;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user