in reply to Date conversion with Class::DBI

(I thought I posted this but now can't find it)

I'm now just overriding the accessors for each date column and keeping the date in MySQL's format.

I'd still be interesting in knowing how a has_a solution should work all together.

Here's my (prototype) code:

package My::DBI; use base 'Class::DBI::mysql'; sub setup { my $sub_class = shift; my $table = shift; $sub_class->set_up_table($table); for my $col_name ($sub_class->all_columns) { my $col_type = $sub_class->column_type($col_name); if($col_type eq 'date') { # customize accessor to do euro formatting my $real_accessor = "_${col_name}_accessor"; no strict 'refs'; *{$sub_class.'::'.$col_name} = sub { my $self = shift; if(@_) { # setting my $date = shift; if($date =~ m! (\d+) / (\d+) (?:/ (\d+) )+!x) { my $y = $3; $y += ($y < 70) ? 2000 : 1900 if($y < 100); $date = sprintf "%4d-%02d-%02d", $y,$2,$1; } return $self->$real_accessor($date); } else { my $date = $self->$real_accessor(@_); $date =~ s!(\d{4})-(\d\d)-(\d\d)!$3/$2/$1!; return $date; } } } } + }
Some debugging:
DB<1> p $s->ses_date 23/06/2003 DB<2> x $s->{ses_date} 0 '2003-06-23' DB<3> $s->ses_date('1/2/3') DB<4> p $s->{ses_date} 2003-02-01 DB<5> x $s->{ses_date} 0 '2003-02-01'