bug #1614004 [relation] foreign key spanning multiple columns are incorrectly displayed

This commit is contained in:
Marc Delisle
2007-03-25 12:35:04 +00:00
parent e31fd70d78
commit 429a428ecd
2 changed files with 27 additions and 21 deletions

View File

@@ -19,6 +19,8 @@ $HeadURL: https://phpmyadmin.svn.sourceforge.net/svnroot/phpmyadmin/trunk/phpMyA
- bug #1679440 Added FAQ entry about header errors under IIS caused by
an end-of-line character
- [gui] avoid displaying a wide selector in server selection
- bug #1614004 [relation] foreign key spanning multiple columns are
incorrectly displayed
+ [core] added PMA_fatalError() and made use of it
. [core] added PMA_isValid() and PMA_ifSetOr() for variable handling
. [i18n] use generic $strOptions

View File

@@ -390,13 +390,16 @@ function PMA_getForeigners($db, $table, $column = '', $source = 'both')
foreach ($analyzed_sql[0]['foreign_keys'] AS $one_key) {
// the analyzer may return more than one column name in the
// index list or the ref_index_list
foreach ($one_key['index_list'] AS $i => $field) {
// The analyzer may return more than one column name in the
// index list or the ref_index_list; if this happens,
// the current logic just discards the whole index; having
// more than one index field is currently unsupported (see FAQ 3.6)
if (count($one_key['index_list']) == 1) {
foreach ($one_key['index_list'] AS $i => $field) {
// If a foreign key is defined in the 'internal' source (pmadb)
// and in 'innodb', we won't get it twice if $source='both'
// because we use $field as key
// If a foreign key is defined in the 'internal' source (pmadb)
// and in 'innodb', we won't get it twice if $source='both'
// because we use $field as key
// The parser looks for a CONSTRAINT clause just before
// the FOREIGN KEY clause. It finds it (as output from
@@ -405,22 +408,23 @@ function PMA_getForeigners($db, $table, $column = '', $source = 'both')
// In those cases, the FOREIGN KEY parsing will put numbers
// like -1, 0, 1... instead of the constraint number.
if (isset($one_key['constraint'])) {
$foreign[$field]['constraint'] = $one_key['constraint'];
}
if (isset($one_key['constraint'])) {
$foreign[$field]['constraint'] = $one_key['constraint'];
}
if (isset($one_key['ref_db_name'])) {
$foreign[$field]['foreign_db'] = $one_key['ref_db_name'];
} else {
$foreign[$field]['foreign_db'] = $db;
}
$foreign[$field]['foreign_table'] = $one_key['ref_table_name'];
$foreign[$field]['foreign_field'] = $one_key['ref_index_list'][$i];
if (isset($one_key['on_delete'])) {
$foreign[$field]['on_delete'] = $one_key['on_delete'];
}
if (isset($one_key['on_update'])) {
$foreign[$field]['on_update'] = $one_key['on_update'];
if (isset($one_key['ref_db_name'])) {
$foreign[$field]['foreign_db'] = $one_key['ref_db_name'];
} else {
$foreign[$field]['foreign_db'] = $db;
}
$foreign[$field]['foreign_table'] = $one_key['ref_table_name'];
$foreign[$field]['foreign_field'] = $one_key['ref_index_list'][$i];
if (isset($one_key['on_delete'])) {
$foreign[$field]['on_delete'] = $one_key['on_delete'];
}
if (isset($one_key['on_update'])) {
$foreign[$field]['on_update'] = $one_key['on_update'];
}
}
}
}