summaryrefslogtreecommitdiff
path: root/sql/sql_table.cc
diff options
context:
space:
mode:
authorunknown <marko@hundin.mysql.fi>2004-05-06 09:53:50 +0300
committerunknown <marko@hundin.mysql.fi>2004-05-06 09:53:50 +0300
commitf1a2e925629b6a2c54d8955af2f5b6c15aca8b8e (patch)
tree56bfed0b0237c81714afc565f6f4682d8eb3c434 /sql/sql_table.cc
parentcc7a8d9bed2193dc3d424b19cac456477db6e6f5 (diff)
parente4ea53257c976e94de805649d185fca05fd0b594 (diff)
downloadmariadb-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.cc33
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;