diff options
author | unknown <marko@hundin.mysql.fi> | 2004-05-06 09:53:50 +0300 |
---|---|---|
committer | unknown <marko@hundin.mysql.fi> | 2004-05-06 09:53:50 +0300 |
commit | f1a2e925629b6a2c54d8955af2f5b6c15aca8b8e (patch) | |
tree | 56bfed0b0237c81714afc565f6f4682d8eb3c434 /sql/sql_table.cc | |
parent | cc7a8d9bed2193dc3d424b19cac456477db6e6f5 (diff) | |
parent | e4ea53257c976e94de805649d185fca05fd0b594 (diff) | |
download | mariadb-git-f1a2e925629b6a2c54d8955af2f5b6c15aca8b8e.tar.gz |
Merge marko@build.mysql.com:/home/bk/mysql-4.1
into hundin.mysql.fi:/home/marko/j/mysql-4.1
mysql-test/r/create.result:
Auto merged
mysql-test/r/innodb.result:
Auto merged
sql/sql_yacc.yy:
Auto merged
Diffstat (limited to 'sql/sql_table.cc')
-rw-r--r-- | sql/sql_table.cc | 33 |
1 files changed, 29 insertions, 4 deletions
diff --git a/sql/sql_table.cc b/sql/sql_table.cc index 0d0be1b7e10..156c2692488 100644 --- a/sql/sql_table.cc +++ b/sql/sql_table.cc @@ -639,12 +639,13 @@ int mysql_prepare_table(THD *thd, HA_CREATE_INFO *create_info, /* Create keys */ - List_iterator<Key> key_iterator(keys); + List_iterator<Key> key_iterator(keys), key_iterator2(keys); uint key_parts=0, fk_key_count=0; - List<Key> keys_in_order; // Add new keys here bool primary_key=0,unique_key=0; - Key *key; + Key *key, *key2; uint tmp, key_number; + /* special marker for keys to be ignored */ + static char ignore_key[1]; /* Calculate number of key segements */ *key_count= 0; @@ -677,7 +678,21 @@ int mysql_prepare_table(THD *thd, HA_CREATE_INFO *create_info, my_error(ER_TOO_LONG_IDENT, MYF(0), key->name); DBUG_RETURN(-1); } - key_parts+=key->columns.elements; + key_iterator2.rewind (); + while ((key2 = key_iterator2++) != key) + { + if (*key == *key2) + { + /* TO DO: issue warning message */ + /* mark that the key should be ignored */ + key->name=ignore_key; + break; + } + } + if (key->name != ignore_key) + key_parts+=key->columns.elements; + else + (*key_count)--; if (key->name && !tmp_table && !my_strcasecmp(system_charset_info,key->name,primary_key_name)) { @@ -704,6 +719,16 @@ int mysql_prepare_table(THD *thd, HA_CREATE_INFO *create_info, uint key_length=0; key_part_spec *column; + if (key->name == ignore_key) + { + /* ignore redundant keys */ + do + key=key_iterator++; + while (key && key->name == ignore_key); + if (!key) + break; + } + switch(key->type){ case Key::MULTIPLE: key_info->flags = 0; |