From f01b0ac2212a8e8c4192842ddba123198353c591 Mon Sep 17 00:00:00 2001 From: unknown Date: Wed, 12 Apr 2006 22:05:23 +0500 Subject: [PATCH] bug #15860 (SPATIAL keys in INNODB) mysql-test/r/innodb.result: result added mysql-test/t/innodb.test: testcase sql/ha_myisam.cc: HA_CAN_RTREEKEYS added to ha_myisam sql/handler.h: HA_CAN_RTREEKEYS defined sql/share/errmsg.txt: error message added sql/sql_table.cc: check that the handler allows SPATIAL keys --- mysql-test/r/innodb.result | 2 ++ mysql-test/t/innodb.test | 7 +++++++ sql/ha_myisam.cc | 2 +- sql/handler.h | 1 + sql/share/errmsg.txt | 2 ++ sql/sql_table.cc | 6 ++++++ 6 files changed, 19 insertions(+), 1 deletion(-) diff --git a/mysql-test/r/innodb.result b/mysql-test/r/innodb.result index 9a190557211..1e6793c39db 100644 --- a/mysql-test/r/innodb.result +++ b/mysql-test/r/innodb.result @@ -3241,3 +3241,5 @@ where t2.a between t1.a - interval 2 day and t1.a + interval 2 day; a a 2005-10-01 2005-10-01 drop table t1, t2; +create table t1 (g geometry not null, spatial gk(g)) engine=innodb; +ERROR HY000: The used table type doesn't support SPATIAL indexes diff --git a/mysql-test/t/innodb.test b/mysql-test/t/innodb.test index b0835cd8419..b95a6a25f28 100644 --- a/mysql-test/t/innodb.test +++ b/mysql-test/t/innodb.test @@ -2139,3 +2139,10 @@ insert into t2 values('2005-10-01'); select * from t1, t2 where t2.a between t1.a - interval 2 day and t1.a + interval 2 day; drop table t1, t2; + +# +# Bug #15680 (SPATIAL key in innodb) +# +--error 1461 +create table t1 (g geometry not null, spatial gk(g)) engine=innodb; + diff --git a/sql/ha_myisam.cc b/sql/ha_myisam.cc index ff6431fa0f3..128cc191434 100644 --- a/sql/ha_myisam.cc +++ b/sql/ha_myisam.cc @@ -165,7 +165,7 @@ ha_myisam::ha_myisam(TABLE *table_arg) int_table_flags(HA_NULL_IN_KEY | HA_CAN_FULLTEXT | HA_CAN_SQL_HANDLER | HA_DUPP_POS | HA_CAN_INDEX_BLOBS | HA_AUTO_PART_KEY | HA_FILE_BASED | HA_CAN_GEOMETRY | HA_READ_RND_SAME | - HA_CAN_INSERT_DELAYED | HA_CAN_BIT_FIELD), + HA_CAN_INSERT_DELAYED | HA_CAN_BIT_FIELD | HA_CAN_RTREEKEYS), can_enable_indexes(1) {} diff --git a/sql/handler.h b/sql/handler.h index 977bd77a54e..056b11f2526 100644 --- a/sql/handler.h +++ b/sql/handler.h @@ -80,6 +80,7 @@ */ #define HA_CAN_INSERT_DELAYED (1 << 14) #define HA_PRIMARY_KEY_IN_READ_INDEX (1 << 15) +#define HA_CAN_RTREEKEYS (1 << 17) #define HA_NOT_DELETE_WITH_CACHE (1 << 18) #define HA_NO_PREFIX_CHAR_KEYS (1 << 20) #define HA_CAN_FULLTEXT (1 << 21) diff --git a/sql/share/errmsg.txt b/sql/share/errmsg.txt index 37487c245a9..5de070faeb5 100644 --- a/sql/share/errmsg.txt +++ b/sql/share/errmsg.txt @@ -5611,3 +5611,5 @@ ER_TABLE_NEEDS_UPGRADE eng "Table upgrade required. Please do \"REPAIR TABLE `%-.32s`\" to fix it!" ER_SP_NO_AGGREGATE 42000 eng "AGGREGATE is not supported for stored functions" +ER_TABLE_CANT_HANDLE_SPKEYS + eng "The used table type doesn't support SPATIAL indexes" diff --git a/sql/sql_table.cc b/sql/sql_table.cc index cb556acd5c7..f57fb4715d2 100644 --- a/sql/sql_table.cc +++ b/sql/sql_table.cc @@ -1130,6 +1130,12 @@ static int mysql_prepare_table(THD *thd, HA_CREATE_INFO *create_info, /* TODO: Add proper checks if handler supports key_type and algorithm */ if (key_info->flags & HA_SPATIAL) { + if (!(file->table_flags() & HA_CAN_RTREEKEYS)) + { + my_message(ER_TABLE_CANT_HANDLE_SPKEYS, ER(ER_TABLE_CANT_HANDLE_SPKEYS), + MYF(0)); + DBUG_RETURN(-1); + } if (key_info->key_parts != 1) { my_error(ER_WRONG_ARGUMENTS, MYF(0), "SPATIAL INDEX");