Commit d93705b8 authored by unknown's avatar unknown
Browse files

Fix reporting of type for unique key on VARCHAR field. (Bug #11227)


mysql-test/r/key.result:
  Add new results
mysql-test/t/key.test:
  Add new regression test
sql/table.cc:
  Use keyinfo->key_parts to determine if key is part of a
  multiple-field key or is unique.
parent bbc02113
Loading
Loading
Loading
Loading
+25 −0
Original line number Diff line number Diff line
@@ -354,3 +354,28 @@ t1 CREATE TABLE `t1` (
  KEY `a` (`a`,`b`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1
drop table t1;
create table t1 (a int not null primary key, b varchar(20) not null unique);
desc t1;
Field	Type	Null	Key	Default	Extra
a	int(11)	NO	PRI		
b	varchar(20)	NO	UNI		
drop table t1;
create table t1 (a int not null primary key, b int not null unique);
desc t1;
Field	Type	Null	Key	Default	Extra
a	int(11)	NO	PRI		
b	int(11)	NO	UNI		
drop table t1;
create table t1 (a int not null primary key, b varchar(20) not null, unique (b(10)));
desc t1;
Field	Type	Null	Key	Default	Extra
a	int(11)	NO	PRI		
b	varchar(20)	NO	UNI		
drop table t1;
create table t1 (a int not null primary key, b varchar(20) not null, c varchar(20) not null, unique(b(10),c(10)));
desc t1;
Field	Type	Null	Key	Default	Extra
a	int(11)	NO	PRI		
b	varchar(20)	NO	MUL		
c	varchar(20)	NO			
drop table t1;
+16 −0
Original line number Diff line number Diff line
@@ -337,3 +337,19 @@ show create table t1;
alter table t1 modify a varchar(20);
show create table t1;
drop table t1;

#
# Bug #11227: Incorrectly reporting 'MUL' vs. 'UNI' on varchar
#
create table t1 (a int not null primary key, b varchar(20) not null unique);
desc t1;
drop table t1;
create table t1 (a int not null primary key, b int not null unique);
desc t1;
drop table t1;
create table t1 (a int not null primary key, b varchar(20) not null, unique (b(10)));
desc t1;
drop table t1;
create table t1 (a int not null primary key, b varchar(20) not null, c varchar(20) not null, unique(b(10),c(10)));
desc t1;
drop table t1;
+3 −4
Original line number Diff line number Diff line
@@ -701,10 +701,9 @@ int openfrm(THD *thd, const char *name, const char *alias, uint db_stat,
            key_part->key_part_flag|= HA_BIT_PART;

	  if (i == 0 && key != primary_key)
	    field->flags |=
	      ((keyinfo->flags & HA_NOSAME) &&
	       field->key_length() ==
	       keyinfo->key_length ? UNIQUE_KEY_FLAG : MULTIPLE_KEY_FLAG);
	    field->flags |= ((keyinfo->flags & HA_NOSAME) &&
                             (keyinfo->key_parts == 1)) ?
                            UNIQUE_KEY_FLAG : MULTIPLE_KEY_FLAG;
	  if (i == 0)
	    field->key_start.set_bit(key);
	  if (field->key_length() == key_part->length &&