All Your Bugs Are Belong To Ass

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を止めていなかったのを止めさせた、というものです。

これに合わせ、テストケースも追加しました。

Created at
by
ytnobody
Last modified at
2014-06-05 17:32
by
ytnobody