aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStewart Stewart <stewinsalot@gmail.com>2017-02-28 09:35:55 -0800
committerStewart Stewart <stewinsalot@gmail.com>2017-02-28 09:35:55 -0800
commit6e9355aefe626e28309f76f30b3c0958ea0362e6 (patch)
treeff7cce455d6e9ab4bc90dc64ecb8e9f869ab104c
parent5a7a4d49452c6e74ced933f785efae6cd5b715b5 (diff)
downloadslick-codegen-plugin-6e9355aefe626e28309f76f30b3c0958ea0362e6.tar.gz
slick-codegen-plugin-6e9355aefe626e28309f76f30b3c0958ea0362e6.tar.bz2
slick-codegen-plugin-6e9355aefe626e28309f76f30b3c0958ea0362e6.zip
pre-calculate all key references
-rw-r--r--src/main/scala/TypedIdTable.scala37
1 files changed, 18 insertions, 19 deletions
diff --git a/src/main/scala/TypedIdTable.scala b/src/main/scala/TypedIdTable.scala
index 93ea8ee..740158d 100644
--- a/src/main/scala/TypedIdTable.scala
+++ b/src/main/scala/TypedIdTable.scala
@@ -16,35 +16,34 @@ class TypedIdSourceCodeGenerator(
"Int" -> "serialKeyMapper"
)
+ val keyReferences: Map[m.Column, m.Column] = {
+ val pks = databaseModel.tables.flatMap(_.columns)
+ .filter(_.options.contains(slick.ast.ColumnOption.PrimaryKey))
+ .map(c => (c -> c))
+
+ val fks: Seq[(m.Column, m.Column)] = databaseModel.tables.flatMap(_.foreignKeys)
+ .filter(_.referencedColumns.length == 1)
+ .filter(_.referencedColumns.forall(
+ _.options.contains(slick.ast.ColumnOption.PrimaryKey)))
+ .flatMap(fk =>
+ fk.referencingColumns.flatMap(from =>
+ fk.referencedColumns.headOption.map(to => (from -> to))))
+
+ (pks ++ fks).toMap
+ }
+
def pKeyTypeTag(columnRef: m.Column): String = {
val schemaName = columnRef.table.schema.getOrElse("`public`")
val tableName = entityName(columnRef.table.table)
- s"$schemaName.$tableName."
+ s"$schemaName.$tableName"
}
def pKeyType(columnRef: m.Column): String = {
s"${idType.getOrElse("Id")}[${pKeyTypeTag(columnRef)}]"
}
- class TypedIdTable(model: m.Table) extends Table(model) { table =>
-
- val keyReferences: Map[m.Column, m.Column] = {
- val fks = model.foreignKeys
- .filter(_.referencedColumns.length == 1)
- .filter(_.referencedColumns.forall(
- _.options.contains(slick.ast.ColumnOption.PrimaryKey)))
- .flatMap(fk =>
- fk.referencingColumns.flatMap(from =>
- fk.referencedColumns.headOption.map(to => (from -> to))))
- val pk = model.primaryKey
- .filter(_.columns.length == 1)
- .flatMap(_.columns.headOption.map(c => (c -> c)))
-
- fks.toMap ++ pk
- }
-
+ class TypedIdTable(model: m.Table) extends Table(model) {
class TypedIdColumn(override val model: m.Column) extends Column(model) {
- column =>
override def rawType: String = {
keyReferences.get(model).fold(super.rawType)(pKeyType)
}