From a50cb54ab53c1bc52e85b0fcbd83fbf551d01eaa Mon Sep 17 00:00:00 2001 From: Vincent BOUSSAUD Date: Tue, 13 Jan 2026 15:38:11 +0100 Subject: [PATCH 1/3] [SAFRAN-1259] Clear foreign keys while copying table from other type db --- .../dsl/database/design/services/DatabaseServices.java | 1 + 1 file changed, 1 insertion(+) 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..769bdb0ad 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 @@ -145,6 +145,7 @@ public void pasteTableToTableContainer(TableContainer tableContainer, Table copi for (Column column : (copiedTable).getColumns()) { ((TypeInstance) column.getType()).setNativeType(null); } + copiedTable.getForeignKeys().clear(); } } From 83010f0e5bb48a68a97f46c37309843bb2a2086e Mon Sep 17 00:00:00 2001 From: Vincent BOUSSAUD Date: Wed, 14 Jan 2026 15:18:58 +0100 Subject: [PATCH 2/3] [SAFRAN-1259] Clean index link to foreign key add comments in code --- .../dsl/database/design/services/DatabaseServices.java | 5 +++++ 1 file changed, 5 insertions(+) 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 769bdb0ad..f567c606d 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 @@ -142,9 +142,14 @@ 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 that match with foreign key + copiedTable.getIndexes().removeIf(index -> copiedTable.getForeignKeys().stream().map(NamedElement::getName) + .anyMatch(fkName -> fkName.equals(index.getName()))); + //clean all foreign keys copiedTable.getForeignKeys().clear(); } } From 15e7b79660045d18c792aef5b312a2960157ca0e Mon Sep 17 00:00:00 2001 From: Vincent BOUSSAUD Date: Thu, 15 Jan 2026 13:44:10 +0100 Subject: [PATCH 3/3] [SAFRAN-1259] Remove column of foreign keys --- .../design/services/DatabaseServices.java | 20 ++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) 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 f567c606d..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,13 +142,23 @@ 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 that match with foreign key - copiedTable.getIndexes().removeIf(index -> copiedTable.getForeignKeys().stream().map(NamedElement::getName) - .anyMatch(fkName -> fkName.equals(index.getName()))); + + //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(); }