書いたSQLのシンタックスチェックを自動化する

スキーマを書くときにはSQLを書くわけですが、作る過程では変更後のシンタックスが正しいか確認するのが意外と手間だったりします。

カンマ付け忘れや typo は自動でチェックしたいですね。

そんな時は Test::mysqld を使うと手軽に CREATE TABLE 文の文法チェックをテストに含めておけるので、

下記のようなテストを準備しておくとよさそうです。

t/sql/01_create_table.t

use strict;
use warnings;
use Test::mysqld;
use Test::More;
use DBI;

# debian installs mysqld into /usr/sbin
$ENV{PATH} = $ENV{PATH} . ':/usr/sbin';

my $mysqld = Test::mysqld->new(
    my_cnf => { 'skip-networking' => '' }
) or plan skip_all => $Test::mysqld::errstr;

my $dbh = DBI->connect( $mysqld->dsn );

for my $file (glob "schema/*") {
    my @sqls = (sub {
        open my $fh, "<", $file or die $!;
        grep { not /^\s?$/ } split /;/, do{ local $/; <$fh> };
    })->();

    for my $sql (@sqls) {
        note $sql;
        ok $dbh->do($sql), 'CREATE TABLE';
    }
}

done_testing;