У меня есть два Option
s:
val name: Option[String] = ...
val shared: Option[Boolean] = ...
Я хотел бы построить запрос UPDATE
, который SET
s эти поля, если вышеуказанные значения Some
, но оставить их без изменений, если они 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(", ")}"
Вопрос: есть ли более удобный способ сделать это с помощью простой интерполяции SQL/String от Slick, или это мой единственный вариант перейти на встроенный с поднятым номером?