From dabe9b9bb03e5f4d582992c9f4a25a8bbdbe908a Mon Sep 17 00:00:00 2001
From: npedot <nicola.pedot@gmail.com>
Date: Mon, 16 Nov 2020 15:18:37 +0100
Subject: [PATCH] adds multivalued dependency to schema

---
 .../domain/ddl/Constraint.kt                   |  1 +
 .../domain/ddl/Schema.kt                       | 18 ++++++++++++++++++
 2 files changed, 19 insertions(+)

diff --git a/src/main/kotlin/unibz.cs.semint.kprime/domain/ddl/Constraint.kt b/src/main/kotlin/unibz.cs.semint.kprime/domain/ddl/Constraint.kt
index 2358dba..bdb8639 100644
--- a/src/main/kotlin/unibz.cs.semint.kprime/domain/ddl/Constraint.kt
+++ b/src/main/kotlin/unibz.cs.semint.kprime/domain/ddl/Constraint.kt
@@ -24,6 +24,7 @@ class Constraint(): Labelled {
         CANDIDATE_KEY,
         SURROGATE_KEY,
         FUNCTIONAL,
+        MULTIVALUED,
         DOUBLE_INCLUSION,
         INCLUSION,
         PARTITION,
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 ac679a1..03ade1b 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
@@ -132,6 +132,12 @@ class Schema () {
         return addFunctional(tableName,setExpression)
     }
 
+    fun addMultivalued(commandArgs:String): Schema {
+        val tableName:String = commandArgs.split(":")[0]
+        val setExpression: String= commandArgs.split(":")[1]
+        return addMultivalued(tableName,setExpression)
+    }
+
     fun addTable(commandArgs:String) : Schema {
         val table = SchemaCmdParser.parseTable(commandArgs)
         tables().add(table)
@@ -176,6 +182,18 @@ class Schema () {
         return this
     }
 
+    fun addMultivalued(tableName:String, setExpression: String): Schema {
+        val constraintsToAdd = Constraint.set(setExpression)
+        for (constraint in constraintsToAdd) {
+            constraint.name=tableName+".multivalued"
+            constraint.type=Constraint.TYPE.MULTIVALUED.name
+            constraint.source.table=tableName
+            constraint.target.table=tableName
+        }
+        constraints().addAll(constraintsToAdd)
+        return this
+    }
+
     fun addKey(commandArgs:String):Schema {
         val tableName:String = commandArgs.split(":")[0]
         val attributeNames = commandArgs.split(":")[1]
-- 
GitLab