From 6eaa5fd21081c23f3d4da5be71a32886d98de5e9 Mon Sep 17 00:00:00 2001 From: Sergei Golubchik Date: Thu, 17 Nov 2016 15:47:27 +0100 Subject: bugfix: InnoDB doesn't support ICP on vcols --- mysql-test/suite/gcol/r/innodb_virtual_basic.result | 2 ++ mysql-test/suite/gcol/t/innodb_virtual_basic.test | 2 ++ storage/innobase/handler/ha_innodb.cc | 3 +++ 3 files changed, 7 insertions(+) diff --git a/mysql-test/suite/gcol/r/innodb_virtual_basic.result b/mysql-test/suite/gcol/r/innodb_virtual_basic.result index bcd969c84fb..1d40e93cd09 100644 --- a/mysql-test/suite/gcol/r/innodb_virtual_basic.result +++ b/mysql-test/suite/gcol/r/innodb_virtual_basic.result @@ -1504,6 +1504,8 @@ NULL NULL NULL 0 +SELECT * FROM t WHERE d > 0; +a b d SELECT * FROM t; a b d 0 0 0 diff --git a/mysql-test/suite/gcol/t/innodb_virtual_basic.test b/mysql-test/suite/gcol/t/innodb_virtual_basic.test index 342d9e42976..d0df2dc9762 100644 --- a/mysql-test/suite/gcol/t/innodb_virtual_basic.test +++ b/mysql-test/suite/gcol/t/innodb_virtual_basic.test @@ -1415,6 +1415,8 @@ ALTER TABLE t DROP COLUMN c, ADD INDEX vidx(d), ALGORITHM=INPLACE; SELECT d FROM t; +SELECT * FROM t WHERE d > 0; + SELECT * FROM t; DROP TABLE t; diff --git a/storage/innobase/handler/ha_innodb.cc b/storage/innobase/handler/ha_innodb.cc index 492e1a70602..d4446aaa960 100644 --- a/storage/innobase/handler/ha_innodb.cc +++ b/storage/innobase/handler/ha_innodb.cc @@ -8455,6 +8455,8 @@ ha_innobase::build_template( if (innobase_is_v_fld(table->field[i])) { index_contains = dict_index_contains_col_or_prefix( index, num_v, true); + if (index_contains) + goto no_icp; } else { index_contains = dict_index_contains_col_or_prefix( index, i - num_v, false); @@ -8637,6 +8639,7 @@ ha_innobase::build_template( m_prebuilt->idx_cond = this; } else { +no_icp: mysql_row_templ_t* templ; ulint num_v = 0; /* No index condition pushdown */ -- cgit v1.2.1