Skip to content

Commit

Permalink
add columnNameToFieldName setting. quote reserved words
Browse files Browse the repository at this point in the history
  • Loading branch information
xuwei-k committed Mar 3, 2015
1 parent 0eff3f2 commit 97dcb2e
Show file tree
Hide file tree
Showing 5 changed files with 35 additions and 19 deletions.
6 changes: 5 additions & 1 deletion project/MimaSettings.scala
Expand Up @@ -134,7 +134,11 @@ object MimaSettings {
exclude[MissingMethodProblem]("scalikejdbc.OneToManies" + n + "SQL.this"),
exclude[MissingMethodProblem]("scalikejdbc.OneToManies" + n + "SQLToOption.output"),
exclude[MissingMethodProblem]("scalikejdbc.OneToManies" + n + "SQLToOption.this")
)}
)} ++ Seq(
// since 2.2.5
exclude[MissingMethodProblem]("scalikejdbc.mapper.CodeGenerator.scalikejdbc$mapper$CodeGenerator$$toCamelCase"),
exclude[MissingMethodProblem]("scalikejdbc.mapper.CodeGenerator.scalikejdbc$mapper$CodeGenerator$$toProperCase")
)
}

val mimaSettings = MimaPlugin.mimaDefaultSettings ++ Seq(
Expand Down
Expand Up @@ -67,10 +67,7 @@ class CodeGenerator(table: Table, specifiedClassName: Option[String] = None)(imp

case class ColumnInScala(underlying: Column) {

lazy val nameInScala: String = {
val camelCase: String = toCamelCase(underlying.name)
camelCase.head.toLower + camelCase.tail
}
lazy val nameInScala: String = config.columnNameToFieldName(underlying.name)

lazy val rawTypeInScala: String = underlying.dataType match {
case JavaSqlTypes.ARRAY => TypeName.AnyArray
Expand Down Expand Up @@ -694,16 +691,6 @@ class CodeGenerator(table: Table, specifiedClassName: Option[String] = None)(imp
objectPart + eol
}

private def toCamelCase(s: String): String = s.split("_").foldLeft("") {
(camelCaseString, part) =>
camelCaseString + toProperCase(part)
}

private def toProperCase(s: String): String = {
if (s == null || s.trim.size == 0) ""
else s.substring(0, 1).toUpperCase(en) + s.substring(1).toLowerCase(en)
}

// -----------------------
// Spec
// -----------------------
Expand Down
Expand Up @@ -26,7 +26,8 @@ case class GeneratorConfig(srcDir: String = "src/main/scala",
autoConstruct: Boolean = false,
defaultAutoSession: Boolean = true,
dateTimeClass: DateTimeClass = DateTimeClass.JodaDateTime,
tableNameToClassName: String => String = GeneratorConfig.toCamelCase)
tableNameToClassName: String => String = GeneratorConfig.toCamelCase,
columnNameToFieldName: String => String = GeneratorConfig.lowerCamelCase andThen GeneratorConfig.quoteReservedWord)

object GeneratorConfig {
private def toProperCase(s: String): String = {
Expand All @@ -39,6 +40,28 @@ object GeneratorConfig {
(camelCaseString, part) =>
camelCaseString + toProperCase(part)
}

val reservedWords: Set[String] = Set(
"abstract", "case", "catch", "class", "def",
"do", "else", "extends", "false", "final",
"finally", "for", "forSome", "if", "implicit",
"import", "lazy", "match", "new", "null", "macro",
"object", "override", "package", "private", "protected",
"return", "sealed", "super", "then", "this", "throw",
"trait", "try", "true", "type", "val",
"var", "while", "with", "yield"
)

val quoteReservedWord: String => String = {
name =>
if (reservedWords(name)) "`" + name + "`"
else name
}

val lowerCamelCase: String => String =
GeneratorConfig.toCamelCase.andThen {
camelCase => camelCase.head.toLower + camelCase.tail
}
}

sealed abstract class DateTimeClass(private[scalikejdbc] val name: String) extends Product with Serializable {
Expand Down
Expand Up @@ -39,7 +39,8 @@ object SbtPlugin extends Plugin {
autoConstruct: Boolean,
defaultAutoSession: Boolean,
dateTimeClass: DateTimeClass,
tableNameToClassName: String => String)
tableNameToClassName: String => String,
columnNameToFieldName: String => String)

private[this] def getString(props: Properties, key: String): Option[String] =
Option(props.get(key)).map { value =>
Expand Down Expand Up @@ -72,7 +73,8 @@ object SbtPlugin extends Plugin {
dateTimeClass = getString(props, "generator.dateTimeClass").map {
name => DateTimeClass.map.getOrElse(name, sys.error("does not support " + name))
}.getOrElse(defaultConfig.dateTimeClass),
defaultConfig.tableNameToClassName
defaultConfig.tableNameToClassName,
defaultConfig.columnNameToFieldName
)
}

Expand Down
Expand Up @@ -19,7 +19,7 @@ TaskKey[Unit]("createTestDatabase") := {
Class.forName(setting.driver)
ConnectionPool.singleton(setting.url, setting.username, setting.password)
DB.autoCommit { implicit s =>
sql"create table if not exists programmers (id SERIAL PRIMARY KEY, name varchar(128), t1 timestamp not null, t2 date, t3 time)"
sql"create table if not exists programmers (id SERIAL PRIMARY KEY, name varchar(128), t1 timestamp not null, t2 date, t3 time, type int)"
.execute.apply()
}
}
Expand Down

0 comments on commit 97dcb2e

Please sign in to comment.