DBIx::SkinnyのSchemaとDBが一致しているか確認する。
2013年4月25日
最近は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してしまいますね。
まったく意味無い・・。