From 2fd140c28076c511400d517ebc4ce59325a16559 Mon Sep 17 00:00:00 2001 From: Stewart Stewart Date: Mon, 27 Feb 2017 18:19:24 -0800 Subject: generate implicit along with primary key --- src/main/scala/Generators.scala | 2 ++ src/main/scala/TypedIdTable.scala | 17 +++++++++++++++++ 2 files changed, 19 insertions(+) (limited to 'src') 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 + _) + } + } } } -- cgit v1.2.3