From 286a5ef52df62b56a97a0a2ab14561af2c8b0297 Mon Sep 17 00:00:00 2001 From: jakubvrana Date: Wed, 11 Jul 2007 15:44:10 +0000 Subject: [PATCH] More precise pattern in foreign_keys() git-svn-id: https://adminer.svn.sourceforge.net/svnroot/adminer/trunk@137 7c3ca157-0c34-0410-bff1-cbf682f78f5c --- functions.inc.php | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/functions.inc.php b/functions.inc.php index 5b1d3d44..5b6a555f 100644 --- a/functions.inc.php +++ b/functions.inc.php @@ -70,17 +70,19 @@ function indexes($table) { function foreign_keys($table) { global $mysql; - static $pattern = '~`((?:[^`]+|``)*)`~'; + static $pattern = '(?:[^`]+|``)+'; $return = array(); $result = $mysql->query("SHOW CREATE TABLE " . idf_escape($table)); if ($result) { $create_table = $mysql->result($result, 1); $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) { - preg_match_all($pattern, $match[1], $source); - preg_match_all($pattern, $match[4], $target); - $return[] = array(idf_unescape($match[2]), idf_unescape($match[3]), array_map('idf_unescape', $source[1]), array_map('idf_unescape', $target[1])); + $db = idf_unescape(strlen($match[3]) ? $match[2] : $match[3]); + $table = idf_unescape(strlen($match[3]) ? $match[3] : $match[2]); + 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;