aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStewart Stewart <stewinsalot@gmail.com>2016-12-09 12:53:23 -0800
committerGitHub <noreply@github.com>2016-12-09 12:53:23 -0800
commitb0fa359345eb6590c866ceb697ab2510690ef1e3 (patch)
treec2d3aba52d1bef53bd639d280dea9d32ae37f792
parente1e38c58c85b54eea8184f84a2425ac2524b9c7a (diff)
parent3fb854ecc6f4ab985b1dda15ba4e8e0b2f1bb8aa (diff)
downloadslick-codegen-plugin-b0fa359345eb6590c866ceb697ab2510690ef1e3.tar.gz
slick-codegen-plugin-b0fa359345eb6590c866ceb697ab2510690ef1e3.tar.bz2
slick-codegen-plugin-b0fa359345eb6590c866ceb697ab2510690ef1e3.zip
Merge pull request #18 from drivergroup/sundry-tweaks
Sundry tweaks, fix hlist syntax, add DDL
-rw-r--r--build.sbt3
-rw-r--r--src/main/scala/NamespacedCodegen.scala67
2 files changed, 41 insertions, 29 deletions
diff --git a/build.sbt b/build.sbt
index 47440e3..1959ef2 100644
--- a/build.sbt
+++ b/build.sbt
@@ -30,6 +30,5 @@ val slickVersionValue = "3.1.1"
libraryDependencies ++= Seq(
"com.typesafe.slick" %% "slick" % slickVersionValue,
"com.typesafe.slick" %% "slick-codegen" % slickVersionValue,
- "com.typesafe.slick" %% "slick-hikaricp" % slickVersionValue,
- "org.scala-lang" % "scala-reflect" % scalaVersionValue
+ "com.typesafe.slick" %% "slick-hikaricp" % slickVersionValue
)
diff --git a/src/main/scala/NamespacedCodegen.scala b/src/main/scala/NamespacedCodegen.scala
index a3df345..0006c00 100644
--- a/src/main/scala/NamespacedCodegen.scala
+++ b/src/main/scala/NamespacedCodegen.scala
@@ -25,12 +25,13 @@ object Generator {
manualForeignKeys: Map[(String, String), (String, String)],
schemaBaseClass: String,
idType: Option[String],
- schemaImports: List[String],
- typeReplacements: Map[String, String]) = {
+ schemaImports: List[String],
+ typeReplacements: Map[String, String]) = {
val dc: DatabaseConfig[JdbcProfile] =
DatabaseConfig.forURI[JdbcProfile](uri)
val parsedSchemasOpt: Option[Map[String, List[String]]] =
schemaNames.map(SchemaParser.parse)
+
val dbModel: Model = Await.result(
dc.db.run(SchemaParser.createModel(dc.driver, parsedSchemasOpt)),
Duration.Inf)
@@ -42,8 +43,8 @@ object Generator {
manualForeignKeys,
schemaBaseClass,
idType,
- schemaImports,
- typeReplacements)
+ schemaImports,
+ typeReplacements)
generator.code // Yes... Files are written as a side effect
parsedSchemasOpt
.getOrElse(Map())
@@ -56,35 +57,27 @@ object Generator {
class PackageNameGenerator(pkg: String, dbModel: Model)
extends SourceCodeGenerator(dbModel) {
override def code: String =
- s"""
- |// format: OFF
- |// scalastyle:off
- |package ${pkg}
- |
- |""".stripMargin
+ s"""|// scalastyle:off
+ |package ${pkg}
+ |
+ |""".stripMargin
}
class ImportGenerator(dbModel: Model, schemaImports: List[String])
extends SourceCodeGenerator(dbModel) {
- val baseImports: String = schemaImports.map("import " + _).mkString("\n")
+ val baseImports: String = schemaImports.map("import " + _).mkString("\n") + "\n"
val hlistImports: String =
- if (tables.exists(_.hlistEnabled))
- """
- |import slick.collection.heterogeneous._
- |import slick.collection.heterogeneous.syntax._
- |
- |""".stripMargin
- else ""
+ """|import slick.collection.heterogeneous._
+ |import slick.collection.heterogeneous.syntax._
+ |""".stripMargin
val plainSqlMapperImports: String =
if (tables.exists(_.PlainSqlMapper.enabled))
- """
- |import slick.jdbc.{GetResult => GR}
- |//NOTE: GetResult mappers for plain SQL are only generated for tables where Slick knows how to map the types of all columns.\n
- |
- |""".stripMargin
+ """|import slick.jdbc.{GetResult => GR}
+ |//NOTE: GetResult mappers for plain SQL are only generated for tables where Slick knows how to map the types of all columns.\n
+ |""".stripMargin
else ""
override def code: String =
@@ -98,8 +91,8 @@ class Generator(uri: URI,
manualForeignKeys: Map[(String, String), (String, String)],
schemaBaseClass: String,
idType: Option[String],
- schemaImports: List[String],
- typeReplacements: Map[String, String])
+ schemaImports: List[String],
+ typeReplacements: Map[String, String])
extends SourceCodeGenerator(dbModel)
with OutputHelpers {
@@ -128,13 +121,33 @@ class Generator(uri: URI,
.sortBy(_.model.name.table)
.map(_.code.mkString("\n"))
.mkString("\n\n")
+
+ val ddlCode =
+ (if (ddlEnabled) {
+ "\n/** DDL for all tables. Call .create to execute. */" +
+ (
+ if (tableDefs.length > 5)
+ "\nlazy val schema: profile.SchemaDescription = Array(" + tableDefs
+ .map(_.TableValue.name + ".schema")
+ .mkString(", ") + ").reduceLeft(_ ++ _)"
+ else if (tableDefs.nonEmpty)
+ "\nlazy val schema: profile.SchemaDescription = " + tableDefs
+ .map(_.TableValue.name + ".schema")
+ .mkString(" ++ ")
+ else
+ "\nlazy val schema: profile.SchemaDescription = profile.DDL(Nil, Nil)"
+ ) +
+ "\n\n"
+ } else "")
+
val generatedSchema = s"""
|object ${schemaName} extends {
- | val profile = slick.backend.DatabaseConfig.forConfig[slick.driver.JdbcProfile]("${uri.getFragment()}").driver
+ | val profile = slick.backend.DatabaseConfig.forConfig[slick.driver.JdbcProfile]("${uri
+ .getFragment()}").driver
|} with $schemaBaseClass {
| import profile.api._
| ${tableCode}
- |
+ | ${ddlCode}
|}
|// scalastyle:on""".stripMargin