]> git.joonet.de Git - adminer.git/commitdiff
MS SQL: Split altering foreign key to two commands
authorJakub Vrana <jakub@vrana.cz>
Wed, 26 Feb 2025 13:25:57 +0000 (14:25 +0100)
committerJakub Vrana <jakub@vrana.cz>
Wed, 26 Feb 2025 15:48:02 +0000 (16:48 +0100)
adminer/foreign.inc.php
changes.txt

index a01ebcb8a6e58148b36a65ae1220b7bb2fa34ed4..0e4d4e4b549216336e87be229f8200612ded816a 100644 (file)
@@ -4,9 +4,6 @@ $name = $_GET["name"];
 $row = $_POST;
 
 if ($_POST && !$error && !$_POST["add"] && !$_POST["change"] && !$_POST["change-js"]) {
-       $message = ($_POST["drop"] ? lang('Foreign key has been dropped.') : ($name != "" ? lang('Foreign key has been altered.') : lang('Foreign key has been created.')));
-       $location = ME . "table=" . urlencode($TABLE);
-
        if (!$_POST["drop"]) {
                $row["source"] = array_filter($row["source"], 'strlen');
                ksort($row["source"]); // enforce input order
@@ -18,17 +15,19 @@ if ($_POST && !$error && !$_POST["add"] && !$_POST["change"] && !$_POST["change-
        }
 
        if ($jush == "sqlite") {
-               queries_redirect($location, $message, recreate_table($TABLE, $TABLE, array(), array(), array(" $name" => ($_POST["drop"] ? "" : " " . format_foreign_key($row)))));
+               $result = recreate_table($TABLE, $TABLE, array(), array(), array(" $name" => ($row["drop"] ? "" : " " . format_foreign_key($row))));
        } else {
                $alter = "ALTER TABLE " . table($TABLE);
-               $drop = "\nDROP " . ($jush == "sql" ? "FOREIGN KEY " : "CONSTRAINT ") . idf_escape($name);
-               if ($_POST["drop"]) {
-                       query_redirect($alter . $drop, $location, $message);
-               } else {
-                       query_redirect($alter . ($name != "" ? "$drop," : "") . "\nADD" . format_foreign_key($row), $location, $message);
-                       $error = lang('Source and target columns must have the same data type, there must be an index on the target columns and referenced data must exist.') . "<br>$error"; //! no partitioning
+               $result = ($name == "" || queries("$alter DROP " . ($jush == "sql" ? "FOREIGN KEY " : "CONSTRAINT ") . idf_escape($name)));
+               if (!$row["drop"]) {
+                       $result = queries("$alter ADD" . format_foreign_key($row));
                }
        }
+       queries_redirect(
+               ME . "table=" . urlencode($TABLE),
+               ($row["drop"] ? lang('Foreign key has been dropped.') : ($name != "" ? lang('Foreign key has been altered.') : lang('Foreign key has been created.'))),
+               $result
+       );
 }
 
 page_header(lang('Foreign key'), $error, array("table" => $TABLE), h($TABLE));
index 681603194c1196c81e95e2cbd3a2f84f27857f04..46940d35030135a6b28b20f4b3d542036ecaceec 100644 (file)
@@ -5,6 +5,7 @@ SQLite: Display all rows of variable values
 SQLite: Remove support for SQLite version 2
 MS SQL: Support export (bug #480)
 MS SQL: Display foreign keys ON UPDATE and ON DELETE
+MS SQL: Fix altering foreign key
 MongoDB: Remove support for deprecated extension mongo
 
 Adminer-4.17.1 (released 2025-02-25):