postgresql - 返回 Slick 中的更新和删除查询
问题描述
我正在尝试调整这个问题的巧妙解决方案,以处理 Postgres 中的任意更新和删除查询。当结果查询中只有一个绑定参数时,它运行良好。例如:
users.filter(_.name === "Ann").map(_.name).updateReturning(users.map(_.name), "Jane")
产生工作报表
update "users" set "name" = ? where "users"."name" = 'Ann' returning "name"
但是,如果有多个参数,则会失败,例如在此查询中:
users.filter(_.created < OffsetDateTime.now).map(_.name).updateReturning(users.map(_.name), "Jane")
=>
update "users" set "name" = ? where "users"."created" < ? returning "name"
例如,其中“created”具有OffsetDateTime
类型。我还没有弄清楚 Slick 何时将文字参数值放入查询中以及何时离开“?” 供 JDBC 填充(也许当参数是对象而不是原语时?)。所以它不必是 OffsetDateTime,只要是 vanilla Slick 或 slick-pg 支持的任何其他复杂类型。
在发布的解决方案中 newslick.sql.SqlStreamingAction
是使用slick.jdbc.SQLActionBuilder
which 接受 single构建的slick.jdbc.SetParameter[Unit]
。有人可以解释它是如何工作的,以及如何构造它以不仅接受第一个查询参数,而且接受原始查询中定义的所有参数?