From ee0f1822447ec1ff84ecad2e2b9a19ce7dc37d36 Mon Sep 17 00:00:00 2001 From: Stewart Stewart Date: Fri, 9 Sep 2016 18:40:05 -0400 Subject: make manualForeignKeys a plugin parameter --- src/main/scala/CodegenPlugin.scala | 15 +++++++++++---- src/main/scala/NamespacedCodegen.scala | 19 ++----------------- 2 files changed, 13 insertions(+), 21 deletions(-) (limited to 'src/main/scala') diff --git a/src/main/scala/CodegenPlugin.scala b/src/main/scala/CodegenPlugin.scala index d6ac8c8..7b51fb8 100644 --- a/src/main/scala/CodegenPlugin.scala +++ b/src/main/scala/CodegenPlugin.scala @@ -4,18 +4,25 @@ import complete.DefaultParsers._ object CodegenPlugin extends AutoPlugin { override def requires = sbt.plugins.JvmPlugin + type TableColumn = (String, String) + object autoImport { lazy val genTables = TaskKey[Seq[File]]("gen-tables") - lazy val dbConfigURI = SettingKey[String]("uri for the database configuration") + lazy val uri = SettingKey[String]("uri for the database configuration") lazy val pkg = SettingKey[String]("package in which to place generated code") lazy val tablesFilename = SettingKey[String]("path for slick table models") lazy val rowsFilename = SettingKey[String]("path for row case classes") lazy val schemas = SettingKey[List[String]]("schemas and tables to process") + lazy val manualForeignKeys = SettingKey[Map[TableColumn, TableColumn]]("foreign key references to data models add manually") lazy val slickCodeGenTask = Def.task { - val uri = new java.net.URI(dbConfigURI.value) - - codegen.NamespacedCodegen.run(uri, pkg.value, tablesFilename.value, rowsFilename.value, schemas.value) + codegen.NamespacedCodegen.run( + new java.net.URI(uri.value), + pkg.value, + tablesFilename.value, + rowsFilename.value, + schemas.value, + manualForeignKeys.value) Seq(file(tablesFilename.value), file(rowsFilename.value)) } diff --git a/src/main/scala/NamespacedCodegen.scala b/src/main/scala/NamespacedCodegen.scala index b853e9a..220f4f2 100644 --- a/src/main/scala/NamespacedCodegen.scala +++ b/src/main/scala/NamespacedCodegen.scala @@ -41,22 +41,6 @@ object NamespacedCodegen { .get(t.name.schema.getOrElse("")) .fold(false)(ts => ts.isEmpty || ts.contains(t.name.name)))))) - val manualForeignKeys: Map[(String, String), (String, String)] = - Map( - ("portal.case_tumor_info", "patient_id") -> (("patients.patients", "patient_id")), - ("portal.case_tumor_info", "case_id") -> (("work_queues.reports", "case_id")), - ("portal.case_tumor_info", "cancer_id") -> (("patients.cancer", "cancer_id")), - ("confidential.join_pat", "patient_id") -> (("patients.patients", "patient_id")), - ("portal.case_tumor_info", "ordering_physician") -> (("patients.oncologists", "oncologist_id")), - ("patients.oncologists_case_permissions_view", "oncologist_id") -> (("patients.oncologists", "oncologist_id")), - ("patients.oncologists_case_permissions_view", "case_id") -> (("work_queues.reports", "case_id")), - ("case_accessioning.case_accessioning", "case_id") -> (("work_queues.reports", "case_id")), - ("case_accessioning.case_accessioning", "cancer_id") -> (("patients.cancer", "cancer_id")), - ("experiments.somatic_snvs_indels_filtered", "cancer_id") -> (("patients.cancer", "cancer_id")), - ("experiments.experiments", "case_id") -> (("work_queues.reports", "case_id")), - ("samples.samples", "case_id") -> (("work_queues.reports", "case_id")) // TODO: Several of these can be added in a PR on postgres. - ) - def references(dbModel: Model, tcMappings: Map[(String, String), (String, String)]): Map[(String, String), (Table, Column)] = { def getTableColumn(tc: (String, String)) : (Table, Column) = { val (tableName, columnName) = tc @@ -80,7 +64,8 @@ object NamespacedCodegen { pkg: String, filename: String, typesFilename: String, - schemaTableNames: List[String] + schemaTableNames: List[String], + manualForeignKeys: Map[(String, String), (String, String)] ): Unit = { val dc = DatabaseConfig.forURI[JdbcProfile](uri) val slickDriver = if(dc.driverIsObject) dc.driverName else "new " + dc.driverName -- cgit v1.2.3