1
0
mirror of https://github.com/MariaDB/server.git synced 2025-12-24 11:21:21 +03:00

better fix for bug#3749 - do not consider already removed keys in key removal process

mysql-test/r/innodb.result:
  tests for bug#3749
mysql-test/t/innodb.test:
  tests for bug#3749
This commit is contained in:
unknown
2004-05-14 12:49:18 +02:00
parent 1d51406e29
commit 321d50fd06
3 changed files with 41 additions and 15 deletions

View File

@@ -688,9 +688,10 @@ int mysql_prepare_table(THD *thd, HA_CREATE_INFO *create_info,
'generated', and a generated key is a prefix of the other key. Then we
do not need the generated shorter key.
*/
if ((key2->type != Key::FOREIGN_KEY && !foreign_key_prefix(key, key2)))
if (key2->name != ignore_key && key2->type != Key::FOREIGN_KEY &&
!foreign_key_prefix(key, key2))
{
/* TO DO: issue warning message */
/* TODO: issue warning message */
/* mark that the generated key should be ignored */
if (!key2->generated ||
(key->generated && key->columns.elements <
@@ -698,17 +699,9 @@ int mysql_prepare_table(THD *thd, HA_CREATE_INFO *create_info,
key->name= ignore_key;
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;
key_parts-= key2->columns.elements;
(*key_count)--;
}
key2->name= ignore_key;
key_parts-= key2->columns.elements;
(*key_count)--;
}
break;
}