]> git.joonet.de Git - adminer.git/commitdiff
MS SQL: Allow changing default values
authorJakub Vrana <jakub@vrana.cz>
Sat, 22 Feb 2025 10:08:23 +0000 (11:08 +0100)
committerJakub Vrana <jakub@vrana.cz>
Sat, 22 Feb 2025 10:08:23 +0000 (11:08 +0100)
adminer/drivers/mssql.inc.php
changes.txt

index a597d9cc00aa7d56b9a750bf72d9eb01feaac2a1..4a44386f27a473e6c17042d97e522d5e4d900108 100644 (file)
@@ -385,7 +385,7 @@ WHERE schema_id = SCHEMA_ID(" . q(get_schema()) . ") AND type IN ('S', 'U', 'V')
        function fields($table) {
                $comments = get_key_vals("SELECT objname, cast(value as varchar(max)) FROM fn_listextendedproperty('MS_DESCRIPTION', 'schema', " . q(get_schema()) . ", 'table', " . q($table) . ", 'column', NULL)");
                $return = array();
-               foreach (get_rows("SELECT c.max_length, c.precision, c.scale, c.name, c.is_nullable, c.is_identity, c.collation_name, t.name type, CAST(d.definition as text) [default]
+               foreach (get_rows("SELECT c.max_length, c.precision, c.scale, c.name, c.is_nullable, c.is_identity, c.collation_name, t.name type, CAST(d.definition as text) [default], d.name default_constraint
 FROM sys.all_columns c
 JOIN sys.all_objects o ON c.object_id = o.object_id
 JOIN sys.types t ON c.user_type_id = t.user_type_id
@@ -403,6 +403,7 @@ WHERE o.schema_id = SCHEMA_ID(" . q(get_schema()) . ") AND o.type IN ('S', 'U',
                                "type" => $type,
                                "length" => $length,
                                "default" => (preg_match("~^\('(.*)'\)$~", $row["default"], $match) ? str_replace("''", "'", $match[1]) : $row["default"]),
+                               "default_constraint" => $row["default_constraint"],
                                "null" => $row["is_nullable"],
                                "auto_increment" => $row["is_identity"],
                                "collation" => $row["collation_name"],
@@ -477,6 +478,7 @@ WHERE OBJECT_NAME(i.object_id) = " . q($table)
        function alter_table($table, $name, $fields, $foreign, $comment, $engine, $collation, $auto_increment, $partitioning) {
                $alter = array();
                $comments = array();
+               $orig_fields = fields($table);
                foreach ($fields as $field) {
                        $column = idf_escape($field[0]);
                        $val = $field[1];
@@ -496,8 +498,14 @@ WHERE OBJECT_NAME(i.object_id) = " . q($table)
                                                queries("EXEC sp_rename " . q(table($table) . ".$column") . ", " . q(idf_unescape($val[0])) . ", 'COLUMN'");
                                        }
                                        $alter["ALTER COLUMN " . implode("", $val)][] = "";
-                                       if ($default) {
-                                               $alter["ADD"][] = "\n $default FOR $column";
+                                       $orig_field = $orig_fields[$field[0]];
+                                       if (default_value($orig_field) != $default) {
+                                               if ($orig_field["default"] !== null) {
+                                                       $alter["DROP"][] = " " . idf_escape($orig_field["default_constraint"]);
+                                               }
+                                               if ($default) {
+                                                       $alter["ADD"][] = "\n $default FOR $column";
+                                               }
                                        }
                                }
                        }
index 3df7fd20f4f7410630624ba13c62e8f991da6d4e..6f35a106626a7a99fa83348bca17eb025b7ebf70 100644 (file)
@@ -2,7 +2,7 @@ Adminer 4.16.1-dev:
 Hide index column options by default
 SQLite: Show all supported pragmas in Variables
 MS SQL: Allow altering table in non-default schema (bug #405)
-MS SQL: Display default values (bug #732)
+MS SQL: Fix default values (bug #732, bug #733)
 MS SQL: Fix length of nvarchar columns
 Editor: PDO: Select value of foreign key in edit (bug #847)