1
0
mirror of https://github.com/MariaDB/server.git synced 2025-07-30 16:24:05 +03:00

MDEV-12293 Assertion `table->no_keyread || !table->covering_keys.is_set(tab->index) || table->file->keyread == tab->index' failed

sometimes the optimizer starts a keyread on some index
and later (but before any actual index accesses) changes
it to a keyread on a different index
This commit is contained in:
Sergei Golubchik
2017-04-18 17:44:30 +02:00
parent 54e24fcbd5
commit d17093b2ed
3 changed files with 18 additions and 3 deletions

View File

@ -0,0 +1,6 @@
create table t1 (f1 int not null, f2 int, f3 int, primary key (f1,f2), key(f2,f3)) engine=innodb;
create view v1 as select * from t1 where f2 = 1;
select distinct f1 from v1;
f1
drop view v1;
drop table t1;

10
mysql-test/t/keyread.test Normal file
View File

@ -0,0 +1,10 @@
--source include/have_innodb.inc
#
# MDEV-12293 Assertion `table->no_keyread || !table->covering_keys.is_set(tab->index) || table->file->keyread == tab->index' failed
#
create table t1 (f1 int not null, f2 int, f3 int, primary key (f1,f2), key(f2,f3)) engine=innodb;
create view v1 as select * from t1 where f2 = 1;
select distinct f1 from v1;
drop view v1;
drop table t1;

View File

@ -2858,10 +2858,9 @@ public:
bool keyread_enabled() { return keyread < MAX_KEY; }
int ha_start_keyread(uint idx)
{
if (keyread_enabled())
return 0;
int res= keyread_enabled() ? 0 : extra(HA_EXTRA_KEYREAD);
keyread= idx;
return extra(HA_EXTRA_KEYREAD);
return res;
}
int ha_end_keyread()
{