Skip to content
Snippets Groups Projects
Commit dd968c1b authored by npedot's avatar npedot
Browse files

adds first version of oids schema algo

parent 0f4f8fc8
No related branches found
No related tags found
No related merge requests found
......@@ -8,9 +8,12 @@ fun oid(schema: Schema, originTableName: String): List<String> {
val originTable = schema.table(originTableName)
val originTableKey = schema.key(originTableName)
// adds one column autoincrement
sqlCommands.add("ALTER TABLE $originTableName ADD COLUMN sid int NOT NULL auto_increment UNIQUE")
// create a key-table with projection of oid and pk
// search ftables with foreign keys as pk
val keyCols = originTableKey.map { c -> c.name }.joinToString(",")
sqlCommands.add("CREATE TABLE SKEY$originTableName AS SELECT sid,$keyCols FROM $originTableName")
sqlCommands.add("ALTER TABLE $originTableName DROP COLUMN $keyCols")
// search ftables with foreign keys od double-inc as pk
// for each ftable adds one column oid with join with corresponding to fkey values
// replace pk origin-table
// replace fks to new surrogate id column
......
......@@ -3,6 +3,7 @@ package unibz.cs.semint.kprime.domain.schemalgo
import org.junit.Test
import unibz.cs.semint.kprime.domain.ddl.Schema
import unibz.cs.semint.kprime.domain.ddl.schemalgo.oid
import kotlin.test.assertEquals
class OidsTest {
......@@ -10,8 +11,14 @@ class OidsTest {
fun test_oid_addition_single_table() {
// given
val schema = Schema()
val originTableName = ""
schema.addTable("person:name,surname,address")
schema.addKey("person:name,surname")
val originTableName = "person"
// when
oid(schema,originTableName)
val sqlCommands = oid(schema, originTableName)
// then
assertEquals("ALTER TABLE person ADD COLUMN sid int NOT NULL auto_increment UNIQUE",sqlCommands[0])
assertEquals("CREATE TABLE SKEYperson AS SELECT sid,surname,name FROM person",sqlCommands[1])
assertEquals("ALTER TABLE person DROP COLUMN surname,name",sqlCommands[2])
}
}
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment