今更ペルソナ5を始めました。
背景
MySQLのカラムに予約語を使う場合、バッククオートで以下のように囲むことが一般的です。
create table log(id int auto_increment, user_id int, from datetime, to datetime); insert into log(`user_id`, `from`, `to`) values(1, "2017-08-24 00:00:01", "2017-08-24 23:59:59");
しかし、ScalikeJDBCでQueryDSLを使ってInsert文を書こうとすると、バッククオートが入りません。
注) “org.scalikejdbc” %% “scalikejdbc” % “3.0.1”
対応
以下のようにします。
case class Log(id: Int, userId: Int, from: String, to: String) object Log extends SQLSyntaxSupport[Log] { } DB.localTx { implicit s => withSQL { val values = Seq( sqls"`user_id`" -> userId, sqls"`from`" -> from, sqls"`to`" -> to insert.into(Log).namedValues(values: _*) }.updateAndReturnGeneratedKey.apply() }
DSL対応誰か作ってほしー(他人任せ