From 793c81dd4678c7594189ebf6912890232c6e9112 Mon Sep 17 00:00:00 2001 From: Stewart Stewart Date: Tue, 30 May 2017 17:26:36 -0700 Subject: alter model so postgres `citext` has same length options as `text` --- src/main/scala/SchemaParser.scala | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/src/main/scala/SchemaParser.scala b/src/main/scala/SchemaParser.scala index 1186f11..b86990f 100644 --- a/src/main/scala/SchemaParser.scala +++ b/src/main/scala/SchemaParser.scala @@ -3,9 +3,22 @@ import scala.concurrent.ExecutionContext.Implicits.global import slick.dbio.DBIO import slick.driver.JdbcProfile import slick.jdbc.meta.MTable +import slick.profile.RelationalProfile.ColumnOption.Length +import slick.profile.SqlProfile.ColumnOption.SqlType import slick.{model => m} object SchemaParser { + + def citextNoLength(dbModel: m.Model): m.Model = + dbModel.copy(tables = dbModel.tables.map(table => + table.copy(columns = table.columns.map(column => + if (column.options contains SqlType("citext")) { + column.copy(options = column.options.filter { + case length: Length => false + case option => true + }) + } else column)))) + def references(dbModel: m.Model, tcMappings: Map[(String, String), (String, String)]) : Map[(String, String), (m.Table, m.Column)] = { @@ -55,6 +68,6 @@ object SchemaParser { } } - jdbcProfile.createModel(filteredTables) + jdbcProfile.createModel(filteredTables).map(citextNoLength) } } -- cgit v1.2.3 From 5c0454a10fe09582fe72efe5b5392d02eb517325 Mon Sep 17 00:00:00 2001 From: Stewart Stewart Date: Tue, 30 May 2017 17:36:12 -0700 Subject: reorganize model transformation code --- src/main/scala/Main.scala | 10 +++++----- src/main/scala/SchemaParser.scala | 5 +++-- src/main/scala/TypedIdTable.scala | 2 +- 3 files changed, 9 insertions(+), 8 deletions(-) diff --git a/src/main/scala/Main.scala b/src/main/scala/Main.scala index 5bd84d1..2602103 100644 --- a/src/main/scala/Main.scala +++ b/src/main/scala/Main.scala @@ -51,12 +51,13 @@ object Generator { val dc: DatabaseConfig[JdbcProfile] = DatabaseConfig.forURI[JdbcProfile](uri) val parsedSchemasOpt: Option[Map[String, List[String]]] = - schemaNames.map(SchemaParser.parse) + schemaNames.map(ModelTransformation.parseSchemaList) val imports = schemaImports.map("import " + _).mkString("\n") try { val dbModel: slick.model.Model = Await.result( - dc.db.run(SchemaParser.createModel(dc.driver, parsedSchemasOpt)), + dc.db.run( + ModelTransformation.createModel(dc.driver, parsedSchemasOpt)), Duration.Inf) parsedSchemasOpt.getOrElse(Map.empty).foreach { @@ -66,9 +67,8 @@ object Generator { .getFragment()}").driver""" val schemaOnlyModel = Await.result( - dc.db.run( - SchemaParser.createModel(dc.driver, - Some(Map(schemaName -> tables)))), + dc.db.run(ModelTransformation + .createModel(dc.driver, Some(Map(schemaName -> tables)))), Duration.Inf) val rowGenerator = new RowSourceCodeGenerator( diff --git a/src/main/scala/SchemaParser.scala b/src/main/scala/SchemaParser.scala index b86990f..6c3dd8c 100644 --- a/src/main/scala/SchemaParser.scala +++ b/src/main/scala/SchemaParser.scala @@ -7,7 +7,7 @@ import slick.profile.RelationalProfile.ColumnOption.Length import slick.profile.SqlProfile.ColumnOption.SqlType import slick.{model => m} -object SchemaParser { +object ModelTransformation { def citextNoLength(dbModel: m.Model): m.Model = dbModel.copy(tables = dbModel.tables.map(table => @@ -39,7 +39,8 @@ object SchemaParser { } } - def parse(schemaTableNames: List[String]): Map[String, List[String]] = + def parseSchemaList( + schemaTableNames: List[String]): Map[String, List[String]] = schemaTableNames .map(_.split('.')) .groupBy(_.head) diff --git a/src/main/scala/TypedIdTable.scala b/src/main/scala/TypedIdTable.scala index 2e58cd5..a0f3b57 100644 --- a/src/main/scala/TypedIdTable.scala +++ b/src/main/scala/TypedIdTable.scala @@ -8,7 +8,7 @@ class TypedIdSourceCodeGenerator( manualForeignKeys: Map[(String, String), (String, String)] ) extends SourceCodeGenerator(singleSchemaModel) { val manualReferences = - SchemaParser.references(databaseModel, manualForeignKeys) + ModelTransformation.references(databaseModel, manualForeignKeys) val modelTypeToColumnMaper = Map( "java.util.UUID" -> "uuidKeyMapper", -- cgit v1.2.3