blog.anqou.net
rss
author
tags

ppx_rapper を改造し affected rows を取得する

ppx_rapper は OCaml で SQL を扱う時の便利ライブラリで、 SQL を書くと PPX によってそれを Caqti を使って RDB にアクセスする OCaml コードに変換してくれます。個人的によく使っているのですが、2 年ほどメンテがされておらず使い勝手が悪いところがあるので、 適当にフォークして修正したり機能を追加したりしています。

追加した機能の一つに affected rows を取得できるようにするというものがあります。 UPDATEDELETE を実行した際に何行影響を受けたかを取得するためのもので、以下のように使えます:

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 以降を使ってください。