Skip to content
This repository was archived by the owner on Oct 14, 2018. It is now read-only.

Commit 91c390b

Browse files
committed
Fix for use with mysql:
Mysql require table for getExportedKeys. Otherwice it throws exception Mysql return types in upper case
1 parent d83b224 commit 91c390b

File tree

1 file changed

+18
-16
lines changed

1 file changed

+18
-16
lines changed

Diff for: src/main/scala/com/geirsson/codegen/Codegen.scala

+18-16
Original file line numberDiff line numberDiff line change
@@ -58,9 +58,9 @@ case class Codegen(options: CodegenOptions, namingStrategy: NamingStrategy) {
5858
}
5959
}
6060

61-
def getForeignKeys(db: Connection): Set[ForeignKey] = {
61+
def getForeignKeys(db: Connection, tableName: String): Set[ForeignKey] = {
6262
val foreignKeys =
63-
db.getMetaData.getExportedKeys(null, options.schema, null)
63+
db.getMetaData.getExportedKeys(null, options.schema, tableName)
6464
results(foreignKeys).map { row =>
6565
ForeignKey(
6666
from = SimpleColumn(
@@ -79,12 +79,25 @@ case class Codegen(options: CodegenOptions, namingStrategy: NamingStrategy) {
7979
System.err.println(s"[${Console.YELLOW}warn${Console.RESET}] $msg")
8080
}
8181

82-
def getTables(db: Connection, foreignKeys: Set[ForeignKey]): Seq[Table] = {
82+
def getTables(db: Connection): Seq[Table] = {
8383
val rs: ResultSet =
8484
db.getMetaData.getTables(null, options.schema, "%", Array("TABLE"))
8585
results(rs).flatMap { row =>
8686
val name = row.getString(TABLE_NAME)
8787
if (!excludedTables.contains(name)) {
88+
89+
val plainForeignKeys = getForeignKeys(db, name)
90+
91+
val foreignKeys = plainForeignKeys.map { fk =>
92+
93+
def resolve(col: SimpleColumn): SimpleColumn = {
94+
plainForeignKeys.find(f => f.from == col).map(_.to).getOrElse(col)
95+
}
96+
97+
ForeignKey(fk.from, resolve(fk.to))
98+
}
99+
100+
88101
val columns = getColumns(db, name, foreignKeys)
89102
val mappedColumns = columns.filter(_.isRight).map(_.right.get)
90103
val unmappedColumns = columns.filter(_.isLeft).map(_.left.get)
@@ -110,7 +123,7 @@ case class Codegen(options: CodegenOptions, namingStrategy: NamingStrategy) {
110123
val simpleColumn = SimpleColumn(tableName, colName)
111124
val ref = foreignKeys.find(_.from == simpleColumn).map(_.to)
112125

113-
val typ = cols.getString(TYPE_NAME)
126+
val typ = cols.getString(TYPE_NAME).toLowerCase
114127
columnType2scalaType.get(typ).map { scalaType =>
115128
Right(Column(
116129
tableName,
@@ -259,18 +272,7 @@ object Codegen extends AppOf[CodegenOptions] {
259272
codegenOptions.user,
260273
codegenOptions.password)
261274
val codegen = Codegen(codegenOptions, SnakeCaseReverse)
262-
val plainForeignKeys = codegen.getForeignKeys(db)
263-
264-
val foreignKeys = plainForeignKeys.map { fk =>
265-
266-
def resolve(col: codegen.SimpleColumn): codegen.SimpleColumn = {
267-
plainForeignKeys.find(f => f.from == col).map(_.to).getOrElse(col)
268-
}
269-
270-
codegen.ForeignKey(fk.from, resolve(fk.to))
271-
}
272-
273-
val tables = codegen.getTables(db, foreignKeys)
275+
val tables = codegen.getTables(db)
274276
val generatedCode =
275277
codegen.tables2code(tables, SnakeCaseReverse, codegenOptions)
276278
val codeStyle = ScalafmtStyle.defaultWithAlign.copy(maxColumn = 120)

0 commit comments

Comments
 (0)