From 71db73a7b270bc6c08fba3ed95651355afc94731 Mon Sep 17 00:00:00 2001 From: Serge Rider Date: Fri, 13 Jan 2017 20:38:14 +0300 Subject: [PATCH] #1070 Generic DDL fix (exclude unique constraints' indexes) --- .../ext/generic/edit/GenericTableManager.java | 26 +++++++++++++++++++ .../impl/sql/edit/struct/SQLTableManager.java | 18 +++++++++---- 2 files changed, 39 insertions(+), 5 deletions(-) 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 15a75545ef..925c88408b 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 acc38b9ba4..a8b52eecf3 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) { -- GitLab