Catalyst::Plugin::Session の flash ではまった

Store::DBIC を使ってるのだけど、flash が使えなくてはまった。
そのとき出たログは、sessions テーブル の row が見つからないから update できないよーってもの。
row が見つからないっていうから id の照合順序とかそのへんを疑ったりしても何も変わらず。
で、もう一度 Manual とかを見直したら、sessions テーブルの構造がちょっとだけ違ってた。
俺が作った sessions テーブルは

CREATE TABLE `sessions` (
  `id` char(72) NOT NULL,
  `session_data` text NOT NULL,
  `expires` int(10) unsigned NOT NULL default '0',
  PRIMARY KEY  (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

こんなんで、正しくは、

CREATE TABLE `sessions` (
  `id` char(72) NOT NULL,
  `session_data` text,
  `expires` int(11) default NULL,
  PRIMARY KEY  (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

こう。phpMyAdmin で出力してるから余計な情報がくっついちゃってるけれども。
で、最初の例でも通常のセッション管理だけなら問題ない(多分。使えてたし)。けれど、flash を使う時に問題が発生する。
なぜなら flash データを保持するときは、expires に値を入力しないから。
で、expires に値が無いため、デフォルト値の 0 が設定される。すると、$c->delete_expired_sessions を実行した場合に期限切れとして flash データが削除されてしまうのだ。これが正しいほうの例であれば、expires には 0 ではなく null が設定され、その場合は delete_expired_sessions の対象ではなくなる。そういうことみたい。

ということで、つまらないミスのせいではまったけど、繰り返さないようにメモしとこう。