提交 963eae54 编写于 作者: S serge-rider

#3950 SQL Server: synonyms meta info support

上级 617f1acd
...@@ -63,7 +63,7 @@ public abstract class GenericSynonym implements DBSAlias, DBSObject, DBPQualifie ...@@ -63,7 +63,7 @@ public abstract class GenericSynonym implements DBSAlias, DBSObject, DBPQualifie
@Nullable @Nullable
@Override @Override
public DBSObject getParentObject() { public GenericStructContainer getParentObject() {
return container; return container;
} }
......
...@@ -10,3 +10,5 @@ datasource.sybase.description=Sybase/SAP ASE datasource ...@@ -10,3 +10,5 @@ datasource.sybase.description=Sybase/SAP ASE datasource
meta.org.jkiss.dbeaver.ext.mssql.model.SQLServerTable.description.name=Description meta.org.jkiss.dbeaver.ext.mssql.model.SQLServerTable.description.name=Description
meta.org.jkiss.dbeaver.ext.mssql.model.SQLServerTable.description.description=Table description meta.org.jkiss.dbeaver.ext.mssql.model.SQLServerTable.description.description=Table description
meta.org.jkiss.dbeaver.ext.mssql.model.SQLServerSynonym.targetObject.name=Base object
meta.org.jkiss.dbeaver.ext.mssql.model.SQLServerSynonym.targetObject.description=Object to which the user of this synonym is redirected
...@@ -345,6 +345,42 @@ public class SQLServerMetaModel extends GenericMetaModel implements DBCQueryTran ...@@ -345,6 +345,42 @@ public class SQLServerMetaModel extends GenericMetaModel implements DBCQueryTran
} }
} }
@Override
public boolean supportsSynonyms(GenericDataSource dataSource) {
return true;
}
@Override
public List<? extends GenericSynonym> loadSynonyms(DBRProgressMonitor monitor, GenericStructContainer container) throws DBException {
try (JDBCSession session = DBUtils.openMetaSession(monitor, container, "Read system synonyms")) {
try (JDBCPreparedStatement dbStat = session.prepareStatement(
"SELECT * FROM " + getSystemSchemaFQN(container.getDataSource(), container.getCatalog()) + ".synonyms WHERE schema_name(schema_id)=?")) {
dbStat.setString(1, container.getSchema().getName());
List<GenericSynonym> result = new ArrayList<>();
try (JDBCResultSet dbResult = dbStat.executeQuery()) {
while (dbResult.next()) {
String name = JDBCUtils.safeGetString(dbResult, "name");
if (name == null) {
continue;
}
name = name.trim();
SQLServerSynonym synonym = new SQLServerSynonym(
container,
name,
null,
JDBCUtils.safeGetString(dbResult, "base_object_name"));
result.add(synonym);
}
}
return result;
}
} catch (SQLException e) {
throw new DBException(e, container.getDataSource());
}
}
@Override @Override
public SQLServerTable createTableImpl(GenericStructContainer container, String tableName, String tableType, JDBCResultSet dbResult) { public SQLServerTable createTableImpl(GenericStructContainer container, String tableName, String tableType, JDBCResultSet dbResult) {
return new SQLServerTable(container, tableName, tableType, dbResult); return new SQLServerTable(container, tableName, tableType, dbResult);
......
/*
* DBeaver - Universal Database Manager
* Copyright (C) 2010-2018 Serge Rider (serge@jkiss.org)
*
* 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.model;
import org.jkiss.dbeaver.DBException;
import org.jkiss.dbeaver.Log;
import org.jkiss.dbeaver.ext.generic.model.GenericCatalog;
import org.jkiss.dbeaver.ext.generic.model.GenericSchema;
import org.jkiss.dbeaver.ext.generic.model.GenericStructContainer;
import org.jkiss.dbeaver.ext.generic.model.GenericSynonym;
import org.jkiss.dbeaver.model.DBPEvaluationContext;
import org.jkiss.dbeaver.model.DBPQualifiedObject;
import org.jkiss.dbeaver.model.DBUtils;
import org.jkiss.dbeaver.model.meta.Property;
import org.jkiss.dbeaver.model.runtime.DBRProgressMonitor;
import org.jkiss.dbeaver.model.struct.DBSObject;
/**
* SQL server synonym
*/
public class SQLServerSynonym extends GenericSynonym implements DBPQualifiedObject {
private static final Log log = Log.getLog(SQLServerSynonym.class);
private String targetObjectName;
public SQLServerSynonym(GenericStructContainer container, String name, String description, String targetObjectName) {
super(container, name, description);
this.targetObjectName = targetObjectName;
}
@Override
public String getFullyQualifiedName(DBPEvaluationContext context) {
return DBUtils.getFullQualifiedName(
getDataSource(),
getParentObject(),
this);
}
@Property(viewable = true, order = 20)
@Override
public DBSObject getTargetObject(DBRProgressMonitor monitor) throws DBException {
int divPos = targetObjectName.indexOf("].[");
if (divPos == -1) {
log.debug("Bad target object name '" + targetObjectName + "' for synonym '" + getName() + "'");
return null;
}
String schemaName = DBUtils.getUnQuotedIdentifier(getDataSource(), targetObjectName.substring(0, divPos + 1));
String objectName = DBUtils.getUnQuotedIdentifier(getDataSource(), targetObjectName.substring(divPos + 2));
GenericCatalog database = getParentObject().getCatalog();
GenericSchema schema = database.getSchema(monitor, schemaName);
if (schema == null) {
log.debug("Schema '" + schemaName + "' not found for synonym '" + getName() + "'");
return null;
}
return schema.getChild(monitor, objectName);
}
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册