DBIC::Schema::Loaderを久々に使ってみる

普段からLoader使っている人には目新しい話題はない予定。
思い出すことから始めてるので。


load_from_connectionがdeprecatedになってた。
バージョン0.04000では削除されるらしいので使わないようにすべし。

ってことで、

package TestDBIC::SchemaL;
use strict;
use warnings;
use base 'DBIx::Class::Schema::Loader';

__PACKAGE__->load_from_connection(
    dsn                     => 'dbi:mysql:test_dbic',
    user                    => 'test',
    password                => 'testtest',
    relationships           => 0,
    debug                   => 1,
);
1;

こうではなく、

package TestDBIC::SchemaL;
use strict;
use warnings;
use base 'DBIx::Class::Schema::Loader';

__PACKAGE__->loader_options(
    relationships           => 0,
    debug                   => 1,
);

__PACKAGE__->connection(
    'dbi:mysql:test_dbic',
    'test',
    'testtest'
);

このように書くべし。


debugオプションを有効にすることでどのようなスキーマ
どういう形で生成されるかがまるわかりんぐ。

load_components
table
add_columns
set_primary_key
add_unique_constrint
とかとかもりもり設定してくれる。

一部抜粋

TestDBIC::SchemaL::Blog->load_components("PK::Auto", "Core");
TestDBIC::SchemaL::Blog->table("blog");
TestDBIC::SchemaL::Blog->add_columns(
  "id",
  { data_type => "INT", default_value => undef, is_nullable => 0, size => 10 },
  "rid",
  { data_type => "VARCHAR", default_value => "", is_nullable => 0, size => 10 },
  "member_id",
  { data_type => "INT", default_value => 0, is_nullable => 0, size => 10 },
  "title",
  { data_type => "TEXT", default_value => "", is_nullable => 0, size => 65_535 },
  "created_on",
  {
    data_type => "DATETIME",
    default_value => "0000-00-00 00:00:00",
    is_nullable => 0,
    size => 19,
  },
  "timestamp",
  {
    data_type => "TIMESTAMP",
    default_value => "CURRENT_TIMESTAMP",
    is_nullable => 1,
    size => 14,
  },
);
TestDBIC::SchemaL::Blog->set_primary_key("id");
TestDBIC::SchemaL::Blog->add_unique_constraint("rid", ["rid"]);

GJGJ。

ちなむと、
MySQLの場合だとInnoDBとかで外部キーをはっていなければ
relationshipsオプションは意味ないね。
まあ、当然ですが。

で、ちこちこ試してて、
MoFedge::Data::DBIC::Schema::Loader完成
とりあえず動く。
次のエントリで晒す。