はちゅにっき

こっちのブログはまったり更新

[Perl] DBIx::Skinny::SQL で "JOIN table USING (column)"

なんか、いつもイレギュラーなことやってない?ばかなのしぬの?
とか思いつつ、データベースの激しい都合上

my $rs = $my_skinny->resultset;

# とある $rs さんの旅 ...

$rs->add_join('table t' => [ {
    type => 'inner', table => 'join j',
    condition => 't.join_key = j.join_key AND t.join_num = j.join_num'
} ] );

$sql->as_sql;
# => FROM table t JOIN join j ON t.join_key = j.join_key AND t.join_num = j.join_num

とか毎回書いていたのですが、いい加減めんどくさくなっtごにょごにょ。。。*1
設計がそもそもぷぎゃーなんじゃないの?とか言われそうですが、イロイロと都合がごにょごにょ。。。
そんなわけで、結合条件に USING を使った SQL 文を生成できるよう、DBIx::Skinny::SQL をちょっと変更してみました。

作った DBIx::Skinny::SQL の Diff はこんな感じ。

これで、以下のようにかけるようになりました。

my $rs = $my_skinny->resultset;

# とある $rs さんの旅 ...

$rs->add_join('table t' => [ {
    type => 'inner', table => 'join j',
    condition => [qw/ join_key join_num /]  # ArrayRef を渡す
} ] );

$sql->as_sql;
# => FROM table t JOIN join j USING (join_key, join_num)

なんてニッチなんでしょう。おわり。
とりあえずそんな感じで、ひとまずわーい。


PostgreSQL 特有だと思いますが "DISTINCT ON" 句も生成できるようにしたいなぁ。
とか、またイレギュラーなことを考えています。。。
いっそ DBIx::Skinny::SQL::Pg とか作ればいいんですかね。ないですね。


そもそも ぽすぐれ とか ぷぎゃー は なし だよ!

ついき

本家に取り込んでいただきました。
ありがとうございました><

*1:実際はもっと結合条件があったり