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 $grouping = array("avg", "count", "count distinct", "max", "min", "sum");
|
||||
var $onActions = "NO ACTION|CASCADE|SET NULL|SET DEFAULT";
|
||||
var $generated = array("PERSISTED", "VIRTUAL");
|
||||
|
||||
function __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) {
|
||||
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)");
|
||||
$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 (
|
||||
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
|
||||
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
|
||||
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.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"];
|
||||
$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"]],
|
||||
);
|
||||
}
|
||||
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;
|
||||
}
|
||||
|
||||
@@ -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]);
|
||||
$comments[$field[0]] = $val[5];
|
||||
unset($val[5]);
|
||||
if (preg_match('~ AS ~', $val[3])) {
|
||||
unset($val[1], $val[2]);
|
||||
}
|
||||
if ($field[0] == "") {
|
||||
$alter["ADD"][] = "\n " . implode("", $val) . ($table == "" ? substr($foreign[$val[0]], 16 + strlen($val[0])) : ""); // 16 - strlen(" FOREIGN KEY ()")
|
||||
} else {
|
||||
|
@@ -305,9 +305,8 @@ function default_value($field) {
|
||||
global $driver;
|
||||
$default = $field["default"];
|
||||
$generated = $field["generated"];
|
||||
return (
|
||||
$default === null ? ""
|
||||
: (in_array($generated, $driver->generated) ? " GENERATED ALWAYS AS ($default) $generated"
|
||||
return ($default === null ? "" : (in_array($generated, $driver->generated)
|
||||
? (JUSH == "mssql" ? " AS ($default)" . ($generated == "VIRTUAL" ? "" : " $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))
|
||||
? q($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
|
||||
MS SQL: Support export (bug #480)
|
||||
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 altering foreign key
|
||||
MS SQL PDO: Support offset
|
||||
|
Reference in New Issue
Block a user