Practice of Programming

プログラム とか Linuxとかの話題

DBIx::Classでテーブルとカラムの一覧

簡単ですね。

get_table_info.pl

#!/usr/local/perl5.8.7/bin/perl

use Data::Dumper;
use DBIx::Class::Schema::Loader;

my $tmp_pkg = 'Temp::Schema';

push @{$tmp_pkg . '::ISA'}, qw/DBIx::Class::Schema::Loader/;

$tmp_pkg->loader_options(relationships => 1);

my $c = $tmp_pkg->connect(@ARGV);

my $mapping = $tmp_pkg->class_mappings;

foreach my $k (keys %$mapping){
  print Dumper({$k => [ {class => $mapping->{$k}}, map {$_, $k->column_info($_)}$k->columns ]})
}

下記のようにして使います。

./get_table_info.pl dbi:mysql:hogehgoe user

出力例はこんな感じ。

$VAR1 = {
          'Temp::Schema::Task' => [
                                    {
                                      'class' => 'Task'
                                    },
                                    'task_id',
                                    {
                                      'data_type' => 'INT',
                                      'default_value' => undef,
                                      'is_nullable' => 0,
                                      'size' => '11'
                                    },
                                    'name',
                                    {
                                      'data_type' => 'VARCHAR',
                                      'default_value' => undef,
                                      'is_nullable' => 1,
                                      'size' => '255'
                                    }
                                  ]
        };