From abda4fd7dfc7c590ff7fc9b344cd5c4f503abb34 Mon Sep 17 00:00:00 2001
From: npedot <nicola.pedot@gmail.com>
Date: Fri, 11 Dec 2020 11:33:59 +0100
Subject: [PATCH] adds drop constraints via changeset by table name

---
 .../unibz.cs.semint.kprime/domain/ddl/Schema.kt      | 12 +++++++++++-
 .../domain/dml/DropConstraint.kt                     |  6 +++---
 .../usecase/common/ApplyChangeSetUseCase.kt          | 11 ++++++++---
 3 files changed, 22 insertions(+), 7 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 b6563cf..2778d20 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
@@ -41,7 +41,17 @@ class Schema () {
 
     fun constraint(name: String): Constraint? {
         if (constraints().isEmpty()) return null
-        return constraints().filter { c -> c.name==name}.firstOrNull()
+        return constraints().filter { c -> c.name==name }.firstOrNull()
+    }
+
+    fun constraintById(id: String): Constraint? {
+        if (constraints().isEmpty()) return null
+        return constraints().filter { c -> c.id==id }.firstOrNull()
+    }
+
+    fun constraintByTable(name: String): Constraint? {
+        if (constraints().isEmpty()) return null
+        return constraints().filter { c -> c.source.table==name || c.target.table==name }.firstOrNull()
     }
 
     fun keys(tableName: String): List<Constraint> {
diff --git a/src/main/kotlin/unibz.cs.semint.kprime/domain/dml/DropConstraint.kt b/src/main/kotlin/unibz.cs.semint.kprime/domain/dml/DropConstraint.kt
index 9878908..f8be907 100644
--- a/src/main/kotlin/unibz.cs.semint.kprime/domain/dml/DropConstraint.kt
+++ b/src/main/kotlin/unibz.cs.semint.kprime/domain/dml/DropConstraint.kt
@@ -23,15 +23,15 @@ class DropConstraint() {
         this.schemaName = schemaName
     }
 
-    infix fun   name(constraintName: String) = apply {
+    infix fun name(constraintName: String) = apply {
         this.constraintName = constraintName
     }
 
-    infix fun type(type:String) {
+    infix fun type(type:String) = apply {
         this.type = type
     }
 
-    infix fun table(table:String) {
+    infix fun table(table:String) = apply {
         this.tableName = table
     }
 }
\ No newline at end of file
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 8c3b4ec..a13982a 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
@@ -113,14 +113,19 @@ class ApplyChangeSetUseCase(val serializer: SerializerServiceI) {
 
     fun dropConstraint(db:Database, dropConstraint: DropConstraint):Database {
         if (db.schema.constraints().isEmpty()) return db
-        val c = db.schema.constraint(dropConstraint.constraintName)
-                .let { it ->  if(it !=null) db.schema.constraints().remove(it)}
+        if (dropConstraint.tableName.isNotEmpty()) {
+            db.schema.constraintByTable(dropConstraint.tableName)
+                    .let { it -> if (it != null) db.schema.constraints().remove(it) }
+        } else {
+            db.schema.constraint(dropConstraint.constraintName)
+                    .let { it -> if (it != null) db.schema.constraints().remove(it) }
+        }
         return db
     }
 
     fun dropMapping(db:Database, dropMapping: DropMapping):Database {
         if (db.mappings == null || db.mappings!!.isEmpty()) return db
-        val c = db.mapping(dropMapping.name)
+        db.mapping(dropMapping.name)
                 .let { it ->  if(it !=null) db.mappings!!.remove(it)}
         return db
     }
-- 
GitLab