ppx_rapper は OCaml で SQL を扱う時の便利ライブラリで、 SQL を書くと PPX によってそれを Caqti を使って RDB にアクセスする OCaml コードに変換してくれます。個人的によく使っているのですが、2 年ほどメンテがされておらず使い勝手が悪いところがあるので、 適当にフォークして修正したり機能を追加したりしています。
追加した機能の一つに affected rows を取得できるようにするというものがあります。
UPDATE や DELETE を実行した際に何行影響を受けたかを取得するためのもので、以下のように使えます:
let many_arg_execute_with_affected_count =
[%rapper
execute_with_affected_count
{sql|
UPDATE users
SET (username, email, bio) = (%string{username}, %string{email}, %string?{bio})
WHERE id = %int{id}
|sql}]
この機能が入っているフォーク版の ppx_rapper は waq-external-repo 経由で簡単に使えます。
custom repository を使う設定をした上で ppx_rapper.3.1.0+waq.3 以降を使ってください。