Loading mysql-test/r/key.result +25 −0 Original line number Diff line number Diff line Loading @@ -329,3 +329,28 @@ ERROR 42S21: Duplicate column name 'c1' alter table t1 add key (c1,c1,c2); ERROR 42S21: Duplicate column name 'c1' drop table t1; create table t1 (a varchar(10), b varchar(10), key(a(10),b(10))); show create table t1; Table Create Table t1 CREATE TABLE `t1` ( `a` varchar(10) default NULL, `b` varchar(10) default NULL, KEY `a` (`a`,`b`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 alter table t1 modify b varchar(20); show create table t1; Table Create Table t1 CREATE TABLE `t1` ( `a` varchar(10) default NULL, `b` varchar(20) default NULL, KEY `a` (`a`,`b`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 alter table t1 modify a varchar(20); show create table t1; Table Create Table t1 CREATE TABLE `t1` ( `a` varchar(20) default NULL, `b` varchar(20) default NULL, KEY `a` (`a`,`b`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 drop table t1; mysql-test/r/type_varchar.result +23 −0 Original line number Diff line number Diff line Loading @@ -392,3 +392,26 @@ group by t1.b, t1.a; a b min(t1.b) 22 NULL NULL drop table t1, t2; create table t1 (f1 varchar(65500)); create index index1 on t1(f1(10)); show create table t1; Table Create Table t1 CREATE TABLE `t1` ( `f1` varchar(65500) default NULL, KEY `index1` (`f1`(10)) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 alter table t1 modify f1 varchar(255); show create table t1; Table Create Table t1 CREATE TABLE `t1` ( `f1` varchar(255) default NULL, KEY `index1` (`f1`(10)) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 alter table t1 modify f1 tinytext; show create table t1; Table Create Table t1 CREATE TABLE `t1` ( `f1` tinytext, KEY `index1` (`f1`(10)) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 drop table t1; mysql-test/t/key.test +13 −0 Original line number Diff line number Diff line Loading @@ -324,3 +324,16 @@ alter table t1 add key (c1,c2,c1); --error 1060 alter table t1 add key (c1,c1,c2); drop table t1; # # If we use a partial field for a key that is actually the length of the # field, and we extend the field, we end up with a key that includes the # whole new length of the field. # create table t1 (a varchar(10), b varchar(10), key(a(10),b(10))); show create table t1; alter table t1 modify b varchar(20); show create table t1; alter table t1 modify a varchar(20); show create table t1; drop table t1; mysql-test/t/type_varchar.test +12 −0 Original line number Diff line number Diff line Loading @@ -118,3 +118,15 @@ insert into t2 values (22), (22); select t1.a, t1.b, min(t1.b) from t1 inner join t2 ON t2.a = t1.a group by t1.b, t1.a; drop table t1, t2; # # Bug #10543: convert varchar with index to text # create table t1 (f1 varchar(65500)); create index index1 on t1(f1(10)); show create table t1; alter table t1 modify f1 varchar(255); show create table t1; alter table t1 modify f1 tinytext; show create table t1; drop table t1; sql/field.cc +33 −0 Original line number Diff line number Diff line Loading @@ -982,6 +982,39 @@ Item_result Field::result_merge_type(enum_field_types field_type) Static help functions *****************************************************************************/ /* Check whether a field type can be partially indexed by a key This is a static method, rather than a virtual function, because we need to check the type of a non-Field in mysql_alter_table(). SYNOPSIS type_can_have_key_part() type field type RETURN TRUE Type can have a prefixed key FALSE Type can not have a prefixed key */ bool Field::type_can_have_key_part(enum enum_field_types type) { switch (type) { case MYSQL_TYPE_VARCHAR: case MYSQL_TYPE_TINY_BLOB: case MYSQL_TYPE_MEDIUM_BLOB: case MYSQL_TYPE_LONG_BLOB: case MYSQL_TYPE_BLOB: case MYSQL_TYPE_VAR_STRING: case MYSQL_TYPE_STRING: return TRUE; default: return FALSE; } } /* Numeric fields base class constructor */ Loading Loading
mysql-test/r/key.result +25 −0 Original line number Diff line number Diff line Loading @@ -329,3 +329,28 @@ ERROR 42S21: Duplicate column name 'c1' alter table t1 add key (c1,c1,c2); ERROR 42S21: Duplicate column name 'c1' drop table t1; create table t1 (a varchar(10), b varchar(10), key(a(10),b(10))); show create table t1; Table Create Table t1 CREATE TABLE `t1` ( `a` varchar(10) default NULL, `b` varchar(10) default NULL, KEY `a` (`a`,`b`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 alter table t1 modify b varchar(20); show create table t1; Table Create Table t1 CREATE TABLE `t1` ( `a` varchar(10) default NULL, `b` varchar(20) default NULL, KEY `a` (`a`,`b`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 alter table t1 modify a varchar(20); show create table t1; Table Create Table t1 CREATE TABLE `t1` ( `a` varchar(20) default NULL, `b` varchar(20) default NULL, KEY `a` (`a`,`b`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 drop table t1;
mysql-test/r/type_varchar.result +23 −0 Original line number Diff line number Diff line Loading @@ -392,3 +392,26 @@ group by t1.b, t1.a; a b min(t1.b) 22 NULL NULL drop table t1, t2; create table t1 (f1 varchar(65500)); create index index1 on t1(f1(10)); show create table t1; Table Create Table t1 CREATE TABLE `t1` ( `f1` varchar(65500) default NULL, KEY `index1` (`f1`(10)) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 alter table t1 modify f1 varchar(255); show create table t1; Table Create Table t1 CREATE TABLE `t1` ( `f1` varchar(255) default NULL, KEY `index1` (`f1`(10)) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 alter table t1 modify f1 tinytext; show create table t1; Table Create Table t1 CREATE TABLE `t1` ( `f1` tinytext, KEY `index1` (`f1`(10)) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 drop table t1;
mysql-test/t/key.test +13 −0 Original line number Diff line number Diff line Loading @@ -324,3 +324,16 @@ alter table t1 add key (c1,c2,c1); --error 1060 alter table t1 add key (c1,c1,c2); drop table t1; # # If we use a partial field for a key that is actually the length of the # field, and we extend the field, we end up with a key that includes the # whole new length of the field. # create table t1 (a varchar(10), b varchar(10), key(a(10),b(10))); show create table t1; alter table t1 modify b varchar(20); show create table t1; alter table t1 modify a varchar(20); show create table t1; drop table t1;
mysql-test/t/type_varchar.test +12 −0 Original line number Diff line number Diff line Loading @@ -118,3 +118,15 @@ insert into t2 values (22), (22); select t1.a, t1.b, min(t1.b) from t1 inner join t2 ON t2.a = t1.a group by t1.b, t1.a; drop table t1, t2; # # Bug #10543: convert varchar with index to text # create table t1 (f1 varchar(65500)); create index index1 on t1(f1(10)); show create table t1; alter table t1 modify f1 varchar(255); show create table t1; alter table t1 modify f1 tinytext; show create table t1; drop table t1;
sql/field.cc +33 −0 Original line number Diff line number Diff line Loading @@ -982,6 +982,39 @@ Item_result Field::result_merge_type(enum_field_types field_type) Static help functions *****************************************************************************/ /* Check whether a field type can be partially indexed by a key This is a static method, rather than a virtual function, because we need to check the type of a non-Field in mysql_alter_table(). SYNOPSIS type_can_have_key_part() type field type RETURN TRUE Type can have a prefixed key FALSE Type can not have a prefixed key */ bool Field::type_can_have_key_part(enum enum_field_types type) { switch (type) { case MYSQL_TYPE_VARCHAR: case MYSQL_TYPE_TINY_BLOB: case MYSQL_TYPE_MEDIUM_BLOB: case MYSQL_TYPE_LONG_BLOB: case MYSQL_TYPE_BLOB: case MYSQL_TYPE_VAR_STRING: case MYSQL_TYPE_STRING: return TRUE; default: return FALSE; } } /* Numeric fields base class constructor */ Loading