aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStewart Stewart <stewinsalot@gmail.com>2016-11-22 20:02:28 -0500
committerStewart Stewart <stewinsalot@gmail.com>2016-11-22 20:04:09 -0500
commit37162f9b8b6a8a4760877ca84127907c751282b8 (patch)
tree46ee86cbc871ed4cff591c25974dc9cc8fd4ece6
parentae66b3709a0ed5320ec3c0b70bfa2fe18eacca95 (diff)
downloadslick-codegen-plugin-37162f9b8b6a8a4760877ca84127907c751282b8.tar.gz
slick-codegen-plugin-37162f9b8b6a8a4760877ca84127907c751282b8.tar.bz2
slick-codegen-plugin-37162f9b8b6a8a4760877ca84127907c751282b8.zip
make codegenIdType optional
-rw-r--r--src/main/scala/CodegenPlugin.scala6
-rw-r--r--src/main/scala/NamespacedCodegen.scala24
2 files changed, 22 insertions, 8 deletions
diff --git a/src/main/scala/CodegenPlugin.scala b/src/main/scala/CodegenPlugin.scala
index 92e595f..8b54887 100644
--- a/src/main/scala/CodegenPlugin.scala
+++ b/src/main/scala/CodegenPlugin.scala
@@ -24,9 +24,9 @@ object CodegenPlugin extends AutoPlugin {
lazy val codegenSchemaBaseClassParts = SettingKey[List[String]](
"codegen-schema-base-class-parts",
"parts inherited by each generated schema object")
- lazy val codegenIdType = SettingKey[String](
+ lazy val codegenIdType = SettingKey[Option[String]](
"codegen-id-type",
- "The in-scope type `T` of kind `T[TableRow]` to apply in place T for id columns."
+ "The in-scope type `T` of kind `T[TableRow]` to apply in place T for id columns"
)
lazy val slickCodeGenTask =
@@ -40,7 +40,7 @@ object CodegenPlugin extends AutoPlugin {
codegenSchemaWhitelist := List.empty,
codegenForeignKeys := Map.empty,
codegenSchemaBaseClassParts := List.empty,
- codegenIdType := "Id",
+ codegenIdType := Option.empty,
slickCodeGenTask := Def.taskDyn {
Def.task {
Generator.run(
diff --git a/src/main/scala/NamespacedCodegen.scala b/src/main/scala/NamespacedCodegen.scala
index 6928cde..bddbdea 100644
--- a/src/main/scala/NamespacedCodegen.scala
+++ b/src/main/scala/NamespacedCodegen.scala
@@ -24,7 +24,7 @@ object Generator {
outputPath: String,
manualForeignKeys: Map[(String, String), (String, String)],
schemaBaseClass: String,
- idTypeName: String) = {
+ idType: Option[String]) = {
val dc: DatabaseConfig[JdbcProfile] =
DatabaseConfig.forURI[JdbcProfile](uri)
val parsedSchemasOpt: Option[Map[String, List[String]]] =
@@ -39,7 +39,7 @@ object Generator {
outputPath,
manualForeignKeys,
schemaBaseClass,
- idTypeName)
+ idType)
generator.code // Yes... Files are written as a side effect
parsedSchemasOpt
.getOrElse(Map())
@@ -95,13 +95,19 @@ class Generator(uri: URI,
outputPath: String,
manualForeignKeys: Map[(String, String), (String, String)],
schemaBaseClass: String,
- idTypeName: String)
+ idType: Option[String])
extends SourceCodeGenerator(dbModel)
with OutputHelpers {
val packageName = new PackageNameGenerator(pkg, dbModel).code
val allImports: String = new ImportGenerator(dbModel).code
+ private val defaultIdImplementation =
+ """|case class Id[T](v: Int)
+ |object Id {
+ | implicit def idTypeMapper[A]: BaseColumnType[Id[A]] = MappedColumnType.base[Id[A], Int](_.v, Id(_))
+ |}""".stripMargin
+
override def code: String = {
val sortedSchemaTables: List[(String, Seq[TableDef])] = tables
@@ -132,6 +138,13 @@ class Generator(uri: URI,
s"${schemaName}.scala"
)
+ if (idType.isEmpty) {
+ writeStringToFile(packageName + defaultIdImplementation,
+ outputPath,
+ pkg,
+ "Id.scala")
+ }
+
generatedSchema
}.mkString("\n\n")
@@ -202,9 +215,10 @@ class Generator(uri: URI,
.getOrElse((table, column))
}
- def idType(tableName: QualifiedName) = {
+ def tableReferenceName(tableName: QualifiedName) = {
val schemaObjectName = tableName.schema.getOrElse("`public`")
val rowTypeName = entityName(tableName.table)
+ val idTypeName = idType.getOrElse("Id")
s"$idTypeName[$schemaObjectName.$rowTypeName]"
}
@@ -214,7 +228,7 @@ class Generator(uri: URI,
derefColumn(table.model, column.model)
if (referencedColumn.options.contains(
slick.ast.ColumnOption.PrimaryKey))
- idType(referencedTable.name)
+ tableReferenceName(referencedTable.name)
else
model.tpe match {
// TODO: There should be a way to add adhoc custom time mappings