1
0
mirror of https://github.com/MariaDB/server.git synced 2025-07-30 16:24:05 +03:00

MDEV-8212 alter table - failing to ADD PRIMARY KEY IF NOT EXISTS when existing index of same as column name.

The default name for the primary key is rather 'PRIMARY' instead of the indexed column name.
This commit is contained in:
Alexey Botchkov
2015-06-14 18:54:13 +05:00
parent fc31e3114b
commit 196528eb42
3 changed files with 30 additions and 6 deletions

View File

@ -1488,6 +1488,17 @@ t2 CREATE TABLE `t2` (
) ENGINE=MyISAM DEFAULT CHARSET=latin1 ) ENGINE=MyISAM DEFAULT CHARSET=latin1
DROP TABLE t2; DROP TABLE t2;
DROP TABLE t1; DROP TABLE t1;
CREATE TABLE t1 (
`transaction_id` int(11) NOT NULL DEFAULT '0',
KEY `transaction_id` (`transaction_id`));
ALTER TABLE t1 DROP KEY IF EXISTS transaction_id, ADD PRIMARY KEY IF NOT EXISTS (transaction_id);
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`transaction_id` int(11) NOT NULL DEFAULT '0',
PRIMARY KEY (`transaction_id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1
DROP TABLE t1;
# Bug#11748057 (formerly known as 34972): ALTER TABLE statement doesn't # Bug#11748057 (formerly known as 34972): ALTER TABLE statement doesn't
# identify correct column name. # identify correct column name.
# #

View File

@ -1326,6 +1326,14 @@ SHOW CREATE TABLE t2;
DROP TABLE t2; DROP TABLE t2;
DROP TABLE t1; DROP TABLE t1;
CREATE TABLE t1 (
`transaction_id` int(11) NOT NULL DEFAULT '0',
KEY `transaction_id` (`transaction_id`));
ALTER TABLE t1 DROP KEY IF EXISTS transaction_id, ADD PRIMARY KEY IF NOT EXISTS (transaction_id);
SHOW CREATE TABLE t1;
DROP TABLE t1;
--echo # Bug#11748057 (formerly known as 34972): ALTER TABLE statement doesn't --echo # Bug#11748057 (formerly known as 34972): ALTER TABLE statement doesn't
--echo # identify correct column name. --echo # identify correct column name.
--echo # --echo #

View File

@ -5859,12 +5859,17 @@ drop_create_field:
/* let us check the name of the first key part. */ /* let us check the name of the first key part. */
if ((keyname= key->name.str) == NULL) if ((keyname= key->name.str) == NULL)
{ {
List_iterator<Key_part_spec> part_it(key->columns); if (key->type == Key::PRIMARY)
Key_part_spec *kp; keyname= primary_key_name;
if ((kp= part_it++)) else
keyname= kp->field_name.str; {
if (keyname == NULL) List_iterator<Key_part_spec> part_it(key->columns);
continue; Key_part_spec *kp;
if ((kp= part_it++))
keyname= kp->field_name.str;
if (keyname == NULL)
continue;
}
} }
if (key->type != Key::FOREIGN_KEY) if (key->type != Key::FOREIGN_KEY)
{ {