Blog

SQL::TwoWay - 2way SQL in Perl5

https://metacpan.org/module/SQL::TwoWay

2WaySQLというものがあるわけです。 2WaySQLについてはhttp://www.slideshare.net/t_wada/tokyo-rubykaigi-01-twada-presentation を参考にしてもらうとして、 超絶簡単に説明すると、実行可能なSQLを書いておいて(where句の値もデフォルト値を書いておくので実行可能となる) プログラム側で良い感じにプレスホルダーとかに置き換えて値を良い感じに置き換えます。

どんなSQLかというと

SELECT * FROM USER WHERE id = /*$id*/1 OR name = /*$name*/'nekokak' OR ids IN /*$ids*/(2,3,4)

こういう感じ。 普通に実行可能ですよね。 これを、

my $sql = q{SELECT * FROM USER WHERE id = /*$id*/1 OR name = /*$name*/'nekokak' OR ids IN /*$ids*/(2,3,4)};
my $bind = +{
    id => 10,
    name => 'zigorou',
    ids => [qw/11 12 13/],
};
my ($stmt, @bind) = two_way_sql($sql, $bind);

こんな感じのメソッドを通すと

$stmt; # SELECT * FROM USER WHERE id = ? OR name = ? OR ids IN (?,?,?)
@bind; # [10, 'zigorou', 11, 12, 13]

という感じに変換されます。

/* IF $condition */v=2/* END */

みたいにして、 IF 文もつかえるようにしてあります。

ref. http://blog.nekokak.org/show?guid=ztzdUp2K4RGBs7SpghOgLw