北海道苫小牧市出身の初老PGが書くブログ

永遠のプログラマを夢見る、苫小牧市出身のおじさんのちらしの裏

Tengのソースを読む(3)

Teng-0.11*1の最後。プラグインを見てみる。

概要

第一回で見たようにPluginはTengクラスにメソッドを生やすものなので、どんなメソッドが生えるか見る。

Teng::Plugin::BulkInsert

複数列を同時に投入する bulk_insert を提供。Kohadaから持ってきた処理ぽい。MySQLか否かで処理が分かれていて、MySQLだとSQL::Makerの InsertMulti プラグインを用いて1文で複数行をinsertする。その他のDBの場合はひたすらinsert。TRIGERに関するコメントが入っているが、多分昔の名残。

Teng::Plugin::Count

カウントするcountを提供。SQL::Makerでカウント文を作って流すだけ。

Teng::Plugin::FindOrCreate

find_or_create を提供。single して insert しているだけ。insert後のrefetch は冗長な気も?

Teng::Plugin::Pager、Teng::Plugin::Pager::MySQLFoundRows

ページャを意識した検索をする search_with_pager を提供。引数で指定したページに含まれるべき物件のみをLIMITで検索した結果リストと、 Data::Page::NoTotalEntries を返す。その割にはNoTotalEntries->first と NoTotalEntries->last は使ってなくて、ちょっと違和感がある。search 使えるんじゃないかって気もするけど、それも使ってなくて自前でSQL::Makerを使っている。

Teng::Plugin::Pager::MySQLFoundRows でも同じメソッドを実装しているが、こちらはData::Pageを返す。つまり、全行数も算出して返す。全行の算出には SQL_CALC_FOUND_ROWS を使うため、MySQL専用のプラグインとなっている。

Teng::Plugin::Replace

REPLACE INTO なSQLを実行するreplace を提供する。insertメソッド と同じ流れでREPLACE INTO にした感じなんだけど、差異があるのはその後の変更についていけてないせい?

*1:「> IT'S IN ALPHA QUALITY. IT MAY CHANGE THE API WITHOUT NOTICE.」