Commit 9f171e77 authored by monty@mysql.com's avatar monty@mysql.com

Merge bk-internal.mysql.com:/home/bk/mysql-4.1

into mysql.com:/home/my/mysql-4.1
parents a785d16d e0a4b512
...@@ -1538,6 +1538,37 @@ t2 CREATE TABLE `t2` ( ...@@ -1538,6 +1538,37 @@ t2 CREATE TABLE `t2` (
CONSTRAINT `t1_id_fk` FOREIGN KEY (`id2`, `id`) REFERENCES `t1` (`id`, `id2`) CONSTRAINT `t1_id_fk` FOREIGN KEY (`id2`, `id`) REFERENCES `t1` (`id`, `id2`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 ) ENGINE=InnoDB DEFAULT CHARSET=latin1
drop table t2; drop table t2;
create table t2 (id int(11) not null auto_increment, id2 int(11) not null, constraint t1_id_fk foreign key (id) references t1 (id), primary key (id), index (id,id2)) engine = innodb;
show create table t2;
Table Create Table
t2 CREATE TABLE `t2` (
`id` int(11) NOT NULL auto_increment,
`id2` int(11) NOT NULL default '0',
PRIMARY KEY (`id`),
KEY `id` (`id`,`id2`),
CONSTRAINT `t1_id_fk` FOREIGN KEY (`id`) REFERENCES `t1` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1
drop table t2;
create table t2 (id int(11) not null auto_increment, id2 int(11) not null, constraint t1_id_fk foreign key (id) references t1 (id)) engine= innodb;
show create table t2;
Table Create Table
t2 CREATE TABLE `t2` (
`id` int(11) NOT NULL auto_increment,
`id2` int(11) NOT NULL default '0',
KEY `t1_id_fk` (`id`),
CONSTRAINT `t1_id_fk` FOREIGN KEY (`id`) REFERENCES `t1` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1
alter table t2 add index id_test (id), add index id_test2 (id,id2);
show create table t2;
Table Create Table
t2 CREATE TABLE `t2` (
`id` int(11) NOT NULL auto_increment,
`id2` int(11) NOT NULL default '0',
KEY `id_test` (`id`),
KEY `id_test2` (`id`,`id2`),
CONSTRAINT `t1_id_fk` FOREIGN KEY (`id`) REFERENCES `t1` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1
drop table t2;
create table t2 (id int(11) not null, id2 int(11) not null, constraint t1_id_fk foreign key (id2,id) references t1 (id)) engine = innodb; create table t2 (id int(11) not null, id2 int(11) not null, constraint t1_id_fk foreign key (id2,id) references t1 (id)) engine = innodb;
ERROR HY000: Can't create table './test/t2.frm' (errno: 150) ERROR HY000: Can't create table './test/t2.frm' (errno: 150)
drop table t1; drop table t1;
...@@ -1082,6 +1082,16 @@ create table t2 (id int(11) not null, id2 int(11) not null, unique (id,id2),cons ...@@ -1082,6 +1082,16 @@ create table t2 (id int(11) not null, id2 int(11) not null, unique (id,id2),cons
show create table t2; show create table t2;
drop table t2; drop table t2;
create table t2 (id int(11) not null auto_increment, id2 int(11) not null, constraint t1_id_fk foreign key (id) references t1 (id), primary key (id), index (id,id2)) engine = innodb;
show create table t2;
drop table t2;
create table t2 (id int(11) not null auto_increment, id2 int(11) not null, constraint t1_id_fk foreign key (id) references t1 (id)) engine= innodb;
show create table t2;
alter table t2 add index id_test (id), add index id_test2 (id,id2);
show create table t2;
drop table t2;
# Test error handling # Test error handling
--error 1005 --error 1005
create table t2 (id int(11) not null, id2 int(11) not null, constraint t1_id_fk foreign key (id2,id) references t1 (id)) engine = innodb; create table t2 (id int(11) not null, id2 int(11) not null, constraint t1_id_fk foreign key (id2,id) references t1 (id)) engine = innodb;
......
...@@ -86,7 +86,7 @@ bool key_part_spec::operator==(const key_part_spec& other) const ...@@ -86,7 +86,7 @@ bool key_part_spec::operator==(const key_part_spec& other) const
/* /*
Test if a foreign key is a prefix of the given key Test if a foreign key (= generated key) is a prefix of the given key
(ignoring key name, key type and order of columns) (ignoring key name, key type and order of columns)
NOTES: NOTES:
......
...@@ -685,10 +685,12 @@ int mysql_prepare_table(THD *thd, HA_CREATE_INFO *create_info, ...@@ -685,10 +685,12 @@ int mysql_prepare_table(THD *thd, HA_CREATE_INFO *create_info,
{ {
/* /*
foreign_key_prefix(key, key2) returns 0 if key or key2, or both, is foreign_key_prefix(key, key2) returns 0 if key or key2, or both, is
'generated', and a generated key is a prefix of the other key. Then we 'generated', and a generated key is a prefix of the other key.
do not need the generated shorter key. Then we do not need the generated shorter key.
*/ */
if ((key2->type != Key::FOREIGN_KEY && !foreign_key_prefix(key, key2))) if ((key2->type != Key::FOREIGN_KEY &&
key2->name != ignore_key &&
!foreign_key_prefix(key, key2)))
{ {
/* TO DO: issue warning message */ /* TO DO: issue warning message */
/* mark that the generated key should be ignored */ /* mark that the generated key should be ignored */
...@@ -697,19 +699,11 @@ int mysql_prepare_table(THD *thd, HA_CREATE_INFO *create_info, ...@@ -697,19 +699,11 @@ int mysql_prepare_table(THD *thd, HA_CREATE_INFO *create_info,
key2->columns.elements)) key2->columns.elements))
key->name= ignore_key; key->name= ignore_key;
else else
{
/*
Remove the previous, generated key if it has not yet been
removed. Note that if we have several identical generated keys,
the last one will remain and others get removed here.
*/
if (key2->name != ignore_key)
{ {
key2->name= ignore_key; key2->name= ignore_key;
key_parts-= key2->columns.elements; key_parts-= key2->columns.elements;
(*key_count)--; (*key_count)--;
} }
}
break; break;
} }
} }
......
...@@ -9614,7 +9614,6 @@ union distinct \ ...@@ -9614,7 +9614,6 @@ union distinct \
select sum(a) + 200, 1 from t1 \ select sum(a) + 200, 1 from t1 \
group by b "); group by b ");
check_stmt(stmt); check_stmt(stmt);
mysql_stmt_close(stmt); mysql_stmt_close(stmt);
stmt= mysql_simple_prepare(mysql, stmt= mysql_simple_prepare(mysql,
...@@ -9624,6 +9623,7 @@ union distinct \ ...@@ -9624,6 +9623,7 @@ union distinct \
select sum(a) + 200, 1 from t1 \ select sum(a) + 200, 1 from t1 \
group by b "); group by b ");
check_stmt(stmt); check_stmt(stmt);
mysql_stmt_close(stmt);
stmt= mysql_simple_prepare(mysql, stmt= mysql_simple_prepare(mysql,
"select sum(a) + 200, ? from t1 \ "select sum(a) + 200, ? from t1 \
...@@ -9631,7 +9631,6 @@ union distinct \ ...@@ -9631,7 +9631,6 @@ union distinct \
select sum(a) + 200, 1 from t1 \ select sum(a) + 200, 1 from t1 \
group by b "); group by b ");
check_stmt(stmt); check_stmt(stmt);
mysql_stmt_close(stmt); mysql_stmt_close(stmt);
rc= mysql_query(mysql, "DROP TABLE t1"); rc= mysql_query(mysql, "DROP TABLE t1");
......
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