Commit c9185225 authored by Alexey Botchkov's avatar Alexey Botchkov

MDEV-8358 ALTER TABLE .. ADD PRIMARY KEY IF NOT EXISTS -> ERROR 1068 (42000):...

MDEV-8358 ALTER TABLE .. ADD PRIMARY KEY IF NOT EXISTS -> ERROR 1068 (42000): Multiple primary key defined
        Checks for multiple primary keys added.
parent 2c0bcfff
......@@ -2012,3 +2012,12 @@ t1 CREATE TABLE `t1` (
UNIQUE KEY `idx` (`i`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1
DROP TABLE t1;
CREATE TABLE t1 (
`event_id` bigint(20) unsigned NOT NULL DEFAULT '0',
`market_id` bigint(20) unsigned NOT NULL DEFAULT '0',
PRIMARY KEY (`event_id`,`market_id`)
);
ALTER TABLE t1 ADD PRIMARY KEY IF NOT EXISTS event_id (event_id,market_id);
Warnings:
Note 1061 Multiple primary key defined
DROP TABLE t1;
......@@ -1699,3 +1699,16 @@ alter table t1 add unique index if not exists idx(i);
alter table t1 add unique index if not exists idx(i);
show create table t1;
DROP TABLE t1;
#
# MDEV-8358 ADD PRIMARY KEY IF NOT EXISTS -> ERROR 1068 (42000): Multiple primary key
#
CREATE TABLE t1 (
`event_id` bigint(20) unsigned NOT NULL DEFAULT '0',
`market_id` bigint(20) unsigned NOT NULL DEFAULT '0',
PRIMARY KEY (`event_id`,`market_id`)
);
ALTER TABLE t1 ADD PRIMARY KEY IF NOT EXISTS event_id (event_id,market_id);
DROP TABLE t1;
......@@ -5846,6 +5846,16 @@ handle_if_exists_options(THD *thd, TABLE *table, Alter_info *alter_info)
{
if (!key->create_if_not_exists)
continue;
/* Check if the table already has a PRIMARY KEY */
if (key->type == Key::PRIMARY &&
table->s->primary_key != MAX_KEY)
{
push_warning_printf(thd, Sql_condition::WARN_LEVEL_NOTE,
ER_DUP_KEYNAME, ER(ER_MULTIPLE_PRI_KEY));
goto remove_key_no_warn;
}
/* If the name of the key is not specified, */
/* let us check the name of the first key part. */
if ((keyname= key->name.str) == NULL)
......@@ -5912,6 +5922,7 @@ handle_if_exists_options(THD *thd, TABLE *table, Alter_info *alter_info)
remove_key:
push_warning_printf(thd, Sql_condition::WARN_LEVEL_NOTE,
ER_DUP_KEYNAME, ER(ER_DUP_KEYNAME), keyname);
remove_key_no_warn:
key_it.remove();
if (key->type == Key::FOREIGN_KEY)
{
......
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