]> git.joonet.de Git - adminer.git/commitdiff
More precise pattern in foreign_keys()
authorjakubvrana <jakubvrana@7c3ca157-0c34-0410-bff1-cbf682f78f5c>
Wed, 11 Jul 2007 15:44:10 +0000 (15:44 +0000)
committerjakubvrana <jakubvrana@7c3ca157-0c34-0410-bff1-cbf682f78f5c>
Wed, 11 Jul 2007 15:44:10 +0000 (15:44 +0000)
git-svn-id: https://adminer.svn.sourceforge.net/svnroot/adminer/trunk@137 7c3ca157-0c34-0410-bff1-cbf682f78f5c

functions.inc.php

index 5b1d3d44e967965d6500b0ef515b971189bfd3ba..5b6a555f50e31df156e9c4c81bf286881424126d 100644 (file)
@@ -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;