From: Johannes Plunien Date: Sat, 25 Oct 2008 02:33:59 +0000 (+0200) Subject: possible to explicitly skip inflation, again rafl++ X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=ff8a6e3ba942666ba98f18dccdf5ec6d8361355c;p=dbsrgits%2FDBIx-Class-Historic.git possible to explicitly skip inflation, again rafl++ --- diff --git a/lib/DBIx/Class/InflateColumn/DateTime.pm b/lib/DBIx/Class/InflateColumn/DateTime.pm index bd35dfe..17567be 100644 --- a/lib/DBIx/Class/InflateColumn/DateTime.pm +++ b/lib/DBIx/Class/InflateColumn/DateTime.pm @@ -41,6 +41,12 @@ use inflate_datetime or inflate_date: starts_when => { data_type => 'varchar', inflate_date => 1 } ); +It's also possible to explicitly skip inflation: + + __PACKAGE__->add_columns( + starts_when => { data_type => 'datetime', inflate_datetime => 0 } + ); + =head1 DESCRIPTION This module figures out the type of DateTime::Format::* class to @@ -84,8 +90,8 @@ sub register_column { return unless defined($info->{data_type}); my $type = lc($info->{data_type}); $type = 'datetime' if ($type =~ /^timestamp/); - $type = 'datetime' if exists $info->{inflate_datetime} and $info->{inflate_datetime}; - $type = 'date' if exists $info->{inflate_date} and $info->{inflate_date}; + $type = 'datetime' if $info->{inflate_datetime}; + $type = 'date' if $info->{inflate_date}; my $timezone; if ( exists $info->{extra} and exists $info->{extra}{timezone} and defined $info->{extra}{timezone} ) { $timezone = $info->{extra}{timezone}; @@ -93,7 +99,11 @@ sub register_column { my $undef_if_invalid = $info->{datetime_undef_if_invalid}; - if ($type eq 'datetime' || $type eq 'date') { + my $do_inflate = 1; + $do_inflate = 0 if exists $info->{inflate_datetime} and $info->{inflate_datetime} == 0; + $do_inflate = 0 if exists $info->{inflate_date} and $info->{inflate_date} == 0; + + if ($do_inflate and ($type eq 'datetime' || $type eq 'date')) { my ($parse, $format) = ("parse_${type}", "format_${type}"); $self->inflate_column( $column => diff --git a/t/89inflate_datetime.t b/t/89inflate_datetime.t index 00005f2..2cc3030 100644 --- a/t/89inflate_datetime.t +++ b/t/89inflate_datetime.t @@ -10,7 +10,7 @@ my $schema = DBICTest->init_schema(); eval { require DateTime::Format::MySQL }; plan skip_all => "Need DateTime::Format::MySQL for inflation tests" if $@; -plan tests => 25; +plan tests => 27; # inflation test my $event = $schema->resultset("Event")->find(1); @@ -38,6 +38,9 @@ isa_ok($event->created_on, 'DateTime', 'DateTime returned'); isa_ok($event->varchar_date, 'DateTime', 'DateTime returned'); isa_ok($event->varchar_datetime, 'DateTime', 'DateTime returned'); +## skip inflation field +isnt(ref($event->skip_inflation), 'DateTime', 'No DateTime returned for skip inflation column'); + # klunky, but makes older Test::More installs happy my $createo = $event->created_on; is("$createo", '2006-06-22T21:00:05', 'Correct date/time'); @@ -103,3 +106,7 @@ is("$varchar_date", '2006-07-23T00:00:00', 'Correct date/time'); ## varchar field using inflate_datetime => 1 my $varchar_datetime = $event->varchar_datetime; is("$varchar_datetime", '2006-05-22T19:05:07', 'Correct date/time'); + +## skip inflation field +my $skip_inflation = $event->skip_inflation; +is ("$skip_inflation", '2006-04-21 18:04:06', 'Correct date/time'); diff --git a/t/lib/DBICTest.pm b/t/lib/DBICTest.pm index aca09bb..2b6312c 100755 --- a/t/lib/DBICTest.pm +++ b/t/lib/DBICTest.pm @@ -271,8 +271,8 @@ sub populate_schema { ]); $schema->populate('Event', [ - [ qw/id starts_at created_on varchar_date varchar_datetime/ ], - [ 1, '2006-04-25 22:24:33', '2006-06-22 21:00:05', '2006-07-23', '2006-05-22 19:05:07'], + [ qw/id starts_at created_on varchar_date varchar_datetime skip_inflation/ ], + [ 1, '2006-04-25 22:24:33', '2006-06-22 21:00:05', '2006-07-23', '2006-05-22 19:05:07', '2006-04-21 18:04:06'], ]); $schema->populate('Link', [ diff --git a/t/lib/DBICTest/Schema/Event.pm b/t/lib/DBICTest/Schema/Event.pm index 7dda075..063df6f 100644 --- a/t/lib/DBICTest/Schema/Event.pm +++ b/t/lib/DBICTest/Schema/Event.pm @@ -14,6 +14,7 @@ __PACKAGE__->add_columns( created_on => { data_type => 'timestamp' }, varchar_date => { data_type => 'varchar', inflate_date => 1, size => 20, is_nullable => 1 }, varchar_datetime => { data_type => 'varchar', inflate_datetime => 1, size => 20, is_nullable => 1 }, + skip_inflation => { data_type => 'datetime', inflate_datetime => 0, size => 20, is_nullable => 1 }, ); __PACKAGE__->set_primary_key('id'); diff --git a/t/lib/sqlite.sql b/t/lib/sqlite.sql index 8de5cb5..4caf314 100644 --- a/t/lib/sqlite.sql +++ b/t/lib/sqlite.sql @@ -1,6 +1,6 @@ -- -- Created by SQL::Translator::Producer::SQLite --- Created on Fri Oct 24 21:02:41 2008 +-- Created on Fri Oct 24 21:31:55 2008 -- BEGIN TRANSACTION; @@ -116,7 +116,8 @@ CREATE TABLE event ( starts_at datetime NOT NULL, created_on timestamp NOT NULL, varchar_date varchar(20), - varchar_datetime varchar(20) + varchar_datetime varchar(20), + skip_inflation datetime(20) );