diff --git a/adminer/create.inc.php b/adminer/create.inc.php index 2adfec8a..479e5b9b 100644 --- a/adminer/create.inc.php +++ b/adminer/create.inc.php @@ -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) {

: "> "(" . lang('engine') . ")") + $engines, $row["Engine"]) : ""); ?> - "(" . lang('collation') . ")") + $collations, $row["Collation"]) : ""); ?> + "(" . lang('collation') . ")") + $collations, $row["Collation"]) : ""); ?> diff --git a/adminer/drivers/mssql.inc.php b/adminer/drivers/mssql.inc.php index 4ba8fecc..8a9885ea 100644 --- a/adminer/drivers/mssql.inc.php +++ b/adminer/drivers/mssql.inc.php @@ -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() { diff --git a/adminer/include/editing.inc.php b/adminer/include/editing.inc.php index 4034522d..0e4ccd8b 100644 --- a/adminer/include/editing.inc.php +++ b/adminer/include/editing.inc.php @@ -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;