Commit b3523520 authored by unknown's avatar unknown

Reverted wrong bug fix (Bug#11228)


mysql-test/t/key.test:
  Added SHOW CREATE TABLE, which is the proper way to check for table definitions
mysql-test/r/key.result:
  Fixed result after removing wrong bug fix
sql/table.cc:
  Reverted wrong bug fix.
  The intention with the original code was to show that MySQL treats the first
  given unique key as a primary key. Clients can use the marked primary key as a
  real primary key to validate row changes in case of conflicting updates.  The
  ODBC driver (and other drivers) may also use this fact to optimize/check
  updates and handle conflicts.  The marked key also shows what some engines, like InnoDB or NDB,
  will use as it's internal primary key.
  For checking if someone has declared a true PRIMARY KEY, one should use 'SHOW CREATE TABLE'
parent 9bec4188
...@@ -336,8 +336,16 @@ UNIQUE i1idx (i1), ...@@ -336,8 +336,16 @@ UNIQUE i1idx (i1),
UNIQUE i2idx (i2)); UNIQUE i2idx (i2));
desc t1; desc t1;
Field Type Null Key Default Extra Field Type Null Key Default Extra
i1 int(11) NO UNI i1 int(11) NO PRI
i2 int(11) NO UNI i2 int(11) NO UNI
show create table t1;
Table Create Table
t1 CREATE TABLE `t1` (
`i1` int(11) NOT NULL,
`i2` int(11) NOT NULL,
UNIQUE KEY `i1idx` (`i1`),
UNIQUE KEY `i2idx` (`i2`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1
drop table t1; drop table t1;
create table t1 ( create table t1 (
c1 int, c1 int,
......
...@@ -334,6 +334,7 @@ create table t1 ( ...@@ -334,6 +334,7 @@ create table t1 (
UNIQUE i1idx (i1), UNIQUE i1idx (i1),
UNIQUE i2idx (i2)); UNIQUE i2idx (i2));
desc t1; desc t1;
show create table t1;
drop table t1; drop table t1;
# #
......
...@@ -1025,6 +1025,27 @@ static int open_binary_frm(THD *thd, TABLE_SHARE *share, uchar *head, ...@@ -1025,6 +1025,27 @@ static int open_binary_frm(THD *thd, TABLE_SHARE *share, uchar *head,
if (share->key_info[key].flags & HA_FULLTEXT) if (share->key_info[key].flags & HA_FULLTEXT)
share->key_info[key].algorithm= HA_KEY_ALG_FULLTEXT; share->key_info[key].algorithm= HA_KEY_ALG_FULLTEXT;
if (primary_key >= MAX_KEY && (keyinfo->flags & HA_NOSAME))
{
/*
If the UNIQUE key doesn't have NULL columns and is not a part key
declare this as a primary key.
*/
primary_key=key;
for (i=0 ; i < keyinfo->key_parts ;i++)
{
uint fieldnr= key_part[i].fieldnr;
if (!fieldnr ||
share->field[fieldnr-1]->null_ptr ||
share->field[fieldnr-1]->key_length() !=
key_part[i].length)
{
primary_key=MAX_KEY; // Can't be used
break;
}
}
}
for (i=0 ; i < keyinfo->key_parts ; key_part++,i++) for (i=0 ; i < keyinfo->key_parts ; key_part++,i++)
{ {
Field *field; Field *field;
......
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