Простой способ создать 1.sql из модели?

Как нуб-слик, я не понимаю, почему я должен дважды указывать свою модель, сначала в Scala, а затем в 1.sql для создания таблиц. Это не выглядит СУХИМ. Есть ли простой способ создать 1.sql (и 2..n.sql) из модели во время разработки?


person Hans    schedule 30.12.2015    source источник
comment
Я использовал slick 2.0. Я не знаю, что такое 1.sql. Я использовал ${tableName}.ddl.create для создания таблиц.   -  person nikiforo    schedule 30.12.2015
comment
DDL был ключевым словом для поиска. И это было удалено в 3.0.   -  person Hans    schedule 30.12.2015


Ответы (2)


Я создал свою собственную задачу sbt, чтобы легко сгенерировать 1.sql из модели с помощью генерации кода:

в файле build.sbt:

val generate_schema = taskKey[Unit]("Schema Generator")

generate_schema <<= (fullClasspath in Runtime) map {classpath =>
    val loader: ClassLoader = ClasspathUtilities.toLoader(classpath.map(_.data).map(_.getAbsoluteFile))
    val schemaGenerator = loader.loadClass("misc.SchemaGenerator").newInstance().asInstanceOf[Runnable]
    schemaGenerator.run
}

класс misc.SchemaGenerator:

package misc

import models.Article
import models.Category
import play.api.Logger
import slick.driver.PostgresDriver.api._
import scala.concurrent._
import ExecutionContext.Implicits.global
import scala.reflect.io.File

class SchemaGenerator extends Runnable {

  def run = {
    println("---------------------GENERATING SCHEMA.....")
    val categories = TableQuery[Category]
    val articles = TableQuery[Article]

    val file = File("/home/pedro/NetBeansProjects/play-scala-angular-sample/my-blog-server/conf/evolutions/default/1.sql")

    val sb = new StringBuilder("# --- !Ups  \n\n")
    categories.schema.create.statements.foreach(st => sb.append(st.toString + ";\n"))
    sb.append("\n\n")
    articles.schema.create.statements.foreach(st => sb.append(st.toString + ";\n"))

    sb.append("\n\n")
    sb.append("# --- !Downs")
    sb.append("\n\n")

    categories.schema.drop.statements.foreach(st => sb.append(st.toString + ";\n"))
    sb.append("\n\n")
    articles.schema.drop.statements.foreach(st => sb.append(st.toString + ";\n"))

//    Logger.info("value: [" + sb + "] sb")
    file.writeAll(sb.toString)
    Logger.info("----------------------FINISHED GENERATING SCHEMA--------------------------")
  }

}

Выполнить задание можно из консоли активатора: generate_schema.

Надеюсь, поможет.

person Pedro Hidalgo    schedule 31.12.2015

...ddl.create больше не поддерживается, начиная с версии 3.0. Мотивацию можно найти внизу следующей страницы: https://www.playframework.com/documentation/2.4.x/PlaySlickMigrationGuide Поэтому мне приходится вручную редактировать схемы или использовать генерацию кода.

person Hans    schedule 30.12.2015