O/R Mapper においてはページャーの実装方法は3種類かんがえられます。
DBIx::Class
勝手に処理してくれるので楽。
$rs->pager();
のように、クエリをうっているっぽくないのに裏でうってるので、重い処理なのにおもそうにみえなくてさがすのが面倒。お気軽につかえすぎて危険。
HAVING などをつかうクエリの場合、そもそもただしい値がとれてないのに、なんとなくうごいてしまう。まちがった値をかえす API を標準でつけるのはいかがなものか。
得に HAVING などの処理がうまくできないのは自明なので、こういう実装は僕は好きではないです。
→ Teng にはついてない。
MySQL 限定。
HAVING とかもうまくあつかえる。ちゃんとうごく。
MySQL でしかつかえない。
速度がなんか妙におそかったりするらしい。MySQL の実装がダメなのかもしれない。
(僕は速度がもとめられるケースでつかったことないのでしりません。)
10行データがほしいときに LIMIT 11 して、11行目がとれたら次のページがあると判断する方式。
一回のクエリですむ。はやい。
total の行数がとれないので、ページャーの表示具合に制限がある。が、こういうタイプのページャーをつかわなければならないほどでかいデータをあつかう必要がある場合、全体の件数を表示しても意味がない場合がおおいので、問題ないかとおもいます。
→ 僕は通常これをつかっています。
自力でがんばるのがなんだかんだいっても安全確実ではあります。