diff options
Diffstat (limited to 'src/main/scala/Generators.scala')
-rw-r--r-- | src/main/scala/Generators.scala | 89 |
1 files changed, 44 insertions, 45 deletions
diff --git a/src/main/scala/Generators.scala b/src/main/scala/Generators.scala index b7b499e..ae410fb 100644 --- a/src/main/scala/Generators.scala +++ b/src/main/scala/Generators.scala @@ -1,21 +1,20 @@ import slick.{model => m} class RowSourceCodeGenerator( - model: m.Model, - override val headerComment: String, - override val imports: String, - override val schemaName: String, - fullDatabaseModel: m.Model, - idType: Option[String], - manualForeignKeys: Map[(String, String), (String, String)], - typeReplacements: Map[String, String] + model: m.Model, + override val headerComment: String, + override val imports: String, + override val schemaName: String, + fullDatabaseModel: m.Model, + idType: Option[String], + manualForeignKeys: Map[(String, String), (String, String)], + typeReplacements: Map[String, String] ) extends TypedIdSourceCodeGenerator( singleSchemaModel = model, databaseModel = fullDatabaseModel, idType, manualForeignKeys - ) - with RowOutputHelpers { + ) with RowOutputHelpers { override def Table = new TypedIdTable(_) { table => @@ -36,22 +35,20 @@ class RowSourceCodeGenerator( override def code = tables.map(_.code.mkString("\n")).mkString("\n\n") } -class TableSourceCodeGenerator( - schemaOnlyModel: m.Model, - override val headerComment: String, - override val imports: String, - override val schemaName: String, - fullDatabaseModel: m.Model, - pkg: String, - manualForeignKeys: Map[(String, String), (String, String)], - override val parentType: Option[String], - idType: Option[String], - typeReplacements: Map[String, String]) +class TableSourceCodeGenerator(schemaOnlyModel: m.Model, + override val headerComment: String, + override val imports: String, + override val schemaName: String, + fullDatabaseModel: m.Model, + pkg: String, + manualForeignKeys: Map[(String, String), (String, String)], + override val parentType: Option[String], + idType: Option[String], + typeReplacements: Map[String, String]) extends TypedIdSourceCodeGenerator(singleSchemaModel = schemaOnlyModel, databaseModel = fullDatabaseModel, idType, - manualForeignKeys) - with TableOutputHelpers { + manualForeignKeys) with TableOutputHelpers { val defaultIdImplementation = """|final case class Id[T](v: Int) @@ -71,14 +68,14 @@ class TableSourceCodeGenerator( val tripleQuote = "\"\"\"" val namespaceDDL = s"""|val createNamespaceSchema = { - | implicit val GRUnit = slick.jdbc.GetResult(_ => ()) - | sql${tripleQuote}CREATE SCHEMA IF NOT EXISTS "$schemaName";${tripleQuote}.as[Unit] - |} - | - |val dropNamespaceSchema = { - | implicit val GRUnit = slick.jdbc.GetResult(_ => ()) - | sql${tripleQuote}DROP SCHEMA "$schemaName" CASCADE;${tripleQuote}.as[Unit] - |} """ + | implicit val GRUnit = slick.jdbc.GetResult(_ => ()) + | sql${tripleQuote}CREATE SCHEMA IF NOT EXISTS "$schemaName";${tripleQuote}.as[Unit] + |} + | + |val dropNamespaceSchema = { + | implicit val GRUnit = slick.jdbc.GetResult(_ => ()) + | sql${tripleQuote}DROP SCHEMA "$schemaName" CASCADE;${tripleQuote}.as[Unit] + |} """ tableCode + "\n\n" + namespaceDDL } @@ -99,21 +96,23 @@ class TableSourceCodeGenerator( override def factory: String = if (!hlistEnabled) super.factory else { - val args = columns.zipWithIndex.map("a" + _._2) + val args = columns.zipWithIndex.map("a" + _._2) val hlist = args.mkString("::") + ":: HNil" val hlistType = columns - .map(_.actualType) - .mkString("::") + ":: HNil.type" + .map(_.actualType) + .mkString("::") + ":: HNil.type" s"((h : $hlistType) => h match {case $hlist => ${TableClass.elementType}(${args.mkString(",")})})" } // from case class create columns override def extractor: String = - if (!hlistEnabled) super.extractor - else + if (!hlistEnabled) { + super.extractor + } else { s"(a : ${TableClass.elementType}) => Some(" + columns .map("a." + _.name) .mkString("::") + ":: HNil)" + } override def EntityType = new EntityType { override def enabled = false @@ -129,22 +128,22 @@ class TableSourceCodeGenerator( override def code = { val fkColumns = compoundValue(referencingColumns.map(_.name)) val qualifier = - if (referencedTable.model.name.schema == referencingTable.model.name.schema) + if (referencedTable.model.name.schema == referencingTable.model.name.schema) { "" - else - referencedTable.model.name.schema.fold("")(sname => - s"$pkg.$sname.") + } else { + referencedTable.model.name.schema.fold("")(sname => s"$pkg.$sname.") + } val qualifiedName = qualifier + referencedTable.TableValue.name val pkColumns = compoundValue(referencedColumns.map(c => s"r.${c.name}${if (!c.model.nullable && referencingColumns.forall(_.model.nullable)) ".?" else ""}")) val fkName = referencingColumns - .map(_.name) - .flatMap(_.split("_")) - .map(_.capitalize) - .mkString - .uncapitalize + "Fk" + .map(_.name) + .flatMap(_.split("_")) + .map(_.capitalize) + .mkString + .uncapitalize + "Fk" s"""lazy val $fkName = foreignKey("$dbName", $fkColumns, $qualifiedName)(r => $pkColumns, onUpdate=$onUpdate, onDelete=$onDelete)""" } } |