DBIx::MoCoで複数レコードの同時インサート

 Data::ObjectDriverでいうbulk_insertとか、DBICのpolulateみたいなやつ。
 というか、Data::ObjectDriverで使ってるbulk_insertをほぼ丸コピしました。

#ported from Data::ObjectDriver::DBD::mysql
sub bulk_insert {
    my $class = shift;
    my $dbh   = $class->db->dbh;
    my $table = $class->table;

    my $cols = shift;
    my $rows_ref = shift;

    croak "Usage bulk_insert(dbh, table, columnref, rowsref)"
        unless (defined $dbh && defined $table && defined $cols && defined $rows_ref);
    return 0e0 if (scalar(@{$rows_ref}) == 0);

    my $sql = "INSERT INTO $table("  . join(',', @{$cols}) . ") VALUES\n";
    my $statement_length = length($sql);

    my @rows;
    foreach my $row (@{$rows_ref}) {
        my $line = join(',', map { defined($_) ?  $dbh->quote($_) : 'NULL'} @{$row});
        $statement_length += length($line);
        push @rows, "(${line})";
    }
    $sql .= join ",\n", @rows;

    # For now just write all data, at some point we need to lookup the
    # maximum packet size for SQL

    return $dbh->do($sql);
}

 とりあえず動いた。inflate_columnとかの対応はしてない。