SQL::Abstractにパッチ

SQL::Abstractって一応Create文も書ける仕様なんだけど、
フィールドタイプの指定が微妙だったり


my @fields = (
'id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY',
'rid VARCHAR(10) NOT NULL',
'name TEXT NOT NULL',
'created_on DATETIME NOT NULL',
'timestamp TIMESTAMP NOT NULL',
);
my $table = 'hoge';
my $create_table = $sql->generate('create table',\$table,\@fields);

こんな感じで実行することになるんだけど、
@fieldsの部分が汚くていやだなぁってちょっと思った。


Index: Abstract.pm
===================================================================
--- Abstract.pm (revision *****)
+++ Abstract.pm (working copy)
@@ -853,6 +853,9 @@
} elsif ($r eq 'SCALAR') {
# embedded literal SQL
push @sqlq, $$v;
+ } elsif ($r eq 'HASH') {
+ my ($col,$type) = each %{$v};
+ push @sqlq, "$col $type";
} else {
push @sqlq, '?';
push @sqlv, $v;

こんな感じでパッチあててやると、


my @fields = (
{id => 'INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY'},
{rid => 'VARCHAR(10) NOT NULL'},
{name => 'TEXT NOT NULL'},
{created_on => 'DATETIME NOT NULL'},
{timestamp => 'TIMESTAMP NOT NULL'},
);
my $table = 'hoge';
my $create_table = $sql->generate('create table',\$table,\@fields);

こんな感じでかけまするぅ。

DBICでは


$rs->result_source->column_info('status');

とかでそのカラムの情報がとれるから
そこから動的にいろいろやりたいときはこのパッチのがいいかなぁとか思ったり。