mechairoi/slick-for-update-sample · GitHub
Slcik の lifted embedding で 無理やり FOR UPDATE
できようにするサンプル
slick-for-update-sample/Driver.scala at master · mechairoi/slick-for-update-sample · GitHub
みたいに PostgresDriver を継承した MyPostgresDriver を作って,
import MyPostgresDriver.simple._ class CoffeesForUpdate(tag: Tag) extends Coffees(tag) with ForUpdateTable val coffeesForUpdate = TableQuery[CoffeesForUpdate]
val q = for { c <- coffeesForUpdate if c.price < 9.0 s <- suppliers if s.id === c.supID } yield (c.name, s.name) q.list
のように書くと
select x2."COF_NAME", x3."SUP_NAME" from "COFFEES" x2, "SUPPLIERS" x3 where (x2."PRICE" < 9.0) and (x3."SUP_ID" = x2."SUP_ID") for update of x2
みたいにちゃんとFOR UPDATE
するクエリが吐かれる。
FOR UPDATE
は DBMS によって文法が結構違うのでリポジトリのは PostgreSQL でしか使えない。