mirror of
https://github.com/MariaDB/server.git
synced 2025-07-29 05:21:33 +03:00
BUG#20357 - Got error 124 from storage engine using MIN and MAX
functions in queries Using MAX()/MIN() on table with disabled indexes (by ALTER TABLE) results in error 124 (wrong index) from storage engine. The problem was that optimizer use disabled index to optimize MAX()/MIN(). Normally it must skip disabled index and perform table scan. This patch skips disabled indexes for min/max optimization.
This commit is contained in:
@ -748,3 +748,16 @@ select count(id1) from t1 where id2 = 10;
|
|||||||
count(id1)
|
count(id1)
|
||||||
5
|
5
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
CREATE TABLE t1(a TINYINT, KEY(a)) ENGINE=MyISAM;
|
||||||
|
INSERT INTO t1 VALUES(1);
|
||||||
|
SELECT MAX(a) FROM t1 IGNORE INDEX(a);
|
||||||
|
MAX(a)
|
||||||
|
1
|
||||||
|
ALTER TABLE t1 DISABLE KEYS;
|
||||||
|
SELECT MAX(a) FROM t1;
|
||||||
|
MAX(a)
|
||||||
|
1
|
||||||
|
SELECT MAX(a) FROM t1 IGNORE INDEX(a);
|
||||||
|
MAX(a)
|
||||||
|
1
|
||||||
|
DROP TABLE t1;
|
||||||
|
@ -705,4 +705,16 @@ select count(*) from t1 where id2 = 10;
|
|||||||
select count(id1) from t1 where id2 = 10;
|
select count(id1) from t1 where id2 = 10;
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
|
||||||
|
#
|
||||||
|
# BUG##20357 - Got error 124 from storage engine using MIN and MAX functions
|
||||||
|
# in queries
|
||||||
|
#
|
||||||
|
CREATE TABLE t1(a TINYINT, KEY(a)) ENGINE=MyISAM;
|
||||||
|
INSERT INTO t1 VALUES(1);
|
||||||
|
SELECT MAX(a) FROM t1 IGNORE INDEX(a);
|
||||||
|
ALTER TABLE t1 DISABLE KEYS;
|
||||||
|
SELECT MAX(a) FROM t1;
|
||||||
|
SELECT MAX(a) FROM t1 IGNORE INDEX(a);
|
||||||
|
DROP TABLE t1;
|
||||||
|
|
||||||
# End of 4.1 tests
|
# End of 4.1 tests
|
||||||
|
@ -673,6 +673,12 @@ static bool find_key_for_maxmin(bool max_fl, TABLE_REF *ref,
|
|||||||
{
|
{
|
||||||
KEY_PART_INFO *part,*part_end;
|
KEY_PART_INFO *part,*part_end;
|
||||||
key_part_map key_part_to_use= 0;
|
key_part_map key_part_to_use= 0;
|
||||||
|
/*
|
||||||
|
Perform a check if index is not disabled by ALTER TABLE
|
||||||
|
or IGNORE INDEX.
|
||||||
|
*/
|
||||||
|
if (!table->keys_in_use_for_query.is_set(idx))
|
||||||
|
continue;
|
||||||
uint jdx= 0;
|
uint jdx= 0;
|
||||||
*prefix_len= 0;
|
*prefix_len= 0;
|
||||||
for (part= keyinfo->key_part, part_end= part+keyinfo->key_parts ;
|
for (part= keyinfo->key_part, part_end= part+keyinfo->key_parts ;
|
||||||
|
Reference in New Issue
Block a user