From 6177b8733dca879845e035321ee585a78df7c399 Mon Sep 17 00:00:00 2001 From: Stewart Stewart Date: Mon, 27 Feb 2017 13:15:50 -0800 Subject: generate an implicit for each individual key column --- src/main/scala/TypedIdTable.scala | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) (limited to 'src') 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 } } -- cgit v1.2.3