diff --git a/plugins/org.jkiss.dbeaver.ext.generic/src/org/jkiss/dbeaver/ext/generic/edit/GenericTableManager.java b/plugins/org.jkiss.dbeaver.ext.generic/src/org/jkiss/dbeaver/ext/generic/edit/GenericTableManager.java index 15a75545ef4fa89b5f25870f9692d471a3faacdf..925c88408b6ffd62e25ff01393ee80b32399b9c1 100644 --- a/plugins/org.jkiss.dbeaver.ext.generic/src/org/jkiss/dbeaver/ext/generic/edit/GenericTableManager.java +++ b/plugins/org.jkiss.dbeaver.ext.generic/src/org/jkiss/dbeaver/ext/generic/edit/GenericTableManager.java @@ -21,11 +21,18 @@ import org.jkiss.code.NotNull; import org.jkiss.code.Nullable; import org.jkiss.dbeaver.DBException; import org.jkiss.dbeaver.ext.generic.model.*; +import org.jkiss.dbeaver.model.DBPObject; import org.jkiss.dbeaver.model.edit.DBECommandContext; import org.jkiss.dbeaver.model.impl.DBSObjectCache; +import org.jkiss.dbeaver.model.impl.sql.edit.SQLObjectEditor; import org.jkiss.dbeaver.model.impl.sql.edit.struct.SQLTableManager; import org.jkiss.dbeaver.model.runtime.DBRProgressMonitor; +import org.jkiss.dbeaver.model.struct.DBSEntityConstraint; import org.jkiss.dbeaver.model.struct.DBSObject; +import org.jkiss.dbeaver.model.struct.rdb.DBSTableIndex; +import org.jkiss.utils.CommonUtils; + +import java.util.Collection; /** * Generic table manager @@ -66,4 +73,23 @@ public class GenericTableManager extends SQLTableManager orderedCommands) { + // Filter out indexes for unique constraints (if they have the same name) + DBPObject object = command.getObject(); + if (object instanceof DBSTableIndex) { + for (NestedObjectCommand ccom : orderedCommands) { + if (ccom.getObject() instanceof DBSEntityConstraint && + ccom.getObject() != object && + ((DBSEntityConstraint) ccom.getObject()).getConstraintType().isUnique() && + CommonUtils.equalObjects( + ((DBSTableIndex) object).getName(), ((DBSEntityConstraint) ccom.getObject()).getName())) + { + return true; + } + } + } + return false; + } + } diff --git a/plugins/org.jkiss.dbeaver.model/src/org/jkiss/dbeaver/model/impl/sql/edit/struct/SQLTableManager.java b/plugins/org.jkiss.dbeaver.model/src/org/jkiss/dbeaver/model/impl/sql/edit/struct/SQLTableManager.java index acc38b9ba479a52d25e1afd900aee6c345148c2d..a8b52eecf3648b2f9064c8da2dfbc736e185acc6 100644 --- a/plugins/org.jkiss.dbeaver.model/src/org/jkiss/dbeaver/model/impl/sql/edit/struct/SQLTableManager.java +++ b/plugins/org.jkiss.dbeaver.model/src/org/jkiss/dbeaver/model/impl/sql/edit/struct/SQLTableManager.java @@ -19,6 +19,7 @@ package org.jkiss.dbeaver.model.impl.sql.edit.struct; import org.jkiss.dbeaver.DBException; import org.jkiss.dbeaver.model.DBPEvaluationContext; +import org.jkiss.dbeaver.model.DBPObject; import org.jkiss.dbeaver.model.DBUtils; import org.jkiss.dbeaver.model.edit.DBEPersistAction; import org.jkiss.dbeaver.model.edit.DBERegistry; @@ -29,16 +30,15 @@ import org.jkiss.dbeaver.model.impl.sql.edit.SQLObjectEditor; import org.jkiss.dbeaver.model.impl.sql.edit.SQLStructEditor; import org.jkiss.dbeaver.model.messages.ModelMessages; import org.jkiss.dbeaver.model.runtime.DBRProgressMonitor; -import org.jkiss.dbeaver.model.struct.DBSEntityAssociation; -import org.jkiss.dbeaver.model.struct.DBSEntityAttribute; -import org.jkiss.dbeaver.model.struct.DBSObject; -import org.jkiss.dbeaver.model.struct.DBSObjectContainer; +import org.jkiss.dbeaver.model.runtime.VoidProgressMonitor; +import org.jkiss.dbeaver.model.struct.*; import org.jkiss.dbeaver.model.struct.rdb.DBSTableConstraint; import org.jkiss.dbeaver.model.struct.rdb.DBSTableForeignKey; import org.jkiss.dbeaver.model.struct.rdb.DBSTableIndex; import org.jkiss.dbeaver.utils.GeneralUtils; import org.jkiss.utils.CommonUtils; +import java.util.Collection; import java.util.Collections; import java.util.List; @@ -78,10 +78,14 @@ public abstract class SQLTableManager orderedCommands = getNestedOrderedCommands(command); + for (NestedObjectCommand nestedCommand : orderedCommands) { if (nestedCommand.getObject() == table) { continue; } + if (excludeFromDDL(nestedCommand, orderedCommands)) { + continue; + } final String nestedDeclaration = nestedCommand.getNestedDeclaration(table); if (!CommonUtils.isEmpty(nestedDeclaration)) { // Insert nested declaration @@ -105,6 +109,10 @@ public abstract class SQLTableManager orderedCommands) { + return false; + } + @Override protected void addObjectDeleteActions(List actions, ObjectDeleteCommand command) {