だるろぐ

だるいぶろぐです

Data::ObjectDriverでDBI->connectの\%attrを渡そう

透過キャッシュだのレプリケーションだの色々ドライバを書けるが、普通に使う分にはSYNOPSISの通りでいい。
で、DBI->connectで使う%attr、例えば mysql_enable_utf8 を渡すのはどーすんのかなと思ってソース見たら

use parent qw/Data::ObjectDriver::Driver::DBI/;

sub driver {
    my $class = shift;

    $class->new(
        dsn      => 'dbi:mysql:dbname',
        username => 'username',
        password => 'password',
        connect_options => +{
            RaiseError => 1,
            PrintError => 1,
            AutoCommit => 1,
            mysql_enable_utf8 => 1,
            on_connect_do => [
                "SET CHARACTER SET 'utf8'"
            ],
        },
    );
}

と普通に使えますねーな話。
あと RaiseError, PrintError, AutoCommit はそれぞれ 1, 0, 1 が初期値であるんだけど、書いておいた方が明示的だよねーと。


D::ODは評判よくなかったりするけど個人的には割と好きです。つうか他が色々無い。
とはいえgroup byとかしたい場合は Data::ObjectDriver::SQL 使うよりもDBIのハンドラ取って直にsql書く上にそういうことをしたいときがよくある。