【发布时间】:2013-08-09 17:08:33
【问题描述】:
我有两个Options:
val name: Option[String] = ...
val shared: Option[Boolean] = ...
如果上面的值为Some,我想构建一个UPDATE 查询SETs 这些字段,但如果它们是None,则保持不变。
我已经设法做到了这一点,但我不太热衷于检查逗号,如果我需要添加额外的列,它不会扩展。我也不太热衷于使用var。
var query = Q.u + "UPDATE wishlist SET"
if(name.isDefined) query = query + " name = " +? name + (if (share.isDefined) ", " else "")
if(shared.isDefined) query = query + " shared = " +? share
如果我不关心 SQL 注入,我可以执行以下操作:
val fields = List(
name.map(n => s"name = '$n'"),
shared.map(e => s"shared = $e")
).flatten
s"UPDATE wishlist SET ${fields.mkString(", ")}"
问题:有没有更好的方法来使用 Slick 的普通 SQL/String 插值来做到这一点,还是我唯一的选择是转向提升嵌入式?
【问题讨论】: