diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/main/scala/Generators.scala | 2 | ||||
-rw-r--r-- | src/main/scala/TypedIdTable.scala | 17 |
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 + _) + } + } } } |