aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStewart Stewart <stewinsalot@gmail.com>2017-02-22 21:52:14 -0500
committerStewart Stewart <stewinsalot@gmail.com>2017-02-22 21:52:14 -0500
commit9d25f129826b4fced8726c27f1be8c3aa6387a4b (patch)
treeab88ada0c9aab2d4fb362fc4d7a71c10f51d5789
parente8588e7264ed8a50e880e066e709ee8a498c3294 (diff)
downloadslick-codegen-plugin-9d25f129826b4fced8726c27f1be8c3aa6387a4b.tar.gz
slick-codegen-plugin-9d25f129826b4fced8726c27f1be8c3aa6387a4b.tar.bz2
slick-codegen-plugin-9d25f129826b4fced8726c27f1be8c3aa6387a4b.zip
separate rows from table defs
-rw-r--r--src/main/scala/NamespacedCodegen.scala111
-rw-r--r--src/main/scala/OutputHelpers.scala2
2 files changed, 105 insertions, 8 deletions
diff --git a/src/main/scala/NamespacedCodegen.scala b/src/main/scala/NamespacedCodegen.scala
index 85e21bf..7dd99cc 100644
--- a/src/main/scala/NamespacedCodegen.scala
+++ b/src/main/scala/NamespacedCodegen.scala
@@ -49,7 +49,7 @@ object Generator {
Some(Map(schemaName -> tables)))),
Duration.Inf)
- val generator = new Generator(pkg,
+ val tableGenerator = new TableGenerator(pkg,
dbModel,
schemaOnlyModel,
manualForeignKeys,
@@ -57,12 +57,28 @@ object Generator {
idType,
header,
schemaImports,
- typeReplacements)
- generator.writeToFile(profile = profile,
+ typeReplacements,
+ schemaName)
+ tableGenerator.writeToFile(profile = profile,
folder = outputPath,
pkg = pkg,
container = schemaName,
fileName = s"${schemaName}.scala")
+
+ val rowGenerator = new RowGenerator(pkg,
+ dbModel,
+ schemaOnlyModel,
+ manualForeignKeys,
+ parentType,
+ idType,
+ header,
+ schemaImports,
+ typeReplacements)
+ rowGenerator.writeToFile(
+ schemaName = schemaName,
+ folder = outputPath,
+ pkg = pkg,
+ fileName = s"${schemaName.capitalize}Rows.scala")
}
} finally {
dc.db.close()
@@ -71,7 +87,7 @@ object Generator {
}
-class Generator(pkg: String,
+abstract class Generator(pkg: String,
fullDatabaseModel: Model,
schemaOnlyModel: Model,
manualForeignKeys: Map[(String, String), (String, String)],
@@ -99,7 +115,9 @@ class Generator(pkg: String,
// Alias to ForeignKeyAction is in profile.api
// TODO: fix upstream
- override def Table = new Table(_) { table =>
+ override def Table = new TableO(_)
+
+ class TableO(model: sModel.Table) extends this.Table(model) { table =>
override def TableClass = new TableClass() {
// We disable the option mapping, as it is a bit more complex to support and we don't appear to need it
@@ -138,10 +156,10 @@ class Generator(pkg: String,
// But can't have the final case class inside the trait
// TODO: Fix by putting case classes in package or object
// TODO: Upstream default should be false.
- (if (classEnabled) "sealed " else "") + super.code
+ (if (classEnabled) "final " else "") + super.code
}
- override def Column = new Column(_) { column =>
+ override def Column = new this.Column(_) { column =>
// use fullDatabasemodel model here for cross-schema foreign keys
val manualReferences =
SchemaParser.references(fullDatabaseModel, manualForeignKeys)
@@ -260,3 +278,82 @@ object SchemaParser {
jdbcProfile.createModel(filteredTables)
}
}
+
+class RowGenerator(pkg: String,
+ fullDatabaseModel: Model,
+ schemaOnlyModel: Model,
+ manualForeignKeys: Map[(String, String), (String, String)],
+ override val parentType: Option[String],
+ idType: Option[String],
+ override val headerComment: String,
+ schemaImports: List[String],
+ typeReplacements: Map[String, String])
+ extends Generator(pkg,
+ fullDatabaseModel,
+ schemaOnlyModel,
+ manualForeignKeys,
+ parentType,
+ idType,
+ headerComment,
+ schemaImports,
+ typeReplacements) {
+
+ override def Table = new TableO(_) {
+ //override def Column = new IdColumn(_){ }
+ override def code = Seq[Def](EntityType).map(_.docWithCode)
+ }
+
+ override def code = tables.map(_.code.mkString("\n")).mkString("\n\n")
+
+ def writeToFile(schemaName: String, folder: String, pkg: String, fileName: String) = {
+ writeStringToFile(packageCode(pkg, schemaName), folder = folder, pkg = pkg, fileName = fileName)
+ }
+
+ override val imports = schemaImports.map("import " + _).mkString("\n")
+
+ def packageCode(pkg: String, schemaName: String) = {
+ s"""|package $pkg
+ |package $schemaName
+ |
+ |$imports
+ |
+ |$code
+ |""".stripMargin.trim()
+ }
+
+ // disable helpers for Table schema generators
+ //override def packageCode(profile: String, pkg: String, container: String, parentType: Option[String]) = ???
+ //override def writeToFile(profile: String, folder: String, pkg: String, container: String, fileName: String) = ???
+}
+
+class TableGenerator(pkg: String,
+ fullDatabaseModel: Model,
+ schemaOnlyModel: Model,
+ manualForeignKeys: Map[(String, String), (String, String)],
+ override val parentType: Option[String],
+ idType: Option[String],
+ override val headerComment: String,
+ schemaImports: List[String],
+ typeReplacements: Map[String, String],
+ schemaName: String
+)
+ extends Generator(pkg,
+ fullDatabaseModel,
+ schemaOnlyModel,
+ manualForeignKeys,
+ parentType,
+ idType,
+ headerComment,
+ schemaImports,
+ typeReplacements) {
+
+ override def Table = new TableO(_) {
+ override def EntityType = new EntityType {
+ override def enabled = false
+ }
+ override def TableClass = new TableClass {
+ override def elementType = s"$schemaName.${super.elementType}"
+ override def optionEnabled = false
+ }
+ }
+}
diff --git a/src/main/scala/OutputHelpers.scala b/src/main/scala/OutputHelpers.scala
index ce22f2a..82eabd1 100644
--- a/src/main/scala/OutputHelpers.scala
+++ b/src/main/scala/OutputHelpers.scala
@@ -15,7 +15,7 @@ trait OutputHelpers extends slick.codegen.OutputHelpers {
|$imports
|
|/** Stand-alone Slick data model for immediate use */
- |object $container extends {
+ |package object $container extends {
| val profile = $profile
|} with $traitName
|