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

Updated code and dependencies for scala 2.12.4 #14

Closed
wants to merge 2 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 11 additions & 8 deletions build.sbt
Original file line number Diff line number Diff line change
Expand Up @@ -31,22 +31,25 @@ lazy val publishSettings = Seq(
</developers>
)

lazy val `launaskil-codegen` =
enablePlugins(PackPlugin)
import xerial.sbt.pack.PackPlugin.packSettings

lazy val `scala-db-codegen` =
(project in file("."))
.settings(packSettings)
.settings(publishSettings)
.settings(
name := "scala-db-codegen",
organization := "com.geirsson",
scalaVersion := "2.11.8",
scalaVersion := "2.12.4",
version := com.geirsson.codegen.Versions.nightly,
packMain := Map("scala-db-codegen" -> "com.geirsson.codegen.Codegen"),
libraryDependencies ++= Seq(
"com.geirsson" %% "scalafmt-core" % "0.3.0",
"io.getquill" %% "quill-core" % "0.8.0",
"com.h2database" % "h2" % "1.4.192",
"org.postgresql" % "postgresql" % "9.4-1201-jdbc41",
"com.github.alexarchambault" %% "case-app" % "1.0.0-RC3",
"org.scalatest" %% "scalatest" % "3.0.0" % "test"
"com.geirsson" %% "scalafmt-core" % "1.2.0",
"io.getquill" %% "quill-core" % "2.2.0",
"com.h2database" % "h2" % "1.4.196",
"org.postgresql" % "postgresql" % "42.1.4",
"com.github.alexarchambault" %% "case-app" % "1.2.0",
"org.scalatest" %% "scalatest" % "3.0.4" % "test"
)
)
2 changes: 1 addition & 1 deletion project/build.properties
Original file line number Diff line number Diff line change
@@ -1 +1 @@
sbt.version=0.13.12
sbt.version=1.0.3
6 changes: 3 additions & 3 deletions project/plugins.sbt
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
addSbtPlugin("org.xerial.sbt" % "sbt-sonatype" % "1.1")
addSbtPlugin("com.jsuereth" % "sbt-pgp" % "1.0.0")
addSbtPlugin("org.xerial.sbt" % "sbt-pack" % "0.8.0")
addSbtPlugin("org.xerial.sbt" % "sbt-sonatype" % "2.0")
addSbtPlugin("com.jsuereth" % "sbt-pgp" % "1.1.0")
addSbtPlugin("org.xerial.sbt" % "sbt-pack" % "0.9.2")
67 changes: 33 additions & 34 deletions src/main/scala/com/geirsson/codegen/Codegen.scala
Original file line number Diff line number Diff line change
Expand Up @@ -12,9 +12,8 @@ import caseapp.AppOf
import caseapp._
import com.typesafe.scalalogging.Logger
import io.getquill.NamingStrategy
import org.scalafmt.FormatResult
import org.scalafmt.Scalafmt
import org.scalafmt.ScalafmtStyle
import org.scalafmt.{Formatted, Scalafmt}
import org.scalafmt.config.ScalafmtConfig

case class Error(msg: String) extends Exception(msg)

Expand Down Expand Up @@ -42,9 +41,7 @@ case class CodegenOptions(
@HelpMessage(
"Write generated code to this filename. Prints to stdout if not set."
) file: Option[String] = None
) extends App {
Codegen.cliRun(this)
}
) { }

case class Codegen(options: CodegenOptions, namingStrategy: NamingStrategy) {
import Codegen._
Expand All @@ -59,19 +56,25 @@ case class Codegen(options: CodegenOptions, namingStrategy: NamingStrategy) {
}

def getForeignKeys(db: Connection): Set[ForeignKey] = {
val foreignKeys =
db.getMetaData.getExportedKeys(null, options.schema, null)
results(foreignKeys).map { row =>
ForeignKey(
from = SimpleColumn(
tableName = row.getString(FK_TABLE_NAME),
columnName = row.getString(FK_COLUMN_NAME)
),
to = SimpleColumn(
tableName = row.getString(PK_TABLE_NAME),
columnName = row.getString(PK_COLUMN_NAME)
val allTables =
results(db.getMetaData.getTables(null, options.schema, "%", Array("TABLE"))).map { row =>
row.getString(TABLE_NAME)
}

allTables.flatMap { table =>
val foreignKeys = db.getMetaData.getExportedKeys(null, options.schema, table)
results(foreignKeys).map { row =>
ForeignKey(
from = SimpleColumn(
tableName = row.getString(FK_TABLE_NAME),
columnName = row.getString(FK_COLUMN_NAME)
),
to = SimpleColumn(
tableName = row.getString(PK_TABLE_NAME),
columnName = row.getString(PK_COLUMN_NAME)
)
)
)
}
}.toSet
}

Expand Down Expand Up @@ -178,7 +181,7 @@ case class Codegen(options: CodegenOptions, namingStrategy: NamingStrategy) {
def toSimple = references.getOrElse(SimpleColumn(tableName, columnName))

def toClass: String = {
s"case class ${namingStrategy.table(columnName)}(value: $scalaType) extends AnyVal with WrappedValue[$scalaType]"
s"case class ${namingStrategy.table(columnName)}(value: $scalaType) extends AnyVal"
}
}

Expand Down Expand Up @@ -218,7 +221,7 @@ case class Codegen(options: CodegenOptions, namingStrategy: NamingStrategy) {
}
}

object Codegen extends AppOf[CodegenOptions] {
object Codegen extends CaseApp[CodegenOptions] {
val TABLE_NAME = "TABLE_NAME"
val COLUMN_NAME = "COLUMN_NAME"
val TYPE_NAME = "TYPE_NAME"
Expand All @@ -235,25 +238,21 @@ object Codegen extends AppOf[CodegenOptions] {
}
}

def cliRun(codegenOptions: CodegenOptions,
outstream: PrintStream = System.out): Unit = {
try {
run(codegenOptions, outstream)
} catch {
case Error(msg) =>
System.err.println(msg)
System.exit(1)
def run(codegenOptions: CodegenOptions,
remainingArgs: RemainingArgs): Unit = {
val outstream = System.out

if (remainingArgs.args.size != 0) {
outstream.println("Invalid options specified")
CaseApp.printUsage()
}
}

def run(codegenOptions: CodegenOptions,
outstream: PrintStream = System.out): Unit = {
codegenOptions.file.foreach { x =>
outstream.println("Starting...")
}

val startTime = System.currentTimeMillis()
Class.forName(codegenOptions.jdbcDriver)
Class.forName(codegenOptions.jdbcDriver).newInstance()
val db: Connection =
DriverManager.getConnection(codegenOptions.url,
codegenOptions.user,
Expand All @@ -273,9 +272,9 @@ object Codegen extends AppOf[CodegenOptions] {
val tables = codegen.getTables(db, foreignKeys)
val generatedCode =
codegen.tables2code(tables, SnakeCaseReverse, codegenOptions)
val codeStyle = ScalafmtStyle.defaultWithAlign.copy(maxColumn = 120)
val codeStyle = ScalafmtConfig.defaultWithAlign.copy(maxColumn = 120)
val code = Scalafmt.format(generatedCode, style = codeStyle) match {
case FormatResult.Success(x) => x
case Formatted.Success(x) => x
case _ => generatedCode
}
codegenOptions.file match {
Expand Down
2 changes: 1 addition & 1 deletion src/main/scala/com/geirsson/codegen/TypeMap.scala
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import caseapp.core.ArgParser

object TypeMap {
implicit val parser: ArgParser[TypeMap] =
ArgParser.instance[TypeMap] { s =>
ArgParser.instance[TypeMap] ("Type map") { s =>
try {
val pairs = s.split(";").map { pair =>
val from :: to :: Nil = pair.split(",", 2).toList
Expand Down
6 changes: 3 additions & 3 deletions src/test/scala/com/geirsson/codegen/CodegenTest.scala
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,10 @@ import java.nio.file.Files
import java.nio.file.Paths
import java.sql.DriverManager

import caseapp.CaseApp
import caseapp.{CaseApp, RemainingArgs}
import org.scalatest.FunSuite

class CodegenTest extends FunSuite {
class sbtCodegenTest extends FunSuite {

def structure(code: String): String = {
import scala.meta._
Expand Down Expand Up @@ -100,7 +100,7 @@ class CodegenTest extends FunSuite {
)
val baos = new ByteArrayOutputStream()
val ps = new PrintStream(baos)
Codegen.run(options, ps)
Codegen.run(options, RemainingArgs(Seq(), Seq()))
val obtained = new String(baos.toByteArray, StandardCharsets.UTF_8)
println(obtained)
assert(structure(expected) == structure(obtained))
Expand Down
13 changes: 6 additions & 7 deletions src/test/scala/com/geirsson/codegen/Tables.scala
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
package com.geirsson.codegen
import io.getquill.WrappedValue

//noinspection ScalaStyle
object Tables {
Expand All @@ -20,9 +19,9 @@ object Tables {
authorId.map(TestUser.Id.apply),
isPublished.map(IsPublished.apply))
}
case class Id(value: Int) extends AnyVal with WrappedValue[Int]
case class ArticleUniqueId(value: java.util.UUID) extends AnyVal with WrappedValue[java.util.UUID]
case class IsPublished(value: Boolean) extends AnyVal with WrappedValue[Boolean]
case class Id(value: Int) extends AnyVal
case class ArticleUniqueId(value: java.util.UUID) extends AnyVal
case class IsPublished(value: Boolean) extends AnyVal
}

/////////////////////////////////////////////////////
Expand All @@ -33,7 +32,7 @@ object Tables {
def create(articleId: Int, active: Option[Boolean]): ArticleActive = {
ArticleActive(Article.Id(articleId), active.map(Active.apply))
}
case class Active(value: Boolean) extends AnyVal with WrappedValue[Boolean]
case class Active(value: Boolean) extends AnyVal
}

/////////////////////////////////////////////////////
Expand All @@ -44,7 +43,7 @@ object Tables {
def create(id: Int, name: Option[String]): TestUser = {
TestUser(Id(id), name.map(Name.apply))
}
case class Id(value: Int) extends AnyVal with WrappedValue[Int]
case class Name(value: String) extends AnyVal with WrappedValue[String]
case class Id(value: Int) extends AnyVal
case class Name(value: String) extends AnyVal
}
}