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";
}

とか書けるようにした。