• このエントリーをはてなブックマークに追加

2010-09-09 00:25:00 追記
本エントリにおける結果は,サーバを立ててのもので,この際,何かしらの理由で一時的によけておいた DBIx-Skinny-0.0718 を読み込んでいたのが原因でした.DBIx-Skinny-0.0720 ではこのような現象は起こりません.

CLIでの確認コードを掲載しておきます.

はじめに

DBIx::Skinny-0.0720 で DBIx::Skinny#update がうまく動いていなっぽい部分があったので,デバッグ出力によるメモ.1つ前のバージョン と比較してみます.

簡単に確認

user_idnicknamet_mod で構成される user テーブルに対して操作を行ってみます.

「DBIx::Skinny’s Exception」を表示させるのが手っ取り早いので,与えるパラメータの一部をワザとミスすることにします.

# $skinny: DBIx::Skinny オブジェクト
$skinny->update(
    'user',
    {nickname => 'issm'},
    {user_idx => 9}, # ワザとミス.ホントは user_id
);

こんな感じ.

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@ DBIx::Skinny 's Exception @@@@@
Reason  : DBD::mysql::st execute failed: Unknown column 'user_idx' in 'where clause' at lib/DBIx/Skinny.pm line 754.
 
SQL     : UPDATE user SET `nickname` = ?, `t_mod` = ? WHERE (user_idx = ?)
 
BIND    : $VAR1 = [
          'issm',
          1283934955,
          [
            '9'
          ]
        ];
 
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

DBIx::Skinny-0.0719 では,同メソッドはうまく動作してくれます.比較として,同様にミスして「Exception」を出力してみます.

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@ DBIx::Skinny 's Exception @@@@@
Reason  : DBD::mysql::st execute failed: Unknown column 'user_idx' in 'where clause' at lib/DBIx/Skinny.pm line 754.
 
SQL     : UPDATE user SET `nickname` = ?, `t_mod` = ? WHERE (user_idx = ?)
 
BIND    : $VAR1 = [
          'issm',
          1283934516,
          '9'
        ];
 
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

まとめ

$skinny->update($table_name, \%update_row_data, [\%update_condition])
DBIx::Skinny – search.cpan.org

まだソースコードは読んでいませんが,パラメータ \%update_condition を与えると問題が起きる,ということでしょうかね.

おわりに

DBIx::Skinny-0.0720 で DBIx::Skinny#update がうまく動いていなっぽい部分があったので,1つ前のバージョンのものとのデバッグ出力の違いを見てみました.

cpanm を使えば,最新でないバージョンのモジュールもサクッと入れられるので,便利ですね!