diff --git a/ChangeLog b/ChangeLog index 152f006f7..269cdb8f7 100755 --- a/ChangeLog +++ b/ChangeLog @@ -11,6 +11,9 @@ $Source$ in left frame when many databases are there (original theme), thanks to Michael Keck * header.inc.php: bug 965594: spaces after colons, and remove old code + * libraries/sqlparser.lib.php: bug 983992, error in search mode because + MySQL 4.0.18+ has changed the way to report the foreign key references + when the foreign key is in a different db 2004-07-02 Marc Delisle * main.php: put Create button on the same line as the input field diff --git a/libraries/sqlparser.lib.php b/libraries/sqlparser.lib.php index 9dfde489d..274588a7f 100644 --- a/libraries/sqlparser.lib.php +++ b/libraries/sqlparser.lib.php @@ -1498,14 +1498,24 @@ if ($is_minimum_common == FALSE) { if ($in_bracket) { $foreign[$foreign_key_number]['ref_index_list'][] = $identifier; } else { - // identifier can be table or db.table - $db_table = explode('.',$identifier); - if (isset($db_table[1])) { - $foreign[$foreign_key_number]['ref_db_name'] = $db_table[0]; - $foreign[$foreign_key_number]['ref_table_name'] = $db_table[1]; + // for MySQL 4.0.18, identifier is + // `table` or `db`.`table` + // first pass will pick the db name + // next pass will execute the else and pick the + // db name in $db_table[0] + if ($arr[$i+1]['type'] == 'punct_qualifier') { + $foreign[$foreign_key_number]['ref_db_name'] = $identifier; } else { - $foreign[$foreign_key_number]['ref_table_name'] = $db_table[0]; - } + // for MySQL 4.0.16, identifier is + // `table` or `db.table` + $db_table = explode('.',$identifier); + if (isset($db_table[1])) { + $foreign[$foreign_key_number]['ref_db_name'] = $db_table[0]; + $foreign[$foreign_key_number]['ref_table_name'] = $db_table[1]; + } else { + $foreign[$foreign_key_number]['ref_table_name'] = $db_table[0]; + } + } } } }