diff options
author | unknown <monty@mysql.com> | 2006-06-30 18:29:27 +0300 |
---|---|---|
committer | unknown <monty@mysql.com> | 2006-06-30 18:29:27 +0300 |
commit | a616b65e73f5ceedcc12df662c2fee0b5e8754d5 (patch) | |
tree | b32804ac8755f9a1db6113b996ee5dfda0e7a65f | |
parent | aa5ecc4cb22e81ae66e1515a4471fd212fe18c6d (diff) | |
download | mariadb-git-a616b65e73f5ceedcc12df662c2fee0b5e8754d5.tar.gz |
Reverted wrong bug fix (Bug#11228)
mysql-test/r/key.result:
Fixed result after removing wrong bug fix
mysql-test/t/key.test:
Added SHOW CREATE TABLE, which is the proper way to check for table definitions
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'
-rw-r--r-- | mysql-test/r/key.result | 10 | ||||
-rw-r--r-- | mysql-test/t/key.test | 1 | ||||
-rw-r--r-- | sql/table.cc | 21 |
3 files changed, 31 insertions, 1 deletions
diff --git a/mysql-test/r/key.result b/mysql-test/r/key.result index 0bc241c0d19..75fc469460e 100644 --- a/mysql-test/r/key.result +++ b/mysql-test/r/key.result @@ -332,8 +332,16 @@ UNIQUE i1idx (i1), UNIQUE i2idx (i2)); desc t1; Field Type Null Key Default Extra -i1 int(11) UNI 0 +i1 int(11) PRI 0 i2 int(11) UNI 0 +show create table t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `i1` int(11) NOT NULL default '0', + `i2` int(11) NOT NULL default '0', + UNIQUE KEY `i1idx` (`i1`), + UNIQUE KEY `i2idx` (`i2`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1 drop table t1; create table t1 ( c1 int, diff --git a/mysql-test/t/key.test b/mysql-test/t/key.test index 796e36cb608..9aab8a13b06 100644 --- a/mysql-test/t/key.test +++ b/mysql-test/t/key.test @@ -330,6 +330,7 @@ create table t1 ( UNIQUE i1idx (i1), UNIQUE i2idx (i2)); desc t1; +show create table t1; drop table t1; # diff --git a/sql/table.cc b/sql/table.cc index 513f42665a6..8ac64ac198d 100644 --- a/sql/table.cc +++ b/sql/table.cc @@ -567,6 +567,27 @@ int openfrm(const char *name, const char *alias, uint db_stat, uint prgflag, if (outparam->key_info[key].flags & HA_FULLTEXT) outparam->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 || + outparam->field[fieldnr-1]->null_ptr || + outparam->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++) { if (new_field_pack_flag <= 1) |