Выполнение выбора в CustomTaskChange? - PullRequest
0 голосов
/ 26 сентября 2018

В liquibase я пытаюсь использовать CustomTaskChange для выполнения «сложной» миграции данных.

Псевдокод будет выглядеть следующим образом:

class ChangeSet031 : CustomTaskChange {
    @Throws(CustomChangeException::class)
    override fun execute(database: Database) {
       val rows = database.select("select * from mytable")
       rows.forEach { row -> 
           val content = parseJson(row.mycolumn)
           val sql = "insert into mynewtable (col1, col2) values (?, ?)"
           database.insert(sql, content.col1, content.col2)
    }
}

Проблема заключается в следующем: я делаюне найти способ выполнить database.select и database.insert

Как минимум, я хотел бы получить обратно базовый java.sql.Connection, чтобы я мог использовать с ним чистый JDBC

Документация по этому вопросу невелика: http://www.liquibase.org/documentation/changes/custom_change.html

А также примеры: https://github.com/liquibase/liquibase/tree/master/liquibase-core/src/test/java/liquibase/change/custom

Любая помощь приветствуется

1 Ответ

0 голосов
/ 27 сентября 2018

Вот уродливый обходной путь, который я наконец нашел:

val conn = (database.connection as JdbcConnection).wrappedConnection

Это работает, потому что ВСЕ доступные реализации DatabaseConnection наследуются от JdbcConnection ...

...