aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStewart Stewart <stewinsalot@gmail.com>2017-02-27 18:19:24 -0800
committerStewart Stewart <stewinsalot@gmail.com>2017-02-28 09:37:13 -0800
commit2fd140c28076c511400d517ebc4ce59325a16559 (patch)
treedcc98197cd2ca09391464ff082613f258eb303b3
parent6e9355aefe626e28309f76f30b3c0958ea0362e6 (diff)
downloadslick-codegen-plugin-2fd140c28076c511400d517ebc4ce59325a16559.tar.gz
slick-codegen-plugin-2fd140c28076c511400d517ebc4ce59325a16559.tar.bz2
slick-codegen-plugin-2fd140c28076c511400d517ebc4ce59325a16559.zip
generate implicit along with primary key
-rw-r--r--src/main/scala/Generators.scala2
-rw-r--r--src/main/scala/TypedIdTable.scala17
2 files changed, 19 insertions, 0 deletions
diff --git a/src/main/scala/Generators.scala b/src/main/scala/Generators.scala
index 7138a3c..9af3d88 100644
--- a/src/main/scala/Generators.scala
+++ b/src/main/scala/Generators.scala
@@ -20,6 +20,8 @@ class RowSourceCodeGenerator(
override def Table = new TypedIdTable(_) { table =>
+ override def PrimaryKey = new TypedIdPrimaryKey(_) { }
+
override def Column = new TypedIdColumn(_) {
override def rawType: String = {
typeReplacements.getOrElse(model.tpe, super.rawType)
diff --git a/src/main/scala/TypedIdTable.scala b/src/main/scala/TypedIdTable.scala
index 740158d..0958ccf 100644
--- a/src/main/scala/TypedIdTable.scala
+++ b/src/main/scala/TypedIdTable.scala
@@ -48,5 +48,22 @@ class TypedIdSourceCodeGenerator(
keyReferences.get(model).fold(super.rawType)(pKeyType)
}
}
+
+ class TypedIdPrimaryKey(override val model: m.PrimaryKey) extends PrimaryKey(model) { primaryKey =>
+ def `super.code` = s"""val $name = primaryKey("$dbName", ${compoundValue(columns.map(_.name))})"""
+
+ override def code = {
+ val implicitKeyBaseMapper =
+ primaryKey.columns.headOption
+ .filter(_ => primaryKey.columns.length == 1)
+ .map { column =>
+ val name = termName(column.rawName + "KeyMapper")
+ val tpe = s"BaseColumnType[column.rawName]"
+ val mapping = s"${modelTypeToColumnMaper(column.model.tpe)}[${pKeyTypeTag(column.model)}]"
+ s"implicit def $name: $tpe = $mapping\n"
+ }
+ implicitKeyBaseMapper.fold(super.code)(super.code + _)
+ }
+ }
}
}