mirror of
https://github.com/MariaDB/server.git
synced 2025-01-17 20:42:30 +01:00
Merge gkodinov@bk-internal.mysql.com:/home/bk/mysql-5.0-opt
into magare.gmz:/home/kgeorge/mysql/autopush/B26794-5.0-opt
This commit is contained in:
commit
30a16b45d7
6 changed files with 64 additions and 4 deletions
|
@ -826,3 +826,37 @@ create table t1 (t varchar(255) default null, key t (t(80)))
|
|||
engine=myisam default charset=latin1;
|
||||
alter table t1 change t t text;
|
||||
drop table t1;
|
||||
CREATE TABLE t1 (a varchar(500));
|
||||
ALTER TABLE t1 ADD b GEOMETRY NOT NULL, ADD SPATIAL INDEX(b);
|
||||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`a` varchar(500) default NULL,
|
||||
`b` geometry NOT NULL,
|
||||
SPATIAL KEY `b` (`b`)
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
ALTER TABLE t1 ADD KEY(b(50));
|
||||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`a` varchar(500) default NULL,
|
||||
`b` geometry NOT NULL,
|
||||
SPATIAL KEY `b` (`b`),
|
||||
KEY `b_2` (`b`(50))
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
ALTER TABLE t1 ADD c POINT;
|
||||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`a` varchar(500) default NULL,
|
||||
`b` geometry NOT NULL,
|
||||
`c` point default NULL,
|
||||
SPATIAL KEY `b` (`b`),
|
||||
KEY `b_2` (`b`(50))
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
CREATE TABLE t2 (a INT, KEY (a(20)));
|
||||
ERROR HY000: Incorrect sub part key; the used key part isn't a string, the used length is longer than the key part, or the storage engine doesn't support unique sub keys
|
||||
ALTER TABLE t1 ADD d INT;
|
||||
ALTER TABLE t1 ADD KEY (d(20));
|
||||
ERROR HY000: Incorrect sub part key; the used key part isn't a string, the used length is longer than the key part, or the storage engine doesn't support unique sub keys
|
||||
DROP TABLE t1;
|
||||
|
|
|
@ -10,7 +10,7 @@ t1 CREATE TABLE `t1` (
|
|||
`fid` int(11) NOT NULL auto_increment,
|
||||
`g` geometry NOT NULL,
|
||||
PRIMARY KEY (`fid`),
|
||||
SPATIAL KEY `g` (`g`(32))
|
||||
SPATIAL KEY `g` (`g`)
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
INSERT INTO t1 (g) VALUES (GeomFromText('LineString(150 150, 150 150)'));
|
||||
INSERT INTO t1 (g) VALUES (GeomFromText('LineString(149 149, 151 151)'));
|
||||
|
@ -293,7 +293,7 @@ t2 CREATE TABLE `t2` (
|
|||
`fid` int(11) NOT NULL auto_increment,
|
||||
`g` geometry NOT NULL,
|
||||
PRIMARY KEY (`fid`),
|
||||
SPATIAL KEY `g` (`g`(32))
|
||||
SPATIAL KEY `g` (`g`)
|
||||
) ENGINE=MyISAM AUTO_INCREMENT=101 DEFAULT CHARSET=latin1
|
||||
SELECT count(*) FROM t2;
|
||||
count(*)
|
||||
|
|
|
@ -613,3 +613,26 @@ create table t1 (t varchar(255) default null, key t (t(80)))
|
|||
engine=myisam default charset=latin1;
|
||||
alter table t1 change t t text;
|
||||
drop table t1;
|
||||
|
||||
#
|
||||
# Bug #26794: Adding an index with a prefix on a SPATIAL type breaks ALTER
|
||||
# TABLE
|
||||
#
|
||||
CREATE TABLE t1 (a varchar(500));
|
||||
|
||||
ALTER TABLE t1 ADD b GEOMETRY NOT NULL, ADD SPATIAL INDEX(b);
|
||||
SHOW CREATE TABLE t1;
|
||||
ALTER TABLE t1 ADD KEY(b(50));
|
||||
SHOW CREATE TABLE t1;
|
||||
|
||||
ALTER TABLE t1 ADD c POINT;
|
||||
SHOW CREATE TABLE t1;
|
||||
|
||||
--error ER_WRONG_SUB_KEY
|
||||
CREATE TABLE t2 (a INT, KEY (a(20)));
|
||||
|
||||
ALTER TABLE t1 ADD d INT;
|
||||
--error ER_WRONG_SUB_KEY
|
||||
ALTER TABLE t1 ADD KEY (d(20));
|
||||
|
||||
DROP TABLE t1;
|
||||
|
|
|
@ -1011,6 +1011,7 @@ bool Field::type_can_have_key_part(enum enum_field_types type)
|
|||
case MYSQL_TYPE_BLOB:
|
||||
case MYSQL_TYPE_VAR_STRING:
|
||||
case MYSQL_TYPE_STRING:
|
||||
case MYSQL_TYPE_GEOMETRY:
|
||||
return TRUE;
|
||||
default:
|
||||
return FALSE;
|
||||
|
|
|
@ -992,7 +992,7 @@ store_create_info(THD *thd, TABLE_LIST *table_list, String *packet)
|
|||
if (key_part->field &&
|
||||
(key_part->length !=
|
||||
table->field[key_part->fieldnr-1]->key_length() &&
|
||||
!(key_info->flags & HA_FULLTEXT)))
|
||||
!(key_info->flags & (HA_FULLTEXT | HA_SPATIAL))))
|
||||
{
|
||||
buff[0] = '(';
|
||||
char* end=int10_to_str((long) key_part->length /
|
||||
|
|
|
@ -1344,6 +1344,7 @@ static int mysql_prepare_table(THD *thd, HA_CREATE_INFO *create_info,
|
|||
}
|
||||
else if (!f_is_geom(sql_field->pack_flag) &&
|
||||
(column->length > length ||
|
||||
!Field::type_can_have_key_part (sql_field->sql_type) ||
|
||||
((f_is_packed(sql_field->pack_flag) ||
|
||||
((file->table_flags() & HA_NO_PREFIX_CHAR_KEYS) &&
|
||||
(key_info->flags & HA_NOSAME))) &&
|
||||
|
@ -3470,7 +3471,8 @@ view_err:
|
|||
checking whether cfield->length < key_part_length (in chars).
|
||||
*/
|
||||
if (!Field::type_can_have_key_part(cfield->field->type()) ||
|
||||
!Field::type_can_have_key_part(cfield->sql_type) ||
|
||||
(!Field::type_can_have_key_part(cfield->sql_type) &&
|
||||
!f_is_geom (cfield->pack_flag)) ||
|
||||
(cfield->field->field_length == key_part_length &&
|
||||
!f_is_blob(key_part->key_type)) ||
|
||||
(cfield->length && (cfield->length < key_part_length /
|
||||
|
|
Loading…
Reference in a new issue