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してしまいますね。
まったく意味無い・・。