Otogiri-0.11 has been released
昨夜、Otogiri-0.11がリリースされました。
主な変更点は、以下のとおりです。
deflateにまつわる不具合の修正
deflateが定義されている場合、select, singleおよびdeleteの条件についてdeflateを行っていましたが、これを廃止しました。
一つ例を挙げます。以下のコードは、Otogiri-0.10以前を利用している場合、$bookを検索する際の条件に強制的にcreted_atが追加されてしまいます。
結果として、期待したレコードを獲得できない、という現象に悩まされることになります。
use Otogiri;
my $db = Otogiri->new(
connect_info => [ ... ],
deflate => sub {
my ($params, $table) = @_;
$params->{created_at} ||= time();
$params;
},
);
my $book = $db->single(book => { ... });
これが0.11では改善され、singleにおいて条件文に対しdeflateが行われることはなくなり、期待したレコードを獲得することができるようになりました。
insertをfast_insertのエイリアスに変更
前述の項目とも関連することではありますが、従来のinsertを廃止し、fast_insertのエイリアスとしてinsertを提供することとなりました。
insertの挙動を大まかに言うと、「fast_insertして、その結果がtrueであれば、fast_insertの入力値と同じ条件でsingleを行い、該当レコードを返す」というものでした。
問題としては、singleで検索を行う箇所にて、既に述べたdeflateを行う・行わない等の問題がからんでおり、突き詰めるとスキーマを必要としそうだという事から、Otogiriの設計思想とは相反するものとなる、と結論づけ、Otogiri本体から削除しました。かわりに、fast_insertのエイリアスとしてinsertを定義しなおすことで、一応の統一性を確保したと考えております。
なお従来のinsertは、その挙動から、いわば「insert_and_deflate」と言うべき代物であり、これをOtogiri::Plugin::InsertAndFetchとしてプラグインにスピンアウトさせました。
もし従来のinsertを使いたい場合、Otogiri::Plugin::InsertAndFetchをインストールした上で、以下のようにすることで、擬似的に同様の結果を得ることができます。
use Otogiri;
use Otogiri::Plugin;
Otogiti->load_plugin('InsertAndFetch');
my $db = Otogiri->new( ... );
my $book = $db->insert_and_fetch(book => {
title => 'Acmencyclopedia',
author => 'makamaka',
});
2つのエイリアスの追加
これは僕がよくtypoするので追加した機能です。
fetch は single のエイリアスとして、search は select のエイリアスとしてそれぞれ定義されています。
さいごに
もしOtogiriにご意見等ありましたら、ぜひgithubのOtogiriプロジェクトにissue登録をしてください。
また、プロジェクトに関わってる面々はだいたいYanchaという場所にたむろしてたりしますので、フランクにお話しにくるといいと思います。
2014-06-05 追記: Otogiri-0.12 has been released
わずか数日で0.12を出すことになってしまいました・・・
変更点は1つで、deleteのときのdeflateを止めていなかったのを止めさせた、というものです。
これに合わせ、テストケースも追加しました。