summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorunknown <monty@mysql.com>2006-06-30 18:29:27 +0300
committerunknown <monty@mysql.com>2006-06-30 18:29:27 +0300
commita616b65e73f5ceedcc12df662c2fee0b5e8754d5 (patch)
treeb32804ac8755f9a1db6113b996ee5dfda0e7a65f
parentaa5ecc4cb22e81ae66e1515a4471fd212fe18c6d (diff)
downloadmariadb-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.result10
-rw-r--r--mysql-test/t/key.test1
-rw-r--r--sql/table.cc21
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)