diff --git a/designs/database/plugins/org.obeonetwork.dsl.database.design/src/org/obeonetwork/dsl/database/design/services/DatabaseServices.java b/designs/database/plugins/org.obeonetwork.dsl.database.design/src/org/obeonetwork/dsl/database/design/services/DatabaseServices.java index f40fd4979..aab92bddb 100644 --- a/designs/database/plugins/org.obeonetwork.dsl.database.design/src/org/obeonetwork/dsl/database/design/services/DatabaseServices.java +++ b/designs/database/plugins/org.obeonetwork.dsl.database.design/src/org/obeonetwork/dsl/database/design/services/DatabaseServices.java @@ -18,7 +18,6 @@ import java.util.Collections; import java.util.Comparator; import java.util.HashSet; -import java.util.Iterator; import java.util.List; import java.util.Objects; import java.util.Optional; @@ -50,8 +49,9 @@ import org.obeonetwork.dsl.database.DatabasePackage; import org.obeonetwork.dsl.database.ForeignKey; import org.obeonetwork.dsl.database.ForeignKeyElement; +import org.obeonetwork.dsl.database.Index; +import org.obeonetwork.dsl.database.IndexElement; import org.obeonetwork.dsl.database.NamedElement; -import org.obeonetwork.dsl.database.Schema; import org.obeonetwork.dsl.database.Sequence; import org.obeonetwork.dsl.database.Table; import org.obeonetwork.dsl.database.TableContainer; @@ -142,9 +142,25 @@ public ForeignKey setForeignKeyTarget(ForeignKey fk, Table target) { public void pasteTableToTableContainer(TableContainer tableContainer, Table copiedTable) { databaseGenericCopy(tableContainer, copiedTable); if (isTableFromOtherDatabaseType(copiedTable, tableContainer)) { + + //clean type of columns for (Column column : (copiedTable).getColumns()) { ((TypeInstance) column.getType()).setNativeType(null); } + + //remove indexes and associated columns that match with foreign key + List indexesToDelete = new ArrayList<>(); + for (Index index : copiedTable.getIndexes()) { + if ( copiedTable.getForeignKeys().stream().map(NamedElement::getName) + .anyMatch(fkName -> fkName.equals(index.getName()))) { + copiedTable.getColumns().removeAll(index.getElements().stream().map(IndexElement::getColumn).toList()); + indexesToDelete.add(index); + } + } + copiedTable.getIndexes().removeAll(indexesToDelete); + + //clean all foreign keys + copiedTable.getForeignKeys().clear(); } }