1
0
mirror of https://github.com/vrana/adminer.git synced 2025-08-13 18:14:07 +02:00

More precise pattern in foreign_keys()

git-svn-id: https://adminer.svn.sourceforge.net/svnroot/adminer/trunk@137 7c3ca157-0c34-0410-bff1-cbf682f78f5c
This commit is contained in:
jakubvrana
2007-07-11 15:44:10 +00:00
parent 880607a6c3
commit 286a5ef52d

View File

@@ -70,17 +70,19 @@ function indexes($table) {
function foreign_keys($table) { function foreign_keys($table) {
global $mysql; global $mysql;
static $pattern = '~`((?:[^`]+|``)*)`~'; static $pattern = '(?:[^`]+|``)+';
$return = array(); $return = array();
$result = $mysql->query("SHOW CREATE TABLE " . idf_escape($table)); $result = $mysql->query("SHOW CREATE TABLE " . idf_escape($table));
if ($result) { if ($result) {
$create_table = $mysql->result($result, 1); $create_table = $mysql->result($result, 1);
$result->free(); $result->free();
preg_match_all('~FOREIGN KEY \\((.+)\\) REFERENCES (?:`(.+)`\\.)?`(.+)` \\((.+)\\)~', $create_table, $matches, PREG_SET_ORDER); preg_match_all("~FOREIGN KEY \\(((?:`$pattern`,? ?)+)\\) REFERENCES `($pattern)`(?:\\.`($pattern)`)? \\(((?:`$pattern`,? ?)+)\\)~", $create_table, $matches, PREG_SET_ORDER);
foreach ($matches as $match) { foreach ($matches as $match) {
preg_match_all($pattern, $match[1], $source); $db = idf_unescape(strlen($match[3]) ? $match[2] : $match[3]);
preg_match_all($pattern, $match[4], $target); $table = idf_unescape(strlen($match[3]) ? $match[3] : $match[2]);
$return[] = array(idf_unescape($match[2]), idf_unescape($match[3]), array_map('idf_unescape', $source[1]), array_map('idf_unescape', $target[1])); preg_match_all("~`($pattern)`~", $match[1], $source);
preg_match_all("~`($pattern)`~", $match[4], $target);
$return[] = array($db, $table, array_map('idf_unescape', $source[1]), array_map('idf_unescape', $target[1]));
} }
} }
return $return; return $return;