diff options
-rw-r--r-- | src/main/scala/TypedIdTable.scala | 17 |
1 files changed, 10 insertions, 7 deletions
diff --git a/src/main/scala/TypedIdTable.scala b/src/main/scala/TypedIdTable.scala index e22a122..3867d1a 100644 --- a/src/main/scala/TypedIdTable.scala +++ b/src/main/scala/TypedIdTable.scala @@ -10,7 +10,7 @@ class TypedIdSourceCodeGenerator( val manualReferences = SchemaParser.references(databaseModel, manualForeignKeys) - val rawTypeToColumnMaper = Map( + val modelTypeToColumnMaper = Map( "java.util.UUID" -> "uuidKeyMapper", "String" -> "naturalKeyMapper", "Int" -> "serialKeyMapper" @@ -35,11 +35,10 @@ class TypedIdSourceCodeGenerator( class TypedIdColumn(override val model: m.Column) extends Column(model) { column => - def tableReferenceName(tableName: m.QualifiedName) = { + def rowTypeFor(tableName: m.QualifiedName) = { val schemaObjectName = tableName.schema.getOrElse("`public`") val rowTypeName = entityName(tableName.table) - val idTypeName = idType.getOrElse("Id") - s"$idTypeName[$schemaObjectName.$rowTypeName]" + s"$schemaObjectName.$rowTypeName" } override def code = { @@ -47,7 +46,9 @@ class TypedIdSourceCodeGenerator( derefColumn(table.model, column.model) if (referencedColumn.options.contains( slick.ast.ColumnOption.PrimaryKey)) - super.code + s"(${rawTypeToColumnMaper(model.tpe)})" + s"""|implicit val ${name}KeyMapper: BaseColumnType[${rawType}] = + | ${modelTypeToColumnMaper(model.tpe)}[${rowTypeFor(referencedTable.name)}]\n + |${super.code}""" else super.code } @@ -57,8 +58,10 @@ class TypedIdSourceCodeGenerator( val (referencedTable, referencedColumn) = derefColumn(table.model, column.model) if (referencedColumn.options.contains( - slick.ast.ColumnOption.PrimaryKey)) - tableReferenceName(referencedTable.name) + slick.ast.ColumnOption.PrimaryKey)) { + val idTypeName = idType.getOrElse("Id") + s"$idTypeName[${rowTypeFor(referencedTable.name)}]" + } else super.rawType } } |