mirror of
https://github.com/vrana/adminer.git
synced 2025-08-11 00:54:08 +02:00
MS SQL: Support computed columns
This commit is contained in:
@@ -202,6 +202,7 @@ if (isset($_GET["mssql"])) {
|
|||||||
var $functions = array("len", "lower", "round", "upper");
|
var $functions = array("len", "lower", "round", "upper");
|
||||||
var $grouping = array("avg", "count", "count distinct", "max", "min", "sum");
|
var $grouping = array("avg", "count", "count distinct", "max", "min", "sum");
|
||||||
var $onActions = "NO ACTION|CASCADE|SET NULL|SET DEFAULT";
|
var $onActions = "NO ACTION|CASCADE|SET NULL|SET DEFAULT";
|
||||||
|
var $generated = array("PERSISTED", "VIRTUAL");
|
||||||
|
|
||||||
function __construct($connection) {
|
function __construct($connection) {
|
||||||
parent::__construct($connection);
|
parent::__construct($connection);
|
||||||
@@ -358,17 +359,18 @@ WHERE schema_id = SCHEMA_ID(" . q(get_schema()) . ") AND type IN ('S', 'U', 'V')
|
|||||||
}
|
}
|
||||||
|
|
||||||
function fields($table) {
|
function fields($table) {
|
||||||
|
global $connection;
|
||||||
$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)");
|
$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();
|
$return = array();
|
||||||
|
$table_id = $connection->result("SELECT object_id FROM sys.all_objects WHERE schema_id = SCHEMA_ID(" . q(get_schema()) . ") AND type IN ('S', 'U', 'V') AND name = " . q($table));
|
||||||
foreach (
|
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, i.is_primary_key
|
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, i.is_primary_key
|
||||||
FROM sys.all_columns c
|
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
|
JOIN sys.types t ON c.user_type_id = t.user_type_id
|
||||||
LEFT JOIN sys.default_constraints d ON c.default_object_id = d.object_id
|
LEFT JOIN sys.default_constraints d ON c.default_object_id = d.object_id
|
||||||
LEFT JOIN sys.index_columns ic ON c.object_id = ic.object_id AND c.column_id = ic.column_id
|
LEFT JOIN sys.index_columns ic ON c.object_id = ic.object_id AND c.column_id = ic.column_id
|
||||||
LEFT JOIN sys.indexes i ON ic.object_id = i.object_id AND ic.index_id = i.index_id
|
LEFT JOIN sys.indexes i ON ic.object_id = i.object_id AND ic.index_id = i.index_id
|
||||||
WHERE o.schema_id = SCHEMA_ID(" . q(get_schema()) . ") AND o.type IN ('S', 'U', 'V') AND o.name = " . q($table)) as $row
|
WHERE c.object_id = " . q($table_id)) as $row
|
||||||
) {
|
) {
|
||||||
$type = $row["type"];
|
$type = $row["type"];
|
||||||
$length = (preg_match("~char|binary~", $type)
|
$length = (preg_match("~char|binary~", $type)
|
||||||
@@ -390,6 +392,10 @@ WHERE o.schema_id = SCHEMA_ID(" . q(get_schema()) . ") AND o.type IN ('S', 'U',
|
|||||||
"comment" => $comments[$row["name"]],
|
"comment" => $comments[$row["name"]],
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
foreach (get_rows("SELECT * FROM sys.computed_columns WHERE object_id = " . q($table_id)) as $row) {
|
||||||
|
$return[$row["name"]]["generated"] = ($row["is_persisted"] ? "PERSISTED" : "VIRTUAL");
|
||||||
|
$return[$row["name"]]["default"] = $row["definition"];
|
||||||
|
}
|
||||||
return $return;
|
return $return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -467,6 +473,9 @@ WHERE OBJECT_NAME(i.object_id) = " . q($table), $connection2) as $row
|
|||||||
$val[1] = preg_replace("~( COLLATE )'(\\w+)'~", '\1\2', $val[1]);
|
$val[1] = preg_replace("~( COLLATE )'(\\w+)'~", '\1\2', $val[1]);
|
||||||
$comments[$field[0]] = $val[5];
|
$comments[$field[0]] = $val[5];
|
||||||
unset($val[5]);
|
unset($val[5]);
|
||||||
|
if (preg_match('~ AS ~', $val[3])) {
|
||||||
|
unset($val[1], $val[2]);
|
||||||
|
}
|
||||||
if ($field[0] == "") {
|
if ($field[0] == "") {
|
||||||
$alter["ADD"][] = "\n " . implode("", $val) . ($table == "" ? substr($foreign[$val[0]], 16 + strlen($val[0])) : ""); // 16 - strlen(" FOREIGN KEY ()")
|
$alter["ADD"][] = "\n " . implode("", $val) . ($table == "" ? substr($foreign[$val[0]], 16 + strlen($val[0])) : ""); // 16 - strlen(" FOREIGN KEY ()")
|
||||||
} else {
|
} else {
|
||||||
|
@@ -305,9 +305,8 @@ function default_value($field) {
|
|||||||
global $driver;
|
global $driver;
|
||||||
$default = $field["default"];
|
$default = $field["default"];
|
||||||
$generated = $field["generated"];
|
$generated = $field["generated"];
|
||||||
return (
|
return ($default === null ? "" : (in_array($generated, $driver->generated)
|
||||||
$default === null ? ""
|
? (JUSH == "mssql" ? " AS ($default)" . ($generated == "VIRTUAL" ? "" : " $generated") . "" : " GENERATED ALWAYS AS ($default) $generated")
|
||||||
: (in_array($generated, $driver->generated) ? " GENERATED ALWAYS AS ($default) $generated"
|
|
||||||
: " DEFAULT " . (!preg_match('~^GENERATED ~i', $default) && (preg_match('~char|binary|text|enum|set~', $field["type"]) || preg_match('~^(?![a-z])~i', $default))
|
: " DEFAULT " . (!preg_match('~^GENERATED ~i', $default) && (preg_match('~char|binary|text|enum|set~', $field["type"]) || preg_match('~^(?![a-z])~i', $default))
|
||||||
? q($default)
|
? q($default)
|
||||||
: str_ireplace("current_timestamp()", "CURRENT_TIMESTAMP", (JUSH == "sqlite" ? "($default)" : $default))
|
: str_ireplace("current_timestamp()", "CURRENT_TIMESTAMP", (JUSH == "sqlite" ? "($default)" : $default))
|
||||||
|
@@ -21,6 +21,7 @@ SQLite: Display all rows of variable values
|
|||||||
SQLite: Remove support for SQLite version 2
|
SQLite: Remove support for SQLite version 2
|
||||||
MS SQL: Support export (bug #480)
|
MS SQL: Support export (bug #480)
|
||||||
MS SQL: Display foreign keys ON UPDATE and ON DELETE
|
MS SQL: Display foreign keys ON UPDATE and ON DELETE
|
||||||
|
MS SQL: Support computed columns
|
||||||
MS SQL: Fix CSV import (bug #859)
|
MS SQL: Fix CSV import (bug #859)
|
||||||
MS SQL: Fix altering foreign key
|
MS SQL: Fix altering foreign key
|
||||||
MS SQL PDO: Support offset
|
MS SQL PDO: Support offset
|
||||||
|
Reference in New Issue
Block a user