diff --git a/mysql-test/r/keyread.result b/mysql-test/r/keyread.result new file mode 100644 index 00000000000..d8e9659d4bb --- /dev/null +++ b/mysql-test/r/keyread.result @@ -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; diff --git a/mysql-test/t/keyread.test b/mysql-test/t/keyread.test new file mode 100644 index 00000000000..d9d3002d392 --- /dev/null +++ b/mysql-test/t/keyread.test @@ -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; diff --git a/sql/handler.h b/sql/handler.h index 830e45a139f..7750c8ad7fb 100644 --- a/sql/handler.h +++ b/sql/handler.h @@ -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() {