DBIx::SkinnyのSchemaとDBが一致しているか確認する。

最近はSkinnyよりTeng使う人の方が多いんかな?
そもそもO/Rマッパー使わない派も多そうですが。

それはさておき、開発環境と本番のDBがなぜか違っていたのですが、
他にも違うとこあるんじゃないかと思ったので、下記のようなtestを書いてみました。

use strict;
use warnings;
use Test::More;

BEGIN{ use_ok('MyApp::Model') }

my $dbh = MyApp::Model->new({
    dsn => 'dbi:mysql:myapp:localhost',
    username => 'db_user',
    password => 'db_password',
});

my @tables = map { $_->get_columns } $dbh->search_by_sql(
    q{SHOW TABLES},
    []
)->all;

for ( @tables ) {
    diag( $_->{'tables_in_myapp'} );
    $dbh->search(
        $_->{'tables_in_myapp'},
        {},
        {
            limit => 1,
        }
    )->first;
}

done_testing();

MyApp::Modelは、use DBIx::Skinnyしているpackageで、
その下に、MyApp::Model::Schemaがあります。
MyApp::Model::Schemaは、use DBIx::Skinny::Schemaしている実際にtable情報が書いてあるファイルです。

と、ここまで書きましたが、これだとtestとして微妙すぎました。

DBからtableの一覧を取得して、順番に1レコードだけ取得していますが、
これだと、「Schemaにだけあるカラム」はFAILするのでいいんですが、
「Schemaにだけあるテーブル」があった場合にPASSしてしまいますね。

まったく意味無い・・。

返信を残す

メールアドレスが公開されることはありません。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください