Commit f01b0ac2 authored by unknown's avatar unknown

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
parent 10633fd8
...@@ -3241,3 +3241,5 @@ where t2.a between t1.a - interval 2 day and t1.a + interval 2 day; ...@@ -3241,3 +3241,5 @@ where t2.a between t1.a - interval 2 day and t1.a + interval 2 day;
a a a a
2005-10-01 2005-10-01 2005-10-01 2005-10-01
drop table t1, t2; 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
...@@ -2139,3 +2139,10 @@ insert into t2 values('2005-10-01'); ...@@ -2139,3 +2139,10 @@ insert into t2 values('2005-10-01');
select * from t1, t2 select * from t1, t2
where t2.a between t1.a - interval 2 day and t1.a + interval 2 day; where t2.a between t1.a - interval 2 day and t1.a + interval 2 day;
drop table t1, t2; drop table t1, t2;
#
# Bug #15680 (SPATIAL key in innodb)
#
--error 1461
create table t1 (g geometry not null, spatial gk(g)) engine=innodb;
...@@ -165,7 +165,7 @@ ha_myisam::ha_myisam(TABLE *table_arg) ...@@ -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 | 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_DUPP_POS | HA_CAN_INDEX_BLOBS | HA_AUTO_PART_KEY |
HA_FILE_BASED | HA_CAN_GEOMETRY | HA_READ_RND_SAME | 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) can_enable_indexes(1)
{} {}
......
...@@ -80,6 +80,7 @@ ...@@ -80,6 +80,7 @@
*/ */
#define HA_CAN_INSERT_DELAYED (1 << 14) #define HA_CAN_INSERT_DELAYED (1 << 14)
#define HA_PRIMARY_KEY_IN_READ_INDEX (1 << 15) #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_NOT_DELETE_WITH_CACHE (1 << 18)
#define HA_NO_PREFIX_CHAR_KEYS (1 << 20) #define HA_NO_PREFIX_CHAR_KEYS (1 << 20)
#define HA_CAN_FULLTEXT (1 << 21) #define HA_CAN_FULLTEXT (1 << 21)
......
...@@ -5611,3 +5611,5 @@ ER_TABLE_NEEDS_UPGRADE ...@@ -5611,3 +5611,5 @@ ER_TABLE_NEEDS_UPGRADE
eng "Table upgrade required. Please do \"REPAIR TABLE `%-.32s`\" to fix it!" eng "Table upgrade required. Please do \"REPAIR TABLE `%-.32s`\" to fix it!"
ER_SP_NO_AGGREGATE 42000 ER_SP_NO_AGGREGATE 42000
eng "AGGREGATE is not supported for stored functions" eng "AGGREGATE is not supported for stored functions"
ER_TABLE_CANT_HANDLE_SPKEYS
eng "The used table type doesn't support SPATIAL indexes"
...@@ -1130,6 +1130,12 @@ static int mysql_prepare_table(THD *thd, HA_CREATE_INFO *create_info, ...@@ -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 */ /* TODO: Add proper checks if handler supports key_type and algorithm */
if (key_info->flags & HA_SPATIAL) 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) if (key_info->key_parts != 1)
{ {
my_error(ER_WRONG_ARGUMENTS, MYF(0), "SPATIAL INDEX"); my_error(ER_WRONG_ARGUMENTS, MYF(0), "SPATIAL INDEX");
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment