diff --git a/plugins/org.jkiss.dbeaver.ext.db2/src/org/jkiss/dbeaver/ext/db2/model/DB2DataSourceInfo.java b/plugins/org.jkiss.dbeaver.ext.db2/src/org/jkiss/dbeaver/ext/db2/model/DB2DataSourceInfo.java index f6647303e55d1f44f11c32c8f0eb8293ad19cd4e..8c1c27ace44daa290898de8120752144666aa817 100644 --- a/plugins/org.jkiss.dbeaver.ext.db2/src/org/jkiss/dbeaver/ext/db2/model/DB2DataSourceInfo.java +++ b/plugins/org.jkiss.dbeaver.ext.db2/src/org/jkiss/dbeaver/ext/db2/model/DB2DataSourceInfo.java @@ -17,8 +17,10 @@ package org.jkiss.dbeaver.ext.db2.model; +import org.jkiss.dbeaver.ext.db2.editors.DB2ObjectType; import org.jkiss.dbeaver.model.exec.jdbc.JDBCDatabaseMetaData; import org.jkiss.dbeaver.model.impl.jdbc.JDBCDataSourceInfo; +import org.jkiss.dbeaver.model.struct.DBSObjectType; /** * DB2 data source info @@ -34,4 +36,8 @@ class DB2DataSourceInfo extends JDBCDataSourceInfo { return true; } + @Override + public DBSObjectType[] getSupportedObjectTypes() { + return DB2ObjectType.values(); + } } diff --git a/plugins/org.jkiss.dbeaver.ext.mssql/src/org/jkiss/dbeaver/ext/mssql/model/SQLServerDataSourceInfo.java b/plugins/org.jkiss.dbeaver.ext.mssql/src/org/jkiss/dbeaver/ext/mssql/model/SQLServerDataSourceInfo.java index 021b10100629319385dd7e95ce4fe09a5da6b706..bcd30427d0138443cc79d1edb994df294a25f2c4 100644 --- a/plugins/org.jkiss.dbeaver.ext.mssql/src/org/jkiss/dbeaver/ext/mssql/model/SQLServerDataSourceInfo.java +++ b/plugins/org.jkiss.dbeaver.ext.mssql/src/org/jkiss/dbeaver/ext/mssql/model/SQLServerDataSourceInfo.java @@ -19,6 +19,7 @@ package org.jkiss.dbeaver.ext.mssql.model; import org.jkiss.dbeaver.ext.mssql.SQLServerUtils; import org.jkiss.dbeaver.model.exec.jdbc.JDBCDatabaseMetaData; import org.jkiss.dbeaver.model.impl.jdbc.JDBCDataSourceInfo; +import org.jkiss.dbeaver.model.struct.DBSObjectType; import org.jkiss.utils.CommonUtils; /** @@ -55,4 +56,10 @@ class SQLServerDataSourceInfo extends JDBCDataSourceInfo { String serverVersion = dataSource.getServerVersion(); return CommonUtils.isEmpty(serverVersion) ? super.getDatabaseProductVersion() : super.getDatabaseProductVersion() + "\n" + serverVersion; } + + @Override + public DBSObjectType[] getSupportedObjectTypes() { + return SQLServerObjectType.values(); + } + } diff --git a/plugins/org.jkiss.dbeaver.ext.mssql/src/org/jkiss/dbeaver/ext/mssql/model/SQLServerObjectType.java b/plugins/org.jkiss.dbeaver.ext.mssql/src/org/jkiss/dbeaver/ext/mssql/model/SQLServerObjectType.java index 24eb4e0b053b220ef01aadf235d1fbeeee497bfc..04343c8ce6c30899548c508f1e288aee0bd97ec6 100644 --- a/plugins/org.jkiss.dbeaver.ext.mssql/src/org/jkiss/dbeaver/ext/mssql/model/SQLServerObjectType.java +++ b/plugins/org.jkiss.dbeaver.ext.mssql/src/org/jkiss/dbeaver/ext/mssql/model/SQLServerObjectType.java @@ -54,7 +54,7 @@ public enum SQLServerObjectType implements DBSObjectType { TF ("TF", SQLServerProcedure.class, DBIcon.TREE_FUNCTION, "SQL table-valued-function"), TR ("TR", SQLServerTableTrigger.class, DBIcon.TREE_TRIGGER, "SQL DML trigger"), TT ("TT", null, DBIcon.TREE_DATA_TYPE, "Table type"), - U ("U", SQLServerTable.class, DBIcon.TREE_TABLE, "Table (user-defined)"), + U ("U", SQLServerTable.class, DBIcon.TREE_TABLE, "Table"), UQ ("UQ", SQLServerTableUniqueKey.class, DBIcon.TREE_CONSTRAINT, "UNIQUE constraint"), V ("V", SQLServerView.class, DBIcon.TREE_VIEW, "View"), X ("X", SQLServerProcedure.class, DBIcon.TREE_PROCEDURE, "Extended stored procedure"); diff --git a/plugins/org.jkiss.dbeaver.ext.oracle/src/org/jkiss/dbeaver/ext/oracle/model/OracleDataSource.java b/plugins/org.jkiss.dbeaver.ext.oracle/src/org/jkiss/dbeaver/ext/oracle/model/OracleDataSource.java index 9a46a2bd6d437b58398d037231fb1a246ddc154b..8b899a39b92932b64e7659f3101e7e37c73dae41 100644 --- a/plugins/org.jkiss.dbeaver.ext.oracle/src/org/jkiss/dbeaver/ext/oracle/model/OracleDataSource.java +++ b/plugins/org.jkiss.dbeaver.ext.oracle/src/org/jkiss/dbeaver/ext/oracle/model/OracleDataSource.java @@ -32,7 +32,10 @@ import org.jkiss.dbeaver.model.connection.DBPDriver; import org.jkiss.dbeaver.model.exec.*; import org.jkiss.dbeaver.model.exec.jdbc.*; import org.jkiss.dbeaver.model.exec.plan.DBCQueryPlanner; -import org.jkiss.dbeaver.model.impl.jdbc.*; +import org.jkiss.dbeaver.model.impl.jdbc.JDBCDataSource; +import org.jkiss.dbeaver.model.impl.jdbc.JDBCExecutionContext; +import org.jkiss.dbeaver.model.impl.jdbc.JDBCRemoteInstance; +import org.jkiss.dbeaver.model.impl.jdbc.JDBCUtils; import org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCObjectCache; import org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCStructCache; import org.jkiss.dbeaver.model.meta.Association; @@ -282,7 +285,7 @@ public class OracleDataSource extends JDBCDataSource implements IAdaptable { @Override protected DBPDataSourceInfo createDataSourceInfo(DBRProgressMonitor monitor, @NotNull JDBCDatabaseMetaData metaData) { - return new JDBCDataSourceInfo(metaData); + return new OracleDataSourceInfo(this, metaData); } @Override diff --git a/plugins/org.jkiss.dbeaver.ext.oracle/src/org/jkiss/dbeaver/ext/oracle/model/OracleDataSourceInfo.java b/plugins/org.jkiss.dbeaver.ext.oracle/src/org/jkiss/dbeaver/ext/oracle/model/OracleDataSourceInfo.java new file mode 100644 index 0000000000000000000000000000000000000000..299a303b64bb7d32ead9b8d67ada3c3871909f8b --- /dev/null +++ b/plugins/org.jkiss.dbeaver.ext.oracle/src/org/jkiss/dbeaver/ext/oracle/model/OracleDataSourceInfo.java @@ -0,0 +1,40 @@ +/* + * DBeaver - Universal Database Manager + * Copyright (C) 2010-2019 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.oracle.model; + +import org.jkiss.dbeaver.model.exec.jdbc.JDBCDatabaseMetaData; +import org.jkiss.dbeaver.model.impl.jdbc.JDBCDataSourceInfo; +import org.jkiss.dbeaver.model.struct.DBSObjectType; + +/** + * OracleDataSourceInfo + */ +class OracleDataSourceInfo extends JDBCDataSourceInfo { + + private OracleDataSource dataSource; + + public OracleDataSourceInfo(OracleDataSource dataSource, JDBCDatabaseMetaData metaData) { + super(metaData); + this.dataSource = dataSource; + } + + @Override + public DBSObjectType[] getSupportedObjectTypes() { + return OracleObjectType.values(); + } + +} diff --git a/plugins/org.jkiss.dbeaver.model/src/org/jkiss/dbeaver/model/DBPDataSourceInfo.java b/plugins/org.jkiss.dbeaver.model/src/org/jkiss/dbeaver/model/DBPDataSourceInfo.java index 0ec856e5dda315d3c1034f09d10d5937eead34d2..076f438f33b03e7e9a02c3fffab6c9fe50220ba9 100644 --- a/plugins/org.jkiss.dbeaver.model/src/org/jkiss/dbeaver/model/DBPDataSourceInfo.java +++ b/plugins/org.jkiss.dbeaver.model/src/org/jkiss/dbeaver/model/DBPDataSourceInfo.java @@ -17,6 +17,7 @@ package org.jkiss.dbeaver.model; +import org.jkiss.dbeaver.model.struct.DBSObjectType; import org.osgi.framework.Version; import java.util.Collection; @@ -166,4 +167,6 @@ public interface DBPDataSourceInfo * Workaround for broken drivers (#2792) */ boolean isMultipleResultsFetchBroken(); + + DBSObjectType[] getSupportedObjectTypes(); } diff --git a/plugins/org.jkiss.dbeaver.model/src/org/jkiss/dbeaver/model/DBUtils.java b/plugins/org.jkiss.dbeaver.model/src/org/jkiss/dbeaver/model/DBUtils.java index 0904b589f26bc488bf57a452bdb3016abbdb6b33..f1e655000a3e6e537b070ae9271652eca3ee9828 100644 --- a/plugins/org.jkiss.dbeaver.model/src/org/jkiss/dbeaver/model/DBUtils.java +++ b/plugins/org.jkiss.dbeaver.model/src/org/jkiss/dbeaver/model/DBUtils.java @@ -2034,4 +2034,15 @@ public final class DBUtils { ((DBPQualifiedObject)entity).getFullyQualifiedName(DBPEvaluationContext.DDL) : DBUtils.getQuotedIdentifier(entity); } + public static String getObjectTypeName(DBSObject object) { + DBSObjectType[] objectTypes = object.getDataSource().getInfo().getSupportedObjectTypes(); + for (DBSObjectType ot : objectTypes) { + Class typeClass = ot.getTypeClass(); + if (typeClass != null && typeClass != DBSObject.class && typeClass.isInstance(object)) { + return ot.getTypeName(); + } + } + return "Object"; + } + } diff --git a/plugins/org.jkiss.dbeaver.model/src/org/jkiss/dbeaver/model/impl/AbstractDataSourceInfo.java b/plugins/org.jkiss.dbeaver.model/src/org/jkiss/dbeaver/model/impl/AbstractDataSourceInfo.java index 897b0c571576943b2e42cecc1958ec69963feb53..60d668d8220bad2715a640e2cda873b569419a4c 100644 --- a/plugins/org.jkiss.dbeaver.model/src/org/jkiss/dbeaver/model/impl/AbstractDataSourceInfo.java +++ b/plugins/org.jkiss.dbeaver.model/src/org/jkiss/dbeaver/model/impl/AbstractDataSourceInfo.java @@ -18,6 +18,7 @@ package org.jkiss.dbeaver.model.impl; import org.jkiss.dbeaver.model.DBPDataSourceInfo; import org.jkiss.dbeaver.model.DBPTransactionIsolation; +import org.jkiss.dbeaver.model.struct.DBSObjectType; import java.util.Collection; import java.util.Map; @@ -104,6 +105,11 @@ public abstract class AbstractDataSourceInfo implements DBPDataSourceInfo return false; } + @Override + public DBSObjectType[] getSupportedObjectTypes() { + return new DBSObjectType[0]; + } + @Override public boolean supportsBatchUpdates() { diff --git a/plugins/org.jkiss.dbeaver.model/src/org/jkiss/dbeaver/model/impl/jdbc/JDBCDataSourceInfo.java b/plugins/org.jkiss.dbeaver.model/src/org/jkiss/dbeaver/model/impl/jdbc/JDBCDataSourceInfo.java index d2b00b105da774f184ad6843f4bb818db734de42..ea5103608e397792148856717c15c581253eecc1 100644 --- a/plugins/org.jkiss.dbeaver.model/src/org/jkiss/dbeaver/model/impl/jdbc/JDBCDataSourceInfo.java +++ b/plugins/org.jkiss.dbeaver.model/src/org/jkiss/dbeaver/model/impl/jdbc/JDBCDataSourceInfo.java @@ -21,7 +21,9 @@ import org.jkiss.dbeaver.model.DBPDataSourceContainer; import org.jkiss.dbeaver.model.DBPTransactionIsolation; import org.jkiss.dbeaver.model.exec.jdbc.JDBCDatabaseMetaData; import org.jkiss.dbeaver.model.impl.AbstractDataSourceInfo; +import org.jkiss.dbeaver.model.impl.struct.RelationalObjectType; import org.jkiss.dbeaver.model.messages.ModelMessages; +import org.jkiss.dbeaver.model.struct.DBSObjectType; import org.jkiss.utils.CommonUtils; import org.osgi.framework.Version; @@ -326,6 +328,22 @@ public class JDBCDataSourceInfo extends AbstractDataSourceInfo return false; } + @Override + public DBSObjectType[] getSupportedObjectTypes() { + return new DBSObjectType[] { + RelationalObjectType.TYPE_TABLE, + RelationalObjectType.TYPE_VIEW, + RelationalObjectType.TYPE_TABLE_COLUMN, + RelationalObjectType.TYPE_VIEW_COLUMN, + RelationalObjectType.TYPE_INDEX, + RelationalObjectType.TYPE_CONSTRAINT, + RelationalObjectType.TYPE_PROCEDURE, + RelationalObjectType.TYPE_SEQUENCE, + RelationalObjectType.TYPE_TRIGGER, + RelationalObjectType.TYPE_DATA_TYPE + }; + } + public void setSupportsResultSetScroll(boolean supportsScroll) { this.supportsScroll = supportsScroll; diff --git a/plugins/org.jkiss.dbeaver.model/src/org/jkiss/dbeaver/model/impl/sql/edit/SQLObjectEditor.java b/plugins/org.jkiss.dbeaver.model/src/org/jkiss/dbeaver/model/impl/sql/edit/SQLObjectEditor.java index 747d19bbd895240ab271f91ca195566b6daa610b..66a10b479d824eedba9bff4b9238de23d513e383 100644 --- a/plugins/org.jkiss.dbeaver.model/src/org/jkiss/dbeaver/model/impl/sql/edit/SQLObjectEditor.java +++ b/plugins/org.jkiss.dbeaver.model/src/org/jkiss/dbeaver/model/impl/sql/edit/SQLObjectEditor.java @@ -330,13 +330,13 @@ public abstract class SQLObjectEditor objectsCache = getObjectsCache(newObject); if (objectsCache != null) { OBJECT_TYPE cachedObject = DBUtils.findObject(objectsCache.getCachedObjects(), objectName); if (cachedObject != null && cachedObject != newObject) { - throw new DBException("Object '" + objectName + "' already exists"); + throw new DBException(DBUtils.getObjectTypeName(newObject) + " '" + objectName + "' already exists"); } } }