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

adds liquibase dependency, create column to changeset, table catalog and schema fields

parent 51c4e98f
No related branches found
No related tags found
No related merge requests found
Showing
with 177 additions and 8 deletions
......@@ -82,6 +82,12 @@
<artifactId>freemarker</artifactId>
<version>2.3.29</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.liquibase/liquibase-core -->
<dependency>
<groupId>org.liquibase</groupId>
<artifactId>liquibase-core</artifactId>
<version>4.1.1</version>
</dependency>
<!-- test -->
......
......@@ -110,6 +110,27 @@ class QueryJdbcAdapter {
return result
}
fun available(datasource: DataSource):Boolean {
val source = datasource
val user = source.user
val pass = source.pass
val path = source.path
try {
val connectionProps = Properties()
connectionProps.put("user", user)
connectionProps.put("password", pass)
println("Looking for driver [${source.driver}] for connection [$path] with user [$user].")
Class.forName(source.driver).newInstance()
val conn = DriverManager.getConnection(
path, connectionProps)
val schema = conn.schema
conn.close()
} catch (ex: Exception) {
return false
}
return true
}
fun create(datasource: DataSource, sqlcreate: String) {
val source = datasource
val user = source.user
......
......@@ -26,6 +26,12 @@ class Table (): Labelled {
@JacksonXmlProperty(isAttribute = true)
var labels: String? = null
@JacksonXmlProperty(isAttribute = true)
var catalog: String? = null
@JacksonXmlProperty(isAttribute = true)
var schema: String? = null
private var labeller = Labeller()
fun hasColumn(nameToFind:String): Boolean {
......
......@@ -33,6 +33,9 @@ class ChangeSet() {
@JacksonXmlElementWrapper(useWrapping=false)
var createTable= ArrayList<CreateTable>()
@JacksonXmlElementWrapper(useWrapping = false)
var createColumn= ArrayList<CreateColumn>()
@JacksonXmlElementWrapper(useWrapping=false)
var createConstraint= ArrayList<CreateConstraint>()
......@@ -45,6 +48,9 @@ class ChangeSet() {
@JacksonXmlElementWrapper(useWrapping=false)
var dropTable= ArrayList<DropTable>()
@JacksonXmlElementWrapper(useWrapping = false)
var dropColumn = ArrayList<DropColumn>()
@JacksonXmlElementWrapper(useWrapping=false)
var dropConstraint= ArrayList<DropConstraint>()
......
package unibz.cs.semint.kprime.domain.dml
import unibz.cs.semint.kprime.domain.ddl.Table
typealias CreateColumn = Table
\ No newline at end of file
package unibz.cs.semint.kprime.domain.dml
import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty
class DropColumn {
@JacksonXmlProperty(isAttribute = true)
var name :String = ""
}
\ No newline at end of file
......@@ -7,6 +7,8 @@ import unibz.cs.semint.kprime.domain.ddl.Database
@JacksonXmlRootElement(localName = "query")
class Query {
@JacksonXmlProperty(isAttribute = true)
var id = ""
@JacksonXmlProperty(isAttribute = true)
var name = ""
var select = Select()
......
package unibz.cs.semint.kprime.usecase.common
import liquibase.database.core.H2Database
import liquibase.sqlgenerator.SqlGenerator
import liquibase.sqlgenerator.SqlGeneratorChain
import liquibase.sqlgenerator.core.AddColumnGenerator
import liquibase.statement.NotNullConstraint
import liquibase.statement.SqlStatement
import liquibase.statement.core.AddColumnStatement
import unibz.cs.semint.kprime.domain.ddl.Constraint
import unibz.cs.semint.kprime.domain.ddl.Database
import unibz.cs.semint.kprime.domain.dml.ChangeSet
import unibz.cs.semint.kprime.domain.dml.CreateConstraint
import unibz.cs.semint.kprime.domain.dml.CreateTable
import unibz.cs.semint.kprime.domain.dml.CreateView
import unibz.cs.semint.kprime.domain.dml.*
import unibz.cs.semint.kprime.domain.dql.*
import java.util.*
class SQLizeCreateUseCase {
......@@ -40,9 +45,30 @@ class SQLizeCreateUseCase {
commands.add(createViewCommand(createMapping))
for (createConstraint in changeset.createConstraint)
commands.add(createConstraintCommand(createConstraint))
for (creatColumn in changeset.createColumn)
commands.addAll(creatColumnCommands(creatColumn))
return commands
}
class TreeSetSqlGeneratorChain: SqlGeneratorChain<SqlStatement>(TreeSet<SqlGenerator<SqlStatement>>()) {}
private fun creatColumnCommands(createTableColumn: CreateColumn): List<String> {
val addColumns = createTableColumn.columns.map {
col -> AddColumnStatement(createTableColumn.catalog,
createTableColumn.schema,
createTableColumn.name,
col.name,
col.type?:"varchar",
null,
NotNullConstraint())}
val addColumnsStatement = AddColumnStatement(addColumns)
val generateSql = AddColumnGenerator().generateSql(
addColumnsStatement,
H2Database(),
TreeSetSqlGeneratorChain())
return generateSql.map { gs -> gs.toSql() }
}
private fun createConstraintCommand(createConstraint: CreateConstraint):String {
when (createConstraint.type) {
Constraint.TYPE.PRIMARY_KEY.name -> { return createPrimaryKey(createConstraint)}
......
......@@ -44,7 +44,7 @@ class QueryTest {
var queryXml = XMLSerializerJacksonAdapter().prettyQuery(query) as String
// then
assertEquals("""
<query name="">
<query id="" name="">
<select>
<attributes>
<attributes name="Name"/>
......@@ -175,7 +175,7 @@ class QueryTest {
var queryXml = XMLSerializerJacksonAdapter().prettyQuery(query) as String
// then
assertEquals("""
<query name="">
<query id="" name="">
<select>
<attributes>
<attributes name="Name"/>
......
package unibz.cs.semint.kprime.support
import liquibase.change.AddColumnConfig
import liquibase.change.core.AddColumnChange
import liquibase.database.core.H2Database
import liquibase.database.core.MockDatabase
import liquibase.sqlgenerator.SqlGenerator
import liquibase.sqlgenerator.SqlGeneratorChain
import liquibase.sqlgenerator.core.AddColumnGenerator
import liquibase.statement.AutoIncrementConstraint
import liquibase.statement.NotNullConstraint
import liquibase.statement.SqlStatement
import liquibase.statement.core.AddColumnStatement
import org.junit.Test
import java.util.*
class LiquibaseTI {
class MockSqlGeneratorChain: SqlGeneratorChain<SqlStatement>(TreeSet<SqlGenerator<SqlStatement>>()) {
}
@Test
fun test_change_sql() {
val addColChange = AddColumnChange()
val addColumnConfig = AddColumnConfig()
addColumnConfig.name = "column1"
addColumnConfig.type = "int"
addColChange.addColumn(addColumnConfig)
val statements = addColChange.generateStatements(MockDatabase())
for (sqlStat in statements) {
println(sqlStat.toString())
}
val addCol1 = AddColumnStatement(null, null, "table1", "column1", "INT", null, NotNullConstraint(),AutoIncrementConstraint())
val addCol2 = AddColumnStatement(null, null, "table1", "column2", "INT", null, NotNullConstraint())
val addStatements = AddColumnStatement(addCol1,addCol2)
val generateSql = AddColumnGenerator().generateSql(
addStatements,
H2Database(),
MockSqlGeneratorChain())
for (sqlStat in generateSql) {
println(sqlStat.toSql())
}
}
}
\ No newline at end of file
package unibz.cs.semint.kprime.usecase
import org.junit.Test
import unibz.cs.semint.kprime.domain.ddl.Column
import unibz.cs.semint.kprime.domain.ddl.Table
import unibz.cs.semint.kprime.domain.dml.ChangeSet
import unibz.cs.semint.kprime.domain.dml.CreateColumn
import unibz.cs.semint.kprime.usecase.common.SQLizeCreateUseCase
import java.util.*
import kotlin.test.assertEquals
class SQLizeCreateUseCaseTest {
@Test
fun test_add_columns() {
// given
val sqlize = SQLizeCreateUseCase()
val changeSet = ChangeSet()
val columnsToAdd = CreateColumn()
columnsToAdd.name = "table1"
columnsToAdd.columns.add(Column(name="col1",id="id1",dbname = "dbname1"))
columnsToAdd.columns.add(Column(name="col2",id="id1",dbname = "dbname1"))
val createColumns = ArrayList<CreateColumn>()
createColumns.add(columnsToAdd)
changeSet.createColumn = createColumns
// when
val createCommands = sqlize.createCommands(changeSet)
// then
assertEquals(2,createCommands.size)
assertEquals("ALTER TABLE table1 ADD col1 VARCHAR NOT NULL",
createCommands[0])
assertEquals("ALTER TABLE table1 ADD col2 VARCHAR NOT NULL",
createCommands[1])
}
}
\ No newline at end of file
......@@ -71,7 +71,7 @@ class XMLSerializerChangeSetTest {
assertEquals("""
<changeSet id="">
<createView path="" schemaName="" viewName="">select * from table</createView>
<createMapping name="film1">
<createMapping id="" name="film1">
<select>
<attributes>
<attributes name="Name"/>
......
......@@ -74,7 +74,7 @@ class XMLSerializerDatabaseTest {
<constraints/>
</schema>
<mappings>
<query name="query1">
<query id="" name="query1">
<select>
<attributes>
<attributes name="name"/>
......
......@@ -43,6 +43,8 @@ class YAMLSerializerDatabaseTest {
parent: null
columns: []
labels: null
catalog: null
schema: null
- name: ""
id: ""
view: ""
......@@ -50,6 +52,8 @@ class YAMLSerializerDatabaseTest {
parent: null
columns: []
labels: null
catalog: null
schema: null
constraints: []
mappings: []
source: ""
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment