Filter::SQL 作った
please see: Kazuho@Cybozu Labs: Perl で埋め込み SQL を使って楽をする話
http://coderepos.org/share/browser/lang/perl/Filter-SQL
こんな感じで書ける。
use DBI; use Filter::SQL; Filter::SQL->dbh(DBI->connect('dbi:mysql:test;user=root')) or die DBI->errstr; SQL DROP TABLE IF EXISTS t;; SQL CREATE TABLE T (v int not null);; for (my $n = 0; $n < 10; $n++) { INSERT INTO T (v) VALUES ($n);; } foreach my $row (SELECT * FROM t;) { print "@row\n"; }
ToDo:
- ターミネーションがダサい。もうちょっとなんとかならないか (括弧の数を数えて終端判定するとか)
- でもこれはこれでいいのかも
- SELECT の返り値のバインディングを指定したい
- 現状は $dbh->quote を呼んでるのを prepared-statement にしたい
そんなところかな。
追記:
if (SELECT ROW COUNT(*) FROM t; == 10) { print "table has 10 rows\n"; }
とか書けるようにした。