Commit 3ab2ff99 authored by Dmitry Lenev's avatar Dmitry Lenev

Merged fix for bug #59888 "debug assertion when attempt to

create spatial index on char > 31 bytes". Did after-merge
fixes.
parents 0dab3360 7e1cd4ae
...@@ -1034,6 +1034,14 @@ p ...@@ -1034,6 +1034,14 @@ p
NULL NULL
NULL NULL
drop table t1; drop table t1;
#
# Test for bug #59888 "debug assertion when attempt to create spatial index
# on char > 31 bytes".
#
create table t1(a char(32) not null) engine=myisam;
create spatial index i on t1 (a);
ERROR 42000: A SPATIAL index may only contain a geometrical type column
drop table t1;
End of 5.1 tests End of 5.1 tests
CREATE TABLE t1( CREATE TABLE t1(
col0 BINARY NOT NULL, col0 BINARY NOT NULL,
......
...@@ -757,6 +757,17 @@ insert into t1 values (geomfromtext("point(1 0)")); ...@@ -757,6 +757,17 @@ insert into t1 values (geomfromtext("point(1 0)"));
select * from (select polygon(t1.a) as p from t1 order by t1.a) d; select * from (select polygon(t1.a) as p from t1 order by t1.a) d;
drop table t1; drop table t1;
--echo #
--echo # Test for bug #59888 "debug assertion when attempt to create spatial index
--echo # on char > 31 bytes".
--echo #
create table t1(a char(32) not null) engine=myisam;
--error ER_SPATIAL_MUST_HAVE_GEOM_COL
create spatial index i on t1 (a);
drop table t1;
--echo End of 5.1 tests --echo End of 5.1 tests
# #
......
...@@ -269,7 +269,7 @@ int mi_create(const char *name,uint keys,MI_KEYDEF *keydefs, ...@@ -269,7 +269,7 @@ int mi_create(const char *name,uint keys,MI_KEYDEF *keydefs,
keyseg->type != HA_KEYTYPE_VARBINARY2) keyseg->type != HA_KEYTYPE_VARBINARY2)
{ {
my_errno=HA_WRONG_CREATE_OPTION; my_errno=HA_WRONG_CREATE_OPTION;
goto err; goto err_no_lock;
} }
} }
keydef->keysegs+=sp_segs; keydef->keysegs+=sp_segs;
...@@ -278,7 +278,7 @@ int mi_create(const char *name,uint keys,MI_KEYDEF *keydefs, ...@@ -278,7 +278,7 @@ int mi_create(const char *name,uint keys,MI_KEYDEF *keydefs,
min_key_length_skip+=SPLEN*2*SPDIMS; min_key_length_skip+=SPLEN*2*SPDIMS;
#else #else
my_errno= HA_ERR_UNSUPPORTED; my_errno= HA_ERR_UNSUPPORTED;
goto err; goto err_no_lock;
#endif /*HAVE_SPATIAL*/ #endif /*HAVE_SPATIAL*/
} }
else if (keydef->flag & HA_FULLTEXT) else if (keydef->flag & HA_FULLTEXT)
...@@ -294,7 +294,7 @@ int mi_create(const char *name,uint keys,MI_KEYDEF *keydefs, ...@@ -294,7 +294,7 @@ int mi_create(const char *name,uint keys,MI_KEYDEF *keydefs,
keyseg->type != HA_KEYTYPE_VARTEXT2) keyseg->type != HA_KEYTYPE_VARTEXT2)
{ {
my_errno=HA_WRONG_CREATE_OPTION; my_errno=HA_WRONG_CREATE_OPTION;
goto err; goto err_no_lock;
} }
if (!(keyseg->flag & HA_BLOB_PART) && if (!(keyseg->flag & HA_BLOB_PART) &&
(keyseg->type == HA_KEYTYPE_VARTEXT1 || (keyseg->type == HA_KEYTYPE_VARTEXT1 ||
...@@ -419,7 +419,7 @@ int mi_create(const char *name,uint keys,MI_KEYDEF *keydefs, ...@@ -419,7 +419,7 @@ int mi_create(const char *name,uint keys,MI_KEYDEF *keydefs,
if (keydef->keysegs > MI_MAX_KEY_SEG) if (keydef->keysegs > MI_MAX_KEY_SEG)
{ {
my_errno=HA_WRONG_CREATE_OPTION; my_errno=HA_WRONG_CREATE_OPTION;
goto err; goto err_no_lock;
} }
/* /*
key_segs may be 0 in the case when we only want to be able to key_segs may be 0 in the case when we only want to be able to
...@@ -444,7 +444,7 @@ int mi_create(const char *name,uint keys,MI_KEYDEF *keydefs, ...@@ -444,7 +444,7 @@ int mi_create(const char *name,uint keys,MI_KEYDEF *keydefs,
length >= MI_MAX_KEY_BUFF) length >= MI_MAX_KEY_BUFF)
{ {
my_errno=HA_WRONG_CREATE_OPTION; my_errno=HA_WRONG_CREATE_OPTION;
goto err; goto err_no_lock;
} }
set_if_bigger(max_key_block_length,keydef->block_length); set_if_bigger(max_key_block_length,keydef->block_length);
keydef->keylength= (uint16) key_length; keydef->keylength= (uint16) key_length;
...@@ -491,7 +491,7 @@ int mi_create(const char *name,uint keys,MI_KEYDEF *keydefs, ...@@ -491,7 +491,7 @@ int mi_create(const char *name,uint keys,MI_KEYDEF *keydefs,
"indexes and/or unique constraints.", "indexes and/or unique constraints.",
MYF(0), name + dirname_length(name)); MYF(0), name + dirname_length(name));
my_errno= HA_WRONG_CREATE_OPTION; my_errno= HA_WRONG_CREATE_OPTION;
goto err; goto err_no_lock;
} }
bmove(share.state.header.file_version,(uchar*) myisam_file_magic,4); bmove(share.state.header.file_version,(uchar*) myisam_file_magic,4);
...@@ -810,12 +810,14 @@ int mi_create(const char *name,uint keys,MI_KEYDEF *keydefs, ...@@ -810,12 +810,14 @@ int mi_create(const char *name,uint keys,MI_KEYDEF *keydefs,
errpos=0; errpos=0;
mysql_mutex_unlock(&THR_LOCK_myisam); mysql_mutex_unlock(&THR_LOCK_myisam);
if (mysql_file_close(file, MYF(0))) if (mysql_file_close(file, MYF(0)))
goto err; goto err_no_lock;
my_free(rec_per_key_part); my_free(rec_per_key_part);
DBUG_RETURN(0); DBUG_RETURN(0);
err: err:
mysql_mutex_unlock(&THR_LOCK_myisam); mysql_mutex_unlock(&THR_LOCK_myisam);
err_no_lock:
save_errno=my_errno; save_errno=my_errno;
switch (errpos) { switch (errpos) {
case 3: case 3:
......
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