diff --git a/mysql-test/suite/vcol/r/vcol_misc.result b/mysql-test/suite/vcol/r/vcol_misc.result index 1a16fd1a3944e..4bade1bfa4ee4 100644 --- a/mysql-test/suite/vcol/r/vcol_misc.result +++ b/mysql-test/suite/vcol/r/vcol_misc.result @@ -591,3 +591,21 @@ DROP TABLE t; # # End of 10.5 tests # +# +# MDEV-28610 Assertion `marked_for_read()' failed upon range select with virtual column in index +# +CREATE TABLE t ( +a INT UNSIGNED NOT NULL DEFAULT 0, +b INT AS (a) VIRTUAL, +c TIME, +d INT, +e DATE, +f VARCHAR(1024), +PRIMARY KEY(c), +KEY(c,b,d,f(64)) +); +INSERT INTO t (c) VALUES ('00:00:00'),('00:00:04'); +SELECT c FROM t WHERE c BETWEEN '00:00:00' AND '00:00:00' ORDER BY d; +c +00:00:00 +DROP TABLE t; diff --git a/mysql-test/suite/vcol/t/vcol_misc.test b/mysql-test/suite/vcol/t/vcol_misc.test index 2709ff5b46535..12993bb489f58 100644 --- a/mysql-test/suite/vcol/t/vcol_misc.test +++ b/mysql-test/suite/vcol/t/vcol_misc.test @@ -560,3 +560,23 @@ DROP TABLE t; --echo # --echo # End of 10.5 tests --echo # + +--echo # +--echo # MDEV-28610 Assertion `marked_for_read()' failed upon range select with virtual column in index +--echo # + +CREATE TABLE t ( + a INT UNSIGNED NOT NULL DEFAULT 0, + b INT AS (a) VIRTUAL, + c TIME, + d INT, + e DATE, + f VARCHAR(1024), + PRIMARY KEY(c), + KEY(c,b,d,f(64)) +); +INSERT INTO t (c) VALUES ('00:00:00'),('00:00:04'); +SELECT c FROM t WHERE c BETWEEN '00:00:00' AND '00:00:00' ORDER BY d; + +# Cleanup +DROP TABLE t; diff --git a/sql/sql_select.cc b/sql/sql_select.cc index 70785f531bb00..626a9bf27a7e9 100644 --- a/sql/sql_select.cc +++ b/sql/sql_select.cc @@ -32822,7 +32822,7 @@ void JOIN::init_join_cache_and_keyread() tuple. */ if (!(table->file->index_flags(table->file->keyread, 0, 1) & HA_CLUSTERED_INDEX)) - table->mark_index_columns(table->file->keyread, table->read_set); + table->mark_index_columns_for_read(table->file->keyread); } bool init_for_explain= false; diff --git a/sql/table.cc b/sql/table.cc index 2b283fd93e1b8..132680299e91e 100644 --- a/sql/table.cc +++ b/sql/table.cc @@ -7664,7 +7664,7 @@ inline void TABLE::mark_index_columns_no_reset(uint index, MY_BITMAP *bitmap) } -inline void TABLE::mark_index_columns_for_read(uint index) +void TABLE::mark_index_columns_for_read(uint index) { do_mark_index_columns(this, index, read_set, true); }