From 929aa3f88643f4e4746e6016f9ad962b727bce2c Mon Sep 17 00:00:00 2001 From: Tim Gushue Date: Mon, 14 Nov 2016 17:06:15 -0800 Subject: TM-251 bug(no default table import) createModel will gen whole DB if codegenSchemaWhitelist is empty --- src/main/scala/NamespacedCodegen.scala | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/src/main/scala/NamespacedCodegen.scala b/src/main/scala/NamespacedCodegen.scala index d73fc3e..b435830 100644 --- a/src/main/scala/NamespacedCodegen.scala +++ b/src/main/scala/NamespacedCodegen.scala @@ -217,13 +217,17 @@ object SchemaParser { def createModel(jdbcProfile: JdbcProfile, mappedSchemas: Map[String, List[String]]): DBIO[Model] = { val allTables: DBIO[Vector[MTable]] = MTable.getTables - val filteredTables: DBIO[Vector[MTable]] = allTables.map( - (tables: Vector[MTable]) => tables.filter(table => - table.name.schema.flatMap(mappedSchemas.get).exists(ts => - ts.isEmpty || ts.contains(table.name.name)) + if (mappedSchemas.isEmpty) { + jdbcProfile.createModel(Some(allTables)) + } else { + val filteredTables: DBIO[Vector[MTable]] = allTables.map( + (tables: Vector[MTable]) => tables.filter(table => + table.name.schema.flatMap(mappedSchemas.get).exists(ts => + ts.isEmpty || ts.contains(table.name.name)) + ) ) - ) - jdbcProfile.createModel(Some(filteredTables)) + jdbcProfile.createModel(Some(filteredTables)) + } } } -- cgit v1.2.3 From b73041763e7e3ecb0e046c7c5ce117f73ba36f3c Mon Sep 17 00:00:00 2001 From: Tim Gushue Date: Tue, 15 Nov 2016 15:07:38 -0800 Subject: TM-251 refactor(codegen) Wrapped the whitelist in an option --- src/main/scala/CodegenPlugin.scala | 2 +- src/main/scala/NamespacedCodegen.scala | 22 ++++++++++++---------- 2 files changed, 13 insertions(+), 11 deletions(-) diff --git a/src/main/scala/CodegenPlugin.scala b/src/main/scala/CodegenPlugin.scala index 366ef19..2b5ceb5 100644 --- a/src/main/scala/CodegenPlugin.scala +++ b/src/main/scala/CodegenPlugin.scala @@ -19,7 +19,7 @@ object CodegenPlugin extends AutoPlugin { Generator.run( new java.net.URI(codegenURI.value), codegenPackage.value, - codegenSchemaWhitelist.value, + Option(codegenSchemaWhitelist.value), codegenOutputPath.value, codegenForeignKeys.value ) diff --git a/src/main/scala/NamespacedCodegen.scala b/src/main/scala/NamespacedCodegen.scala index b435830..4487361 100644 --- a/src/main/scala/NamespacedCodegen.scala +++ b/src/main/scala/NamespacedCodegen.scala @@ -16,14 +16,14 @@ import slick.model.{Column, Model, Table} object Generator { - def run(uri: URI, pkg: String, schemaNames: List[String], outputPath: String, manualForeignKeys: Map[(String, String), (String, String)]) = { + def run(uri: URI, pkg: String, schemaNames: Option[List[String]], outputPath: String, manualForeignKeys: Map[(String, String), (String, String)]) = { val dc: DatabaseConfig[JdbcProfile] = DatabaseConfig.forURI[JdbcProfile](uri) - val parsedSchemas: Map[String, List[String]] = SchemaParser.parse(schemaNames) - val dbModel: Model = Await.result(dc.db.run(SchemaParser.createModel(dc.driver, parsedSchemas)), Duration.Inf) + val parsedSchemasOpt: Option[Map[String, List[String]]] = SchemaParser.parse(schemaNames) + val dbModel: Model = Await.result(dc.db.run(SchemaParser.createModel(dc.driver, parsedSchemasOpt)), Duration.Inf) val generator = new Generator(uri, pkg, dbModel, outputPath, manualForeignKeys) val generatedCode = generator.code - parsedSchemas.keys.map(schemaName => FileHelpers.schemaOutputPath(outputPath, schemaName)) + parsedSchemasOpt.getOrElse(Map()).keys.map(schemaName => FileHelpers.schemaOutputPath(outputPath, schemaName)) } } @@ -209,17 +209,19 @@ object SchemaParser { tcMappings.map{case (from, to) => ({getTableColumn(from); from}, getTableColumn(to))} } - def parse(schemaTableNames: List[String]): Map[String, List[String]] = - schemaTableNames.map(_.split('.')) + def parse(schemaTableNamesOpt: Option[List[String]]): Option[Map[String, List[String]]] = + schemaTableNamesOpt.map( tNames => + tNames.map(_.split('.')) .groupBy(_.head) .mapValues(_.flatMap(_.tail)) + ) - def createModel(jdbcProfile: JdbcProfile, mappedSchemas: Map[String, List[String]]): DBIO[Model] = { + def createModel(jdbcProfile: JdbcProfile, mappedSchemasOpt: Option[Map[String, List[String]]]): DBIO[Model] = { val allTables: DBIO[Vector[MTable]] = MTable.getTables - if (mappedSchemas.isEmpty) { - jdbcProfile.createModel(Some(allTables)) - } else { + if (mappedSchemasOpt.isEmpty) jdbcProfile.createModel(Some(allTables)) + else { + val mappedSchemas = mappedSchemasOpt.get val filteredTables: DBIO[Vector[MTable]] = allTables.map( (tables: Vector[MTable]) => tables.filter(table => table.name.schema.flatMap(mappedSchemas.get).exists(ts => -- cgit v1.2.3 From adc677304195a9d0f797aa62f636c00ee9278b61 Mon Sep 17 00:00:00 2001 From: Stewart Stewart Date: Tue, 15 Nov 2016 15:56:17 -0800 Subject: slight style refactors --- src/main/scala/NamespacedCodegen.scala | 22 ++++++++-------------- 1 file changed, 8 insertions(+), 14 deletions(-) diff --git a/src/main/scala/NamespacedCodegen.scala b/src/main/scala/NamespacedCodegen.scala index 4487361..3ab22dc 100644 --- a/src/main/scala/NamespacedCodegen.scala +++ b/src/main/scala/NamespacedCodegen.scala @@ -18,7 +18,7 @@ object Generator { def run(uri: URI, pkg: String, schemaNames: Option[List[String]], outputPath: String, manualForeignKeys: Map[(String, String), (String, String)]) = { val dc: DatabaseConfig[JdbcProfile] = DatabaseConfig.forURI[JdbcProfile](uri) - val parsedSchemasOpt: Option[Map[String, List[String]]] = SchemaParser.parse(schemaNames) + val parsedSchemasOpt: Option[Map[String, List[String]]] = schemaNames.map(SchemaParser.parse) val dbModel: Model = Await.result(dc.db.run(SchemaParser.createModel(dc.driver, parsedSchemasOpt)), Duration.Inf) val generator = new Generator(uri, pkg, dbModel, outputPath, manualForeignKeys) @@ -209,27 +209,21 @@ object SchemaParser { tcMappings.map{case (from, to) => ({getTableColumn(from); from}, getTableColumn(to))} } - def parse(schemaTableNamesOpt: Option[List[String]]): Option[Map[String, List[String]]] = - schemaTableNamesOpt.map( tNames => - tNames.map(_.split('.')) + def parse(schemaTableNames: List[String]): Map[String, List[String]] = + schemaTableNames.map(_.split('.')) .groupBy(_.head) .mapValues(_.flatMap(_.tail)) - ) def createModel(jdbcProfile: JdbcProfile, mappedSchemasOpt: Option[Map[String, List[String]]]): DBIO[Model] = { val allTables: DBIO[Vector[MTable]] = MTable.getTables - if (mappedSchemasOpt.isEmpty) jdbcProfile.createModel(Some(allTables)) - else { - val mappedSchemas = mappedSchemasOpt.get - val filteredTables: DBIO[Vector[MTable]] = allTables.map( + val filteredTables = mappedSchemasOpt.map(mappedSchemas => + allTables.map( (tables: Vector[MTable]) => tables.filter(table => table.name.schema.flatMap(mappedSchemas.get).exists(ts => - ts.isEmpty || ts.contains(table.name.name)) - ) - ) - jdbcProfile.createModel(Some(filteredTables)) - } + ts.isEmpty || ts.contains(table.name.name))))) + + jdbcProfile.createModel(filteredTables orElse Some(allTables)) } } -- cgit v1.2.3 From d6a2e2265212bf7a38f9de7e8846bd1031827787 Mon Sep 17 00:00:00 2001 From: Stewart Stewart Date: Wed, 16 Nov 2016 13:51:53 -0800 Subject: add defaults for codegen parameters --- src/main/scala/CodegenPlugin.scala | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/main/scala/CodegenPlugin.scala b/src/main/scala/CodegenPlugin.scala index 2b5ceb5..8bde45d 100644 --- a/src/main/scala/CodegenPlugin.scala +++ b/src/main/scala/CodegenPlugin.scala @@ -19,10 +19,16 @@ object CodegenPlugin extends AutoPlugin { Generator.run( new java.net.URI(codegenURI.value), codegenPackage.value, - Option(codegenSchemaWhitelist.value), + Some(codegenSchemaWhitelist.value).filter(_.nonEmpty), codegenOutputPath.value, codegenForeignKeys.value ) } + + lazy val baseCodegenSettings: Seq[Def.Setting[_]] = Seq( + codegen := slickCodeGenTask.value, + codegenSchemaWhitelist := List.empty, + codegenForeignKeys := Map.empty + ) } } -- cgit v1.2.3