mirror of
https://github.com/MariaDB/server.git
synced 2025-07-29 05:21:33 +03:00
bug #1172 - crash on force index() and SEL_ARG::MAYBE_KEY
This commit is contained in:
@ -260,3 +260,16 @@ explain select count(*) from t1 where x in (1,2);
|
|||||||
table type possible_keys key key_len ref rows Extra
|
table type possible_keys key key_len ref rows Extra
|
||||||
t1 range x x 5 NULL 2 Using where; Using index
|
t1 range x x 5 NULL 2 Using where; Using index
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
CREATE TABLE t1 (key1 int(11) NOT NULL default '0', KEY i1 (key1), KEY i2 (key1));
|
||||||
|
INSERT INTO t1 VALUES (0),(0),(1),(1);
|
||||||
|
CREATE TABLE t2 (keya int(11) NOT NULL default '0', KEY j1 (keya));
|
||||||
|
INSERT INTO t2 VALUES (0),(0),(1),(1),(2),(2);
|
||||||
|
explain select * from t1, t2 where (t1.key1 <t2.keya + 1) and t2.keya=3;
|
||||||
|
table type possible_keys key key_len ref rows Extra
|
||||||
|
t2 ref j1 j1 4 const 1 Using where; Using index
|
||||||
|
t1 ALL i1,i2 NULL NULL NULL 4 Range checked for each record (index map: 3)
|
||||||
|
explain select * from t1 force index(i2), t2 where (t1.key1 <t2.keya + 1) and t2.keya=3;
|
||||||
|
table type possible_keys key key_len ref rows Extra
|
||||||
|
t2 ref j1 j1 4 const 1 Using where; Using index
|
||||||
|
t1 ALL i2 NULL NULL NULL 4 Range checked for each record (index map: 2)
|
||||||
|
DROP TABLE t1,t2;
|
||||||
|
@ -203,3 +203,14 @@ explain select count(*) from t1 where x in (1);
|
|||||||
explain select count(*) from t1 where x in (1,2);
|
explain select count(*) from t1 where x in (1,2);
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
|
||||||
|
#
|
||||||
|
# bug #1172
|
||||||
|
#
|
||||||
|
CREATE TABLE t1 (key1 int(11) NOT NULL default '0', KEY i1 (key1), KEY i2 (key1));
|
||||||
|
INSERT INTO t1 VALUES (0),(0),(1),(1);
|
||||||
|
CREATE TABLE t2 (keya int(11) NOT NULL default '0', KEY j1 (keya));
|
||||||
|
INSERT INTO t2 VALUES (0),(0),(1),(1),(2),(2);
|
||||||
|
explain select * from t1, t2 where (t1.key1 <t2.keya + 1) and t2.keya=3;
|
||||||
|
explain select * from t1 force index(i2), t2 where (t1.key1 <t2.keya + 1) and t2.keya=3;
|
||||||
|
DROP TABLE t1,t2;
|
||||||
|
|
||||||
|
@ -692,7 +692,7 @@ int SQL_SELECT::test_quick_select(key_map keys_to_use, table_map prev_tables,
|
|||||||
uint keynr= param.real_keynr[idx];
|
uint keynr= param.real_keynr[idx];
|
||||||
if ((*key)->type == SEL_ARG::MAYBE_KEY ||
|
if ((*key)->type == SEL_ARG::MAYBE_KEY ||
|
||||||
(*key)->maybe_flag)
|
(*key)->maybe_flag)
|
||||||
needed_reg|= (key_map) 1 << keynr;
|
needed_reg|= (key_map) 1 << keynr;
|
||||||
|
|
||||||
found_records=check_quick_select(¶m, idx, *key);
|
found_records=check_quick_select(¶m, idx, *key);
|
||||||
if (found_records != HA_POS_ERROR && found_records > 2 &&
|
if (found_records != HA_POS_ERROR && found_records > 2 &&
|
||||||
@ -716,7 +716,7 @@ int SQL_SELECT::test_quick_select(key_map keys_to_use, table_map prev_tables,
|
|||||||
param.range_count,
|
param.range_count,
|
||||||
found_records)+
|
found_records)+
|
||||||
(double) found_records / TIME_FOR_COMPARE);
|
(double) found_records / TIME_FOR_COMPARE);
|
||||||
if (read_time > found_read_time)
|
if (read_time > found_read_time && found_records != HA_POS_ERROR)
|
||||||
{
|
{
|
||||||
read_time=found_read_time;
|
read_time=found_read_time;
|
||||||
records=found_records;
|
records=found_records;
|
||||||
|
Reference in New Issue
Block a user