mirror of
https://github.com/vrana/adminer.git
synced 2025-08-08 15:47:00 +02:00
Foreign keys: Switch schema back after getting the tables
This commit is contained in:
@@ -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) {
|
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 = &$return[$row["FK_NAME"]];
|
||||||
$foreign_key["db"] = $row["PKTABLE_QUALIFIER"];
|
$foreign_key["db"] = $row["PKTABLE_QUALIFIER"];
|
||||||
|
$foreign_key["ns"] = $row["PKTABLE_OWNER"];
|
||||||
$foreign_key["table"] = $row["PKTABLE_NAME"];
|
$foreign_key["table"] = $row["PKTABLE_NAME"];
|
||||||
$foreign_key["on_update"] = $on_actions[$row["UPDATE_RULE"]];
|
$foreign_key["on_update"] = $on_actions[$row["UPDATE_RULE"]];
|
||||||
$foreign_key["on_delete"] = $on_actions[$row["DELETE_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) {
|
function set_schema($schema) {
|
||||||
|
$_GET["ns"] = $schema;
|
||||||
return true; // ALTER USER is permanent
|
return true; // ALTER USER is permanent
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -56,14 +56,18 @@ if ($row["db"] != "") {
|
|||||||
$connection->select_db($row["db"]);
|
$connection->select_db($row["db"]);
|
||||||
}
|
}
|
||||||
if ($row["ns"] != "") {
|
if ($row["ns"] != "") {
|
||||||
|
$orig_schema = get_schema();
|
||||||
set_schema($row["ns"]);
|
set_schema($row["ns"]);
|
||||||
}
|
}
|
||||||
$referencable = array_keys(array_filter(table_status('', true), 'fk_support'));
|
$referencable = array_keys(array_filter(table_status('', true), 'fk_support'));
|
||||||
$target = array_keys(fields(in_array($row["table"], $referencable) ? $row["table"] : reset($referencable)));
|
$target = array_keys(fields(in_array($row["table"], $referencable) ? $row["table"] : reset($referencable)));
|
||||||
$onchange = "this.form['change-js'].value = '1'; this.form.submit();";
|
$onchange = "this.form['change-js'].value = '1'; this.form.submit();";
|
||||||
echo "<p>" . lang('Target table') . ": " . html_select("table", $referencable, $row["table"], $onchange) . "\n";
|
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);
|
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") {
|
} elseif ($jush != "sqlite") {
|
||||||
$dbs = array();
|
$dbs = array();
|
||||||
foreach ($adminer->databases() as $db) {
|
foreach ($adminer->databases() as $db) {
|
||||||
|
@@ -550,7 +550,7 @@ function format_foreign_key($foreign_key) {
|
|||||||
return " FOREIGN KEY (" . implode(", ", array_map('idf_escape', $foreign_key["source"])) . ") REFERENCES "
|
return " FOREIGN KEY (" . implode(", ", array_map('idf_escape', $foreign_key["source"])) . ") REFERENCES "
|
||||||
. ($db != "" && $db != $_GET["db"] ? idf_escape($db) . "." : "")
|
. ($db != "" && $db != $_GET["db"] ? idf_escape($db) . "." : "")
|
||||||
. ($ns != "" && $ns != $_GET["ns"] ? idf_escape($ns) . "." : "")
|
. ($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
|
. " (" . 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_delete"]) ? " ON DELETE $foreign_key[on_delete]" : "")
|
||||||
. (preg_match("~^($on_actions)\$~", $foreign_key["on_update"]) ? " ON UPDATE $foreign_key[on_update]" : "")
|
. (preg_match("~^($on_actions)\$~", $foreign_key["on_update"]) ? " ON UPDATE $foreign_key[on_update]" : "")
|
||||||
|
@@ -44,7 +44,9 @@ if (!is_view($table_status)) {
|
|||||||
echo "<tr title='" . h($name) . "'>";
|
echo "<tr title='" . h($name) . "'>";
|
||||||
echo "<th><i>" . implode("</i>, <i>", array_map('h', $foreign_key["source"])) . "</i>";
|
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"]) . "'>"
|
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>"
|
. "</a>"
|
||||||
;
|
;
|
||||||
echo "(<i>" . implode("</i>, <i>", array_map('h', $foreign_key["target"])) . "</i>)";
|
echo "(<i>" . implode("</i>, <i>", array_map('h', $foreign_key["target"])) . "</i>)";
|
||||||
|
Reference in New Issue
Block a user