日向夏特殊応援部隊

俺様向けメモ

SQL::Translator の parser, producer を直接使う

余り頻繁に使うモジュールでは無いのでメモっとく。

#/usr/bin/perl

use strict;
use warnings;

use Data::Dump qw(dump);
use Perl6::Say;
use SQL::Translator;

my $dbh = DBI->connect("dbi:mysql:world", "root", ""); 
my $table = $dbh->selectrow_arrayref("show create table City;")->[1] . ";\n\n"; 

my $tr = SQL::Translator->new;
$tr->parser("SQL::Translator::Parser::MySQL");
$tr->producer("SQL::Translator::Producer::YAML");

my $parser_output;

eval {
    $parser_output = $tr->parser->($tr, $table);
};
if ($@ || !$parser_output) {
    die(@_ || "no results");
}

say dump($tr->schema);

my $producer_output = $tr->producer->($tr);

say $producer_output;
  • show create table で得られた結果に ";\n\n" つけないと parse が失敗する
  • それ以外は SQL::Translator->translate の実装を参考にした

とりあえず、parse した後には成功してれば schema オブジェクトに展開されたスキーマデータが含まれます。producer に通すと YAML 表現になります。