diff options
author | unknown <heikki@hundin.mysql.fi> | 2002-12-05 22:03:24 +0200 |
---|---|---|
committer | unknown <heikki@hundin.mysql.fi> | 2002-12-05 22:03:24 +0200 |
commit | 446f877906f7cb7f1a4a65b185ca49d58f832121 (patch) | |
tree | f45e33c419fff3114e499f1a661e8e737301a675 /innobase/dict | |
parent | e4add99924fc0210c635709ac7b8d88089c616a4 (diff) | |
download | mariadb-git-446f877906f7cb7f1a4a65b185ca49d58f832121.tar.gz |
row0mysql.c, dict0dict.c, db0err.h, ha_innobase.cc:
Heikki will merge to 4.0: Prevent listing the same column twice in an InnoDB index: that will cause index corruption when that col is UPDATEd
sql/ha_innobase.cc:
Heikki will merge to 4.0: Prevent listing the same column twice in an InnoDB index: that will cause index corruption when that col is UPDATEd
innobase/include/db0err.h:
Heikki will merge to 4.0: Prevent listing the same column twice in an InnoDB index: that will cause index corruption when that col is UPDATEd
innobase/dict/dict0dict.c:
Heikki will merge to 4.0: Prevent listing the same column twice in an InnoDB index: that will cause index corruption when that col is UPDATEd
innobase/row/row0mysql.c:
Heikki will merge to 4.0: Prevent listing the same column twice in an InnoDB index: that will cause index corruption when that col is UPDATEd
Diffstat (limited to 'innobase/dict')
-rw-r--r-- | innobase/dict/dict0dict.c | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/innobase/dict/dict0dict.c b/innobase/dict/dict0dict.c index 65f40d345d8..eb9610a6e73 100644 --- a/innobase/dict/dict0dict.c +++ b/innobase/dict/dict0dict.c @@ -1033,6 +1033,7 @@ dict_index_add_to_cache( ulint n_ord; ibool success; ulint i; + ulint j; ut_ad(index); ut_ad(mutex_own(&(dict_sys->mutex))); @@ -1063,6 +1064,26 @@ dict_index_add_to_cache( return(FALSE); } + /* Check that the same column does not appear twice in the index. + InnoDB assumes this in its algorithms, e.g., update of an index + entry */ + + for (i = 0; i < dict_index_get_n_fields(index); i++) { + + for (j = 0; j < i; j++) { + if (dict_index_get_nth_field(index, j)->col + == dict_index_get_nth_field(index, i)->col) { + + fprintf(stderr, +"InnoDB: Error: column %s appears twice in index %s of table %s\n" +"InnoDB: This is not allowed in InnoDB.\n" +"InnoDB: UPDATE can cause such an index to become corrupt in InnoDB.\n", + dict_index_get_nth_field(index, i)->col->name, + index->name, table->name); + } + } + } + /* Build the cache internal representation of the index, containing also the added system fields */ |