find-persistent-objectsの取得データ絞込み

find-persistent-objectsメソッドは永続化されたクラスのオブジェクトを一括取得します。で、そのときに欲しいデータを絞り込む方法を調べてみました。SQLのWHERE句相当を指定させろ、ってお話。ちなみに動かして確認とかしていないので信用すると痛い目にあうかもしれません。そのときはゴメンナサイ。
絞込みを行う際の、条件を指定する引数のキーワードや指定方法はバックエンドに使用しているライブラリによって異なります。

  • Prevalenceの場合は :filterに述語を渡します。または、:slotと :valueを同時に指定することで「:SLOTの内容が:VALUEと一致するレコード」を取得できます。この場合、:testに述語を渡せば「一致」のチェックを変更することも出来ます(デフォルトは equal)。どちらも内部的には remove-if-notが呼ばれます。ちなみに、:slot + :valueにより絞込みと :filterにより絞込みは別々に行われます(:slot :valueで remove-if-notした結果に対して、:filterの remove-if-notが評価される)ので、使うならどちらか片方の方がいいと思う。たぶん。
  • CLSQLの場合は、:WHEREに条件を渡します。内部的にはCLSQL:SELECTの :whereに渡されるので、CLSQLを使うときと同じような感覚で使えると思います(CLSQL使ったことないけど)。
  • Elephantの場合は :filter-fnに述語を渡します。内部的には、メモリ上でチェックしているっぽい。
  • memoryは :filterに述語を渡します。prevalenceのように :slotと :valueを使うことは出来ません。

何気に「データ数の少ない内は Prevalenceでサックリ作って、RDBMS使いたくなったら CLSQLに移行」とかすると大変そうですね!Weblocksは素人にも容赦無い!