diff --git a/mysql-test/suite/handler/interface.result b/mysql-test/suite/handler/interface.result index 3758400345b..2a0f36e5fa2 100644 --- a/mysql-test/suite/handler/interface.result +++ b/mysql-test/suite/handler/interface.result @@ -338,9 +338,9 @@ CREATE TABLE t1 (g GEOMETRY NOT NULL, SPATIAL gi(g)); INSERT INTO t1 VALUES (POINT(0,0)); HANDLER t1 OPEN AS h; HANDLER h READ `gi`= (10); -ERROR HY000: SPATIAL index `gi` does not support this operation +ERROR 22003: Cannot get geometry object from data you send to the GEOMETRY field HANDLER h READ `gi`> (10); -ERROR HY000: SPATIAL index `gi` does not support this operation +ERROR 22003: Cannot get geometry object from data you send to the GEOMETRY field HANDLER h CLOSE; DROP TABLE t1; CREATE TABLE t1 (w VARCHAR(100), FULLTEXT fk(w)); @@ -352,3 +352,12 @@ HANDLER h READ `fk`> (10); ERROR HY000: FULLTEXT index `fk` does not support this operation HANDLER h CLOSE; DROP TABLE t1; +# +# MDEV-35082 HANDLER with FULLTEXT keys is not always rejected +# +create table t (a int primary key, v text not null, fulltext(v)); +handler t open; +handler t read v next; +ERROR HY000: FULLTEXT index `v` does not support this operation +drop table t; +# End of 10.5 tests diff --git a/mysql-test/suite/handler/interface.test b/mysql-test/suite/handler/interface.test index a4ed640dbc0..43abe47cf9b 100644 --- a/mysql-test/suite/handler/interface.test +++ b/mysql-test/suite/handler/interface.test @@ -385,9 +385,9 @@ DROP TABLE t1; CREATE TABLE t1 (g GEOMETRY NOT NULL, SPATIAL gi(g)); INSERT INTO t1 VALUES (POINT(0,0)); HANDLER t1 OPEN AS h; ---error ER_KEY_DOESNT_SUPPORT +--error ER_CANT_CREATE_GEOMETRY_OBJECT HANDLER h READ `gi`= (10); ---error ER_KEY_DOESNT_SUPPORT +--error ER_CANT_CREATE_GEOMETRY_OBJECT HANDLER h READ `gi`> (10); HANDLER h CLOSE; DROP TABLE t1; @@ -401,3 +401,14 @@ HANDLER h READ `fk`= (10); HANDLER h READ `fk`> (10); HANDLER h CLOSE; DROP TABLE t1; + +--echo # +--echo # MDEV-35082 HANDLER with FULLTEXT keys is not always rejected +--echo # +create table t (a int primary key, v text not null, fulltext(v)); +handler t open; +--error ER_KEY_DOESNT_SUPPORT +handler t read v next; +drop table t; + +--echo # End of 10.5 tests diff --git a/mysql-test/suite/innodb_fts/r/innodb_fts_misc.result b/mysql-test/suite/innodb_fts/r/innodb_fts_misc.result index 2cc992be73a..434e060e258 100644 --- a/mysql-test/suite/innodb_fts/r/innodb_fts_misc.result +++ b/mysql-test/suite/innodb_fts/r/innodb_fts_misc.result @@ -1188,9 +1188,9 @@ DROP TABLE t; CREATE TABLE t(a CHAR(1),FULLTEXT KEY(a)) ENGINE=INNODB; HANDLER t OPEN; HANDLER t READ a NEXT; -a +ERROR HY000: FULLTEXT index `a` does not support this operation HANDLER t READ a PREV; -a +ERROR HY000: FULLTEXT index `a` does not support this operation DROP TABLE t; CREATE TABLE `%`(a TEXT, FULLTEXT INDEX(a)) ENGINE=INNODB; CREATE TABLE `A B`(a TEXT, FULLTEXT INDEX(a)) ENGINE=INNODB; diff --git a/mysql-test/suite/innodb_fts/r/misc.result b/mysql-test/suite/innodb_fts/r/misc.result index 684996fb748..4afd9bf1f74 100644 --- a/mysql-test/suite/innodb_fts/r/misc.result +++ b/mysql-test/suite/innodb_fts/r/misc.result @@ -1183,9 +1183,9 @@ DROP TABLE t; CREATE TABLE t(a CHAR(1),FULLTEXT KEY(a)) ENGINE=INNODB; HANDLER t OPEN; HANDLER t READ a NEXT; -a +ERROR HY000: FULLTEXT index `a` does not support this operation HANDLER t READ a PREV; -a +ERROR HY000: FULLTEXT index `a` does not support this operation DROP TABLE t; CREATE TABLE `%`(a TEXT, FULLTEXT INDEX(a)) ENGINE=INNODB; CREATE TABLE `A B`(a TEXT, FULLTEXT INDEX(a)) ENGINE=INNODB; diff --git a/mysql-test/suite/innodb_fts/t/innodb_fts_misc.test b/mysql-test/suite/innodb_fts/t/innodb_fts_misc.test index 470acd554b4..b67f3552790 100644 --- a/mysql-test/suite/innodb_fts/t/innodb_fts_misc.test +++ b/mysql-test/suite/innodb_fts/t/innodb_fts_misc.test @@ -1155,7 +1155,9 @@ DROP TABLE t; # InnoDB FTS does not support index scan from handler CREATE TABLE t(a CHAR(1),FULLTEXT KEY(a)) ENGINE=INNODB; HANDLER t OPEN; +--error ER_KEY_DOESNT_SUPPORT HANDLER t READ a NEXT; +--error ER_KEY_DOESNT_SUPPORT HANDLER t READ a PREV; DROP TABLE t; diff --git a/mysql-test/suite/innodb_fts/t/misc.test b/mysql-test/suite/innodb_fts/t/misc.test index f897cf1265d..f3c10d16205 100644 --- a/mysql-test/suite/innodb_fts/t/misc.test +++ b/mysql-test/suite/innodb_fts/t/misc.test @@ -1148,7 +1148,9 @@ DROP TABLE t; # InnoDB FTS does not support index scan from handler CREATE TABLE t(a CHAR(1),FULLTEXT KEY(a)) ENGINE=INNODB; HANDLER t OPEN; +--error ER_KEY_DOESNT_SUPPORT HANDLER t READ a NEXT; +--error ER_KEY_DOESNT_SUPPORT HANDLER t READ a PREV; DROP TABLE t; diff --git a/sql/sql_handler.cc b/sql/sql_handler.cc index 4108f42eb14..c549f89b750 100644 --- a/sql/sql_handler.cc +++ b/sql/sql_handler.cc @@ -647,28 +647,26 @@ mysql_ha_fix_cond_and_key(SQL_HANDLER *handler, } } + const KEY *c_key= table->s->key_info + handler->keyno; + if (c_key->algorithm == HA_KEY_ALG_FULLTEXT || + (ha_rkey_mode != HA_READ_KEY_EXACT && + (table->file->index_flags(handler->keyno, 0, TRUE) & + (HA_READ_NEXT | HA_READ_PREV | HA_READ_RANGE)) == 0)) + { + my_error(ER_KEY_DOESNT_SUPPORT, MYF(0), + table->file->index_type(handler->keyno), c_key->name.str); + return 1; + } + /* Check key parts */ if (mode == RKEY) { - TABLE *table= handler->table; KEY *keyinfo= table->key_info + handler->keyno; KEY_PART_INFO *key_part= keyinfo->key_part; List_iterator it_ke(*key_expr); Item *item; key_part_map keypart_map; uint key_len; - const KEY *c_key= table->s->key_info + handler->keyno; - - if ((c_key->flags & HA_SPATIAL) || - c_key->algorithm == HA_KEY_ALG_FULLTEXT || - (ha_rkey_mode != HA_READ_KEY_EXACT && - (table->file->index_flags(handler->keyno, 0, TRUE) & - (HA_READ_NEXT | HA_READ_PREV | HA_READ_RANGE)) == 0)) - { - my_error(ER_KEY_DOESNT_SUPPORT, MYF(0), - table->file->index_type(handler->keyno), keyinfo->name.str); - return 1; - } if (key_expr->elements > keyinfo->user_defined_key_parts) {