@kyanny's blog

My thoughts, my life. Views/opinions are my own.

DBIC で生の SQL を実行したいときは $storage->dbh_do() と $storage->dbh() どちらが適切?

DBIC で生の SQL を実行したいときは $storage->dbh_do() を使えば良いということを知った。

  my @stuff = $schema->storage->dbh_do(
    sub {
      my ($storage, $dbh, @args) = @_;
      $dbh->do("DROP TABLE authors");
    },
    @column_list
  );

http://search.cpan.org/~frew/DBIx-Class-0.08114/lib/DBIx/Class/Storage/DBI.pm#dbh_do

もういっこ $storage->dbh() てのもあり、こちらは見た通り $dbh を返す。これをふつうに DBI を扱うときのように使ってもいけるようだ。

http://search.cpan.org/~frew/DBIx-Class-0.08114/lib/DBIx/Class/Storage/DBI.pm#dbh

ただ、こちらは接続していることを保証するとかで、ちょっとコストがかかる場合があるらしい・・・という風に読めたのだけど、実際のトコロどっちを使うのが適切なんだろう?

わざわざ dbh_do() なんてメソッドを用意しているってことは、これで済むならばこれを使えよ、ということなのかな。