Slick codegen не дает никакого вывода
Я пытаюсь использовать текущую версию Slick и Slick-Codegen (3.2.0) с базой данных sqlite. Когда я пытаюсь перечислить таблицу, я получаю имена правильно. Однако, когда я пытаюсь сгенерировать классы, соответствующие таблицам, я не получаю никакого вывода.
Это работает:
object TableCodeGenerator extends App
{
val db = Database.forURL("jdbc:sqlite:/home/samik/db/mydb.db", driver = "org.sqlite.JDBC")
val tables = Await.result(db.run(MTable.getTables), 1 second).toList
tables.foreach(println)
}
Я получаю вывод ниже:
MTable(MQName(models),TABLE,null,None,None,None)
MTable(MQName(users),TABLE,null,None,None,None)
Однако следующий код, выполняемый таким же образом напрямую, не работает:
object TableCodeGenerator extends App
{
val db = Database.forURL("jdbc:sqlite:/home/samik/db/mydb.db", driver = "org.sqlite.JDBC")
val dbio = SQLiteProfile.createModel(Some(MTable.getTables))
val model = db.run(dbio)
val codegenFuture: Future[SourceCodeGenerator] = model.map(model => new SourceCodeGenerator(model))
codegenFuture.onSuccess
{
case codegen => codegen.writeToFile(
"org.sqlite.JDBC",
"/tmp",
"my.package.dao",
"Tables",
"Tables.scala")
}
}
Это означает, что код работает успешно, но я не вижу никакого выходного файла. Есть что-то, что я пропускаю?
1 ответ
Вышесказанное происходило потому, что основной код молча выдавал исключение. Причиной этого исключения было то, что я использовал "функцию" sqlite, где, если вы не упомянули тип данных в схеме, sqlite предполагает, что это текстовый тип. Однако это создает проблему для скользкого кода.
Подробнее здесь. Непосредственное решение состояло в том, чтобы исправить схему, но я думаю, что теперь это было исправлено и в пятно.