From 74c62d66e20d37d3981f1eb60dd9741dca4283a9 Mon Sep 17 00:00:00 2001
From: npedot <nicola.pedot@gmail.com>
Date: Wed, 1 Apr 2020 15:13:14 +0200
Subject: [PATCH] adds contraint remove with table remove, and apply change use
 schema exposed methods dropTable

---
 .../unibz.cs.semint.kprime/domain/ddl/Schema.kt      | 12 ++++++++++--
 .../usecase/common/ApplyChangeSetUseCase.kt          |  6 ++++--
 2 files changed, 14 insertions(+), 4 deletions(-)

diff --git a/src/main/kotlin/unibz.cs.semint.kprime/domain/ddl/Schema.kt b/src/main/kotlin/unibz.cs.semint.kprime/domain/ddl/Schema.kt
index aa729b7..0264fcf 100644
--- a/src/main/kotlin/unibz.cs.semint.kprime/domain/ddl/Schema.kt
+++ b/src/main/kotlin/unibz.cs.semint.kprime/domain/ddl/Schema.kt
@@ -123,8 +123,16 @@ class Schema () {
     fun dropTable(commandArgs:String) : Schema {
         var tableNames = commandArgs.split(" ")
         for (tableName  in tableNames) {
-            var table = table(tableName)
-            tables().remove(table)
+            val t= table(tableName)
+            if (t!=null){ tables().remove(t)}
+            val toRemove = mutableListOf<Constraint>()
+            for (constr in constraints()) {
+                if (constr.source.table.equals(tableName))
+                    toRemove.add(constr)
+                if (constr.target.table.equals(tableName))
+                    toRemove.add(constr)
+            }
+            constraints().removeAll(toRemove)
         }
         return this
     }
diff --git a/src/main/kotlin/unibz.cs.semint.kprime/usecase/common/ApplyChangeSetUseCase.kt b/src/main/kotlin/unibz.cs.semint.kprime/usecase/common/ApplyChangeSetUseCase.kt
index 8da7828..c2bf04e 100644
--- a/src/main/kotlin/unibz.cs.semint.kprime/usecase/common/ApplyChangeSetUseCase.kt
+++ b/src/main/kotlin/unibz.cs.semint.kprime/usecase/common/ApplyChangeSetUseCase.kt
@@ -1,5 +1,6 @@
 package unibz.cs.semint.kprime.usecase.common
 
+import unibz.cs.semint.kprime.domain.ddl.Constraint
 import unibz.cs.semint.kprime.domain.ddl.Database
 import unibz.cs.semint.kprime.domain.dml.*
 import unibz.cs.semint.kprime.usecase.service.IXMLSerializerService
@@ -32,15 +33,16 @@ class ApplyChangeSetUseCase(serializer : IXMLSerializerService) {
         db.schema.tables().add(createTable)
         return db
     }
+
     fun createConstraint(db:Database, createConstraint: CreateConstraint): Database {
         db.schema.constraints().add(createConstraint)
         return db
     }
+
     fun dropTable(db:Database, dropTable: DropTable):Database {
         if (db.schema.tables().isEmpty()) return db
         if (db.schema==null) return db
-        val t= db.schema.table(dropTable.tableName)
-        if (t!=null){ db.schema.tables().remove(t)}
+        db.schema.dropTable(dropTable.tableName)
         return db
     }
 
-- 
GitLab