提交 c97443b4 编写于 作者: S Serge Rider 提交者: GitHub

Merge pull request #12229 from dbeaver/sql-server-computed-column#11426

#11426 Show definition and persistence of computed columns

Former-commit-id: 51c0a3d6
......@@ -61,6 +61,9 @@
<configurator class="org.jkiss.dbeaver.ext.mssql.ui.config.SQLServerDatabaseConfigurator">
<objectType name="org.jkiss.dbeaver.ext.mssql.model.SQLServerDatabase"/>
</configurator>
<configurator class="org.jkiss.dbeaver.ext.mssql.ui.config.SQLServerColumnConfigurator">
<objectType name="org.jkiss.dbeaver.ext.mssql.model.SQLServerTableColumn"/>
</configurator>
<configurator class="org.jkiss.dbeaver.ext.mssql.ui.config.SQLServerUniqueKeyConfigurator">
<objectType name="org.jkiss.dbeaver.ext.mssql.model.SQLServerTableUniqueKey"/>
</configurator>
......
/*
* DBeaver - Universal Database Manager
* Copyright (C) 2010-2021 DBeaver Corp and others
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.jkiss.dbeaver.ext.mssql.ui.config;
import org.jkiss.dbeaver.ext.mssql.model.SQLServerTableColumn;
import org.jkiss.dbeaver.model.edit.DBEObjectConfigurator;
import org.jkiss.dbeaver.model.runtime.DBRProgressMonitor;
import org.jkiss.dbeaver.ui.UITask;
import org.jkiss.dbeaver.ui.editors.object.struct.AttributeEditPage;
public class SQLServerColumnConfigurator implements DBEObjectConfigurator<SQLServerTableColumn> {
@Override
public SQLServerTableColumn configureObject(DBRProgressMonitor monitor, Object container, SQLServerTableColumn column) {
return new UITask<SQLServerTableColumn>() {
@Override
protected SQLServerTableColumn runTask() {
final AttributeEditPage page = new AttributeEditPage(null, column);
if (!page.edit()) {
return null;
}
return column;
}
}.execute();
}
}
......@@ -32,6 +32,10 @@ meta.org.jkiss.dbeaver.ext.mssql.model.SQLServerTableColumn.maxLength.name = Len
meta.org.jkiss.dbeaver.ext.mssql.model.SQLServerTableColumn.maxLength.description = Maximum length. For char data types - length in characters. For other data types - length in bytes.
meta.org.jkiss.dbeaver.ext.mssql.model.SQLServerTableColumn.bytesMaxLength.name = Bytes
meta.org.jkiss.dbeaver.ext.mssql.model.SQLServerTableColumn.bytesMaxLength.description = Length in bytes
meta.org.jkiss.dbeaver.ext.mssql.model.SQLServerTableColumn.computedPersisted.name = Persisted
meta.org.jkiss.dbeaver.ext.mssql.model.SQLServerTableColumn.computedPersisted.description = A computed column that is physically stored in the table.
meta.org.jkiss.dbeaver.ext.mssql.model.SQLServerTableColumn.computedDefinition.name = Computed Definition
meta.org.jkiss.dbeaver.ext.mssql.model.SQLServerTableColumn.computedDefinition.description = A computed column expression that can use data from other columns to calculate a value for the column to which it belongs.
meta.org.jkiss.dbeaver.ext.mssql.model.SQLServerTableUniqueKey.index.name = Index
meta.org.jkiss.dbeaver.ext.mssql.model.SQLServerTableCheckConstraint.name.name = Name
meta.org.jkiss.dbeaver.ext.mssql.model.SQLServerTableCheckConstraint.checkConstraintDefinition.name = Definition
......
......@@ -42,6 +42,10 @@ meta.org.jkiss.dbeaver.ext.mssql.model.SQLServerTableColumn.maxLength.name = \u0
meta.org.jkiss.dbeaver.ext.mssql.model.SQLServerTableColumn.maxLength.description = \u041C\u0430\u043A\u0441\u0438\u043C\u0430\u043B\u044C\u043D\u0430\u044F \u0434\u043B\u0438\u043D\u0430. \u0414\u043B\u044F \u0437\u043D\u0430\u043A\u043E\u0432\u044B\u0445 \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0439 - \u0414\u043B\u0438\u043D\u0430 \u0432 \u0441\u0438\u043C\u0432\u043E\u043B\u0430\u0445. \u0414\u043B\u044F \u043E\u0441\u0442\u0430\u043B\u044C\u043D\u044B\u0445 \u0442\u0438\u043F\u043E\u0432 \u0434\u0430\u043D\u043D\u044B\u0445 - \u0434\u043B\u0438\u043D\u0430 \u0432 \u0431\u0430\u0439\u0442\u0430\u0445.
meta.org.jkiss.dbeaver.ext.mssql.model.SQLServerTableColumn.bytesMaxLength.name = \u0411\u0430\u0439\u0442\u044B
meta.org.jkiss.dbeaver.ext.mssql.model.SQLServerTableColumn.bytesMaxLength.description = \u0414\u043B\u0438\u043D\u0430 \u0432 \u0431\u0430\u0439\u0442\u0430\u0445
meta.org.jkiss.dbeaver.ext.mssql.model.SQLServerTableColumn.computedPersisted.name = \u041C\u0430\u0442\u0435\u0440\u0438\u0430\u043B\u0438\u0437\u043E\u0432\u0430\u043D\u043D\u044B\u0439
meta.org.jkiss.dbeaver.ext.mssql.model.SQLServerTableColumn.computedPersisted.description = \u041C\u0430\u0442\u0435\u0440\u0438\u0430\u043B\u0438\u0437\u043E\u0432\u0430\u043D\u043D\u044B\u0439 \u0441\u0442\u043E\u043B\u0431\u0435\u0446, \u043A\u043E\u0442\u043E\u0440\u044B\u0439 \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043A\u0438 \u0445\u0440\u0430\u043D\u0438\u0442\u0441\u044F \u0432 \u0442\u0430\u0431\u043B\u0438\u0446\u0435.
meta.org.jkiss.dbeaver.ext.mssql.model.SQLServerTableColumn.computedDefinition.name = \u0412\u044B\u0440\u0430\u0436\u0435\u043D\u0438\u0435
meta.org.jkiss.dbeaver.ext.mssql.model.SQLServerTableColumn.computedDefinition.description = \u0412 \u0432\u044B\u0440\u0430\u0436\u0435\u043D\u0438\u0438 \u0432\u044B\u0447\u0438\u0441\u043B\u044F\u0435\u043C\u043E\u0433\u043E \u0441\u0442\u043E\u043B\u0431\u0446\u0430 \u0434\u043B\u044F \u0432\u044B\u0447\u0438\u0441\u043B\u0435\u043D\u0438\u044F \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u044F \u043C\u043E\u0433\u0443\u0442 \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u044C\u0441\u044F \u0434\u0430\u043D\u043D\u044B\u0435 \u0438\u0437 \u0434\u0440\u0443\u0433\u0438\u0445 \u0441\u0442\u043E\u043B\u0431\u0446\u043E\u0432.
meta.org.jkiss.dbeaver.ext.mssql.model.SQLServerTableUniqueKey.index.name = \u0418\u043D\u0434\u0435\u043A\u0441
meta.org.jkiss.dbeaver.ext.mssql.model.SQLServerTableCheckConstraint.name.name = \u0418\u043C\u044F
meta.org.jkiss.dbeaver.ext.mssql.model.SQLServerTableCheckConstraint.checkConstraintDefinition.name = \u0412\u044B\u0440\u0430\u0436\u0435\u043D\u0438\u0435
......
......@@ -80,6 +80,16 @@ public class SQLServerTableColumnManager extends SQLTableColumnManager<SQLServer
}
};
protected final ColumnModifier<SQLServerTableColumn> ComputedModifier = (monitor, column, sql, command) -> {
final String definition = column.getComputedDefinition();
if (CommonUtils.isNotEmpty(definition)) {
sql.append(" AS ").append(definition);
}
if (column.isComputedPersisted()) {
sql.append(" PERSISTED");
}
};
@Nullable
@Override
public DBSObjectCache<? extends DBSObject, SQLServerTableColumn> getObjectsCache(SQLServerTableColumn object)
......@@ -89,6 +99,9 @@ public class SQLServerTableColumnManager extends SQLTableColumnManager<SQLServer
protected ColumnModifier[] getSupportedModifiers(SQLServerTableColumn column, Map<String, Object> options)
{
if (CommonUtils.isNotEmpty(column.getComputedDefinition())) {
return new ColumnModifier[]{ComputedModifier, NotNullModifier};
}
return new ColumnModifier[] {DataTypeModifier, IdentityModifier, CollateModifier, SQLServerDefaultModifier, NullNotNullModifier};
}
......
......@@ -48,6 +48,7 @@ public class SQLServerDialect extends JDBCSQLDialect {
private static String[] SQLSERVER_EXTRA_KEYWORDS = new String[]{
"TOP",
"SYNONYM",
"PERSISTED"
};
private static final String[][] SQLSERVER_QUOTE_STRINGS = {
......
......@@ -413,7 +413,7 @@ public class SQLServerSchema implements DBSSchema, DBPSaveableObject, DBPQualifi
throws SQLException
{
StringBuilder sql = new StringBuilder();
sql.append("SELECT c.*,t.name as table_name,t.schema_id");
sql.append("SELECT c.*,t.name as table_name,t.schema_id,cc.is_persisted,cc.definition as computed_definition");
if (owner.getDataSource().supportsColumnProperty()) {
sql.append(", COLUMNPROPERTY(c.object_id, c.name, 'charmaxlen') as char_max_length");
}
......@@ -421,8 +421,9 @@ public class SQLServerSchema implements DBSSchema, DBPSaveableObject, DBPQualifi
.append(SQLServerUtils.getSystemTableName(owner.getDatabase(), "all_columns")).append(" c")
.append("\nJOIN ").append(SQLServerUtils.getSystemTableName(owner.getDatabase(), "all_objects")).append(" t ON t.object_id=c.object_id")
.append("\nLEFT OUTER JOIN ").append(SQLServerUtils.getSystemTableName(owner.getDatabase(), "default_constraints")).append(" dc ON dc.parent_object_id=t.object_id AND dc.parent_column_id=c.column_id")
.append("\nLEFT OUTER JOIN ").append(SQLServerUtils.getExtendedPropsTableName(owner.getDatabase())).append(" ep ON ep.class=").append(SQLServerObjectClass.OBJECT_OR_COLUMN.getClassId()).append(" AND ep.major_id=t.object_id AND ep.minor_id=c.column_id AND ep.name='").append(SQLServerConstants.PROP_MS_DESCRIPTION).append("'");
sql.append(" WHERE ");
.append("\nLEFT OUTER JOIN ").append(SQLServerUtils.getExtendedPropsTableName(owner.getDatabase())).append(" ep ON ep.class=").append(SQLServerObjectClass.OBJECT_OR_COLUMN.getClassId()).append(" AND ep.major_id=t.object_id AND ep.minor_id=c.column_id AND ep.name='").append(SQLServerConstants.PROP_MS_DESCRIPTION).append("'")
.append("\nLEFT OUTER JOIN ").append(SQLServerUtils.getSystemTableName(owner.getDatabase(), "computed_columns")).append(" cc ON cc.object_id=t.object_id AND cc.column_id=c.column_id")
.append("\nWHERE ");
if (forTable != null) {
sql.append("t.object_id=?");
} else {
......
......@@ -63,6 +63,8 @@ public class SQLServerTableColumn extends JDBCTableColumn<SQLServerTableBase> im
private String collationName;
private String description;
private boolean hidden;
private boolean computedPersisted;
private String computedDefinition;
private IdentityInfo identityInfo = new IdentityInfo();
public static class IdentityInfo {
......@@ -161,6 +163,8 @@ public class SQLServerTableColumn extends JDBCTableColumn<SQLServerTableBase> im
this.setDefaultValue(dv);
}
this.description = JDBCUtils.safeGetString(dbResult, "description");
this.computedPersisted = JDBCUtils.safeGetInt(dbResult, "is_persisted") != 0;
this.computedDefinition = JDBCUtils.safeGetString(dbResult, "computed_definition");
}
@NotNull
......@@ -251,6 +255,24 @@ public class SQLServerTableColumn extends JDBCTableColumn<SQLServerTableBase> im
this.collationName = collationName;
}
@Property(editable = true, order = 76)
public String getComputedDefinition() {
return computedDefinition;
}
public void setComputedDefinition(String computedDefinition) {
this.computedDefinition = computedDefinition;
}
@Property(editable = true, order = 77)
public boolean isComputedPersisted() {
return computedPersisted;
}
public void setComputedPersisted(boolean computedPersisted) {
this.computedPersisted = computedPersisted;
}
@Property(viewable = false, order = 80)
@Override
public boolean isHidden() {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册