]> git.joonet.de Git - adminer.git/commitdiff
MS SQL alter_table
authorJakub Vrana <jakub@vrana.cz>
Wed, 26 May 2010 14:00:21 +0000 (16:00 +0200)
committerJakub Vrana <jakub@vrana.cz>
Wed, 26 May 2010 14:00:21 +0000 (16:00 +0200)
adminer/create.inc.php
adminer/drivers/mssql.inc.php
adminer/include/editing.inc.php

index 2adfec8ad770c7bfee12015be8b824ef5d96444b..479e5b9bdf1e85eb607d39e229273571a816b2dd 100644 (file)
@@ -83,7 +83,7 @@ if ($_POST && !$error && !$_POST["add"] && !$_POST["drop_col"] && !$_POST["up"]
                        $_POST["Comment"],
                        ($_POST["Engine"] && $_POST["Engine"] != $orig_status["Engine"] ? $_POST["Engine"] : ""),
                        ($_POST["Collation"] && $_POST["Collation"] != $orig_status["Collation"] ? $_POST["Collation"] : ""),
-                       ($_POST["Auto_increment"] != "" ? preg_replace('~[^0-9]+~', '', $_POST["Auto_increment"]) : ""),
+                       ($_POST["Auto_increment"] != "" ? preg_replace('~\\D+~', '', $_POST["Auto_increment"]) : ""),
                        $partitioning
                ));
        }
@@ -151,7 +151,7 @@ foreach ($engines as $engine) {
 <p>
 <?php echo lang('Table name'); ?>: <input name="name" maxlength="64" value="<?php echo h($row["name"]); ?>">
 <?php echo ($engines ? html_select("Engine", array("" => "(" . lang('engine') . ")") + $engines, $row["Engine"]) : ""); ?>
- <?php echo ($collations ? html_select("Collation", array("" => "(" . lang('collation') . ")") + $collations, $row["Collation"]) : ""); ?>
+ <?php echo ($collations && $jush != "mssql" ? html_select("Collation", array("" => "(" . lang('collation') . ")") + $collations, $row["Collation"]) : ""); ?>
  <input type="submit" value="<?php echo lang('Save'); ?>">
 <table cellspacing="0" id="edit-fields" class="nowrap">
 <?php $comments = edit_fields($row["fields"], $collations, "TABLE", $suhosin, $foreign_keys, $row["Comment"] != ""); ?>
index 4ba8fecc8e570c6275cc4386d68bd1e6aa12134c..8a9885ea8bfc1f376df8aa9e0b9b3dafcb409591 100644 (file)
@@ -145,7 +145,7 @@ if (isset($_GET["mssql"])) {
                                if ($this->_link) {
                                        $result = $this->query("SELECT SERVERPROPERTY('ProductLevel'), SERVERPROPERTY('Edition')");
                                        $row = $result->fetch_row();
-                                       $this->server_info = $this->result("sp_server_info 2", 2)." [$row[0]] $row[1]";
+                                       $this->server_info = $this->result("sp_server_info 2", 2) . " [$row[0]] $row[1]";
                                } else {
                                        $this->error = mssql_get_last_message();
                                }
@@ -398,7 +398,42 @@ WHERE OBJECT_NAME(indexes.object_id) = " . $connection2->quote($table)
        }
 
        function auto_increment() {
-               return " IDENTITY";
+               return " IDENTITY" . ($_POST["Auto_increment"] != "" ? "(" . preg_replace('~\\D+~', '', $_POST["Auto_increment"]) . ",1)" : "");
+       }
+       
+       function alter_table($table, $name, $fields, $foreign, $comment, $engine, $collation, $auto_increment, $partitioning) {
+               global $connection;
+               $alter = array();
+               foreach ($fields as $field) {
+                       $column = idf_escape($field[0]);
+                       $val = $field[1];
+                       if (!$val) {
+                               $alter["DROP"][] = " COLUMN $field[0]";
+                       } else {
+                               $val[1] = preg_replace("~( COLLATE )'(\\w+)'~", "\\1\\2", $val[1]);
+                               if ($field[0] == "") {
+                                       $alter["ADD"][] = "\n  " . implode("", $val);
+                               } else {
+                                       unset($val[6]); //! identity can't be removed
+                                       if ($column != $val[0]) {
+                                               queries("EXEC sp_rename " . $connection->quote(table($table) . ".$column") . ", " . $connection->quote(idf_unescape($val[0])) . ", 'COLUMN'");
+                                       }
+                                       $alter["ALTER COLUMN " . implode("", $val)][] = "";
+                               }
+                       }
+               }
+               if ($table == "") {
+                       return queries("CREATE TABLE " . table($name) . " (" . implode(",", (array) $alter["ADD"]) . "\n)");
+               }
+               if ($table != $name) {
+                       queries("EXEC sp_rename " . $connection->quote(table($table)) . ", " . $connection->quote($name));
+               }
+               foreach ($alter as $key => $val) {
+                       if (!queries("ALTER TABLE " . idf_escape($name) . " $key" . implode(",", $val))) {
+                               return false;
+                       }
+               }
+               return true;
        }
        
        function begin() {
index 4034522d4f13e89f38449700e1b348d49cb8c789..0e4ccd8b41a740d7b83aa422b9b60380438b2fd5 100644 (file)
@@ -144,7 +144,7 @@ function process_type($field, $collate = "COLLATE") {
 /** Create SQL string from field
 * @param array basic field information
 * @param array information about field type
-* @return array array("field", "type", "NULL", "DEFAULT", "ON UPDATE", "COMMENT", "AUTO_INCREMENT")
+* @return array array("field", " type", " NULL", " DEFAULT", " ON UPDATE", " COMMENT", " AUTO_INCREMENT")
 */
 function process_field($field, $type_field) {
        global $connection;