0

I have previously used the codegen for slick like this:

scala.slick.codegen.SourceCodeGenerator.main( Array("com.typesafe.slick.driver.ms.SQLServerDriver", "net.sourceforge.jtds.jdbc.Driver", "jdbc:jtds:sqlserver://10.0.1.12:1433;databaseName=master;", "/home/bipin/slickcode", "demo", "user", "pass") )

It generates the classes which can connect to the database. But I don't need all the tables just a few of them. So I used a custom slick code generator as shown below (taken from https://github.com/slick/slick-codegen-customization-example/blob/master/codegen/CustomizedCodeGenerator.scala and modified):

import scala.slick.model.Model
import scala.slick.jdbc.meta.createModel
import com.typesafe.slick.driver.ms.SQLServerDriver

object CustomizedCodeGenerator{
  def main(args: Array[String]) = {
    codegen.writeToFile(
          "com.typesafe.slick.driver.ms.SQLServerDriver",
          "/home/bipin/slickcode",
          "demo"
        )
  }    
  val db = SQLServerDriver.simple.Database.forURL(
 "jdbc:jtds:sqlserver://10.0.1.12:1433;databaseName=master;user=user;password=pass;",
 driver="net.sourceforge.jtds.jdbc.Driver")
  // filter out desired tables
  val included = Seq("Table1","Table2","T3","T4")
  val model = db.withSession{ implicit session =>
    val tables = SQLServerDriver.getTables.list.filter(t => included contains t.name.name)
    tables.foreach(println);
    createModel( tables, SQLServerDriver )
  }
  val codegen = new scala.slick.codegen.SourceCodeGenerator(model){
    // customize Scala entity name (case class, etc.)
    override def entityName = dbTableName => dbTableName match {
      case "COFFEES" => "Coffee"
      case _ => super.entityName(dbTableName)
    }
    // customize Scala table name (table class, table values, ...)
    override def tableName = dbTableName => dbTableName match {
      case "COF_INVENTORY" => "CoffeeInventory"
      case _ => super.tableName(dbTableName)
    }
    // override generator responsible for tables
    override def Table = new Table(_){
      table =>
      // customize table value (TableQuery) name (uses tableName as a basis)
      override def TableValue = new TableValue{
        override def rawName = super.rawName.uncapitalize
      }
      // override generator responsible for columns
      override def Column = new Column(_){
        // customize Scala column names
        override def rawName = (table.model.name.table,this.model.name) match {
          case ("T3","@Column1") => "Column1"
          case _ => super.rawName
        }
      }
    }
  }
}

But when I run this, the output file does not have any table ddl.

  /** DDL for all tables. Call .create to execute. */
  lazy val ddl = 

Can anyone tell what am I doing wrong and how to fix it. Thanks

user568109
  • 47,225
  • 17
  • 99
  • 123

0 Answers0