]> git.joonet.de Git - adminer.git/commitdiff
Foreign keys: Switch schema back after getting the tables
authorJakub Vrana <jakub@vrana.cz>
Wed, 26 Feb 2025 14:57:52 +0000 (15:57 +0100)
committerJakub Vrana <jakub@vrana.cz>
Wed, 26 Feb 2025 15:48:02 +0000 (16:48 +0100)
adminer/drivers/mssql.inc.php
adminer/foreign.inc.php
adminer/include/editing.inc.php
adminer/table.inc.php

index 62b8e7675b544907b803fe92e84716de646bdacf..e01fe3bbe47e310027c87e342df5d0dbabf3a404 100644 (file)
@@ -477,6 +477,7 @@ WHERE OBJECT_NAME(i.object_id) = " . q($table)
                foreach (get_rows("EXEC sp_fkeys @fktable_name = " . q($table) . ", @fktable_owner = " . q(get_schema())) as $row) {
                        $foreign_key = &$return[$row["FK_NAME"]];
                        $foreign_key["db"] = $row["PKTABLE_QUALIFIER"];
+                       $foreign_key["ns"] = $row["PKTABLE_OWNER"];
                        $foreign_key["table"] = $row["PKTABLE_NAME"];
                        $foreign_key["on_update"] = $on_actions[$row["UPDATE_RULE"]];
                        $foreign_key["on_delete"] = $on_actions[$row["DELETE_RULE"]];
@@ -556,6 +557,7 @@ WHERE sys1.xtype = 'TR' AND sys2.name = " . q($table)
        }
 
        function set_schema($schema) {
+               $_GET["ns"] = $schema;
                return true; // ALTER USER is permanent
        }
 
index 0e4d4e4b549216336e87be229f8200612ded816a..99caf5cbf22b8f8da4af8b585246394d30687987 100644 (file)
@@ -56,14 +56,18 @@ if ($row["db"] != "") {
        $connection->select_db($row["db"]);
 }
 if ($row["ns"] != "") {
+       $orig_schema = get_schema();
        set_schema($row["ns"]);
 }
 $referencable = array_keys(array_filter(table_status('', true), 'fk_support'));
 $target = array_keys(fields(in_array($row["table"], $referencable) ? $row["table"] : reset($referencable)));
 $onchange = "this.form['change-js'].value = '1'; this.form.submit();";
 echo "<p>" . lang('Target table') . ": " . html_select("table", $referencable, $row["table"], $onchange) . "\n";
-if ($jush == "pgsql") {
+if (support("scheme")) {
        echo lang('Schema') . ": " . html_select("ns", $adminer->schemas(), $row["ns"] != "" ? $row["ns"] : $_GET["ns"], $onchange);
+       if ($row["ns"] != "") {
+               set_schema($orig_schema);
+       }
 } elseif ($jush != "sqlite") {
        $dbs = array();
        foreach ($adminer->databases() as $db) {
index 2f53b83d41a0b14d661ded2bda789593dc45cb86..6739f5e92f31188eaf0418f8e9c0d76d190e0c42 100644 (file)
@@ -550,7 +550,7 @@ function format_foreign_key($foreign_key) {
        return " FOREIGN KEY (" . implode(", ", array_map('idf_escape', $foreign_key["source"])) . ") REFERENCES "
                . ($db != "" && $db != $_GET["db"] ? idf_escape($db) . "." : "")
                . ($ns != "" && $ns != $_GET["ns"] ? idf_escape($ns) . "." : "")
-               . table($foreign_key["table"])
+               . idf_escape($foreign_key["table"])
                . " (" . implode(", ", array_map('idf_escape', $foreign_key["target"])) . ")" //! reuse $name - check in older MySQL versions
                . (preg_match("~^($on_actions)\$~", $foreign_key["on_delete"]) ? " ON DELETE $foreign_key[on_delete]" : "")
                . (preg_match("~^($on_actions)\$~", $foreign_key["on_update"]) ? " ON UPDATE $foreign_key[on_update]" : "")
index d2af40c2b1a189b5c225de5e64e85ed9f5f4dbdb..be73e61124d344e680b06612a111cd7110d9226e 100644 (file)
@@ -44,7 +44,9 @@ if (!is_view($table_status)) {
                                echo "<tr title='" . h($name) . "'>";
                                echo "<th><i>" . implode("</i>, <i>", array_map('h', $foreign_key["source"])) . "</i>";
                                echo "<td><a href='" . h($foreign_key["db"] != "" ? preg_replace('~db=[^&]*~', "db=" . urlencode($foreign_key["db"]), ME) : ($foreign_key["ns"] != "" ? preg_replace('~ns=[^&]*~', "ns=" . urlencode($foreign_key["ns"]), ME) : ME)) . "table=" . urlencode($foreign_key["table"]) . "'>"
-                                       . ($foreign_key["db"] != "" ? "<b>" . h($foreign_key["db"]) . "</b>." : "") . ($foreign_key["ns"] != "" ? "<b>" . h($foreign_key["ns"]) . "</b>." : "") . h($foreign_key["table"])
+                                       . ($foreign_key["db"] != "" && $foreign_key["db"] != DB ? "<b>" . h($foreign_key["db"]) . "</b>." : "")
+                                       . ($foreign_key["ns"] != "" && $foreign_key["ns"] != $_GET["ns"] ? "<b>" . h($foreign_key["ns"]) . "</b>." : "")
+                                       . h($foreign_key["table"])
                                        . "</a>"
                                ;
                                echo "(<i>" . implode("</i>, <i>", array_map('h', $foreign_key["target"])) . "</i>)";