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