Fix 'timestamp with time zone' columns for IC::DT inflation
[dbsrgits/DBIx-Class.git] / lib / DBIx / Class / InflateColumn / DateTime.pm
index 02aec53..54e66f5 100644 (file)
@@ -3,6 +3,7 @@ package DBIx::Class::InflateColumn::DateTime;
 use strict;
 use warnings;
 use base qw/DBIx::Class/;
+use Carp::Clan qw/^DBIx::Class/;
 
 =head1 NAME
 
@@ -106,18 +107,22 @@ sub register_column {
 
   unless ($type) {
     $type = lc($info->{data_type});
+    if ($type eq "timestamp with time zone" || $type eq "timestamptz") {
+      $type = "timestamp";
+      $info->{_ic_dt_method} ||= "timestamp_with_timezone";
+    }
   }
 
   my $timezone;
   if ( defined $info->{extra}{timezone} ) {
-    warn "Putting timezone into extra => { timezone => '...' } has been deprecated, ".
+    carp "Putting timezone into extra => { timezone => '...' } has been deprecated, ".
          "please put it directly into the columns definition.";
     $timezone = $info->{extra}{timezone};
   }
 
   my $locale;
   if ( defined $info->{extra}{locale} ) {
-    warn "Putting locale into extra => { locale => '...' } has been deprecated, ".
+    carp "Putting locale into extra => { locale => '...' } has been deprecated, ".
          "please put it directly into the columns definition.";
     $locale = $info->{extra}{locale};
   }
@@ -133,7 +138,7 @@ sub register_column {
     my %info = ( '_ic_dt_method' => $type , %{ $info } );
 
     if (defined $info->{extra}{floating_tz_ok}) {
-      warn "Putting floating_tz_ok into extra => { floating_tz_ok => 1 } has been deprecated, ".
+      carp "Putting floating_tz_ok into extra => { floating_tz_ok => 1 } has been deprecated, ".
            "please put it directly into the columns definition.";
       $info{floating_tz_ok} = $info->{extra}{floating_tz_ok};
     }
@@ -144,7 +149,7 @@ sub register_column {
           inflate => sub {
             my ($value, $obj) = @_;
             my $dt = eval { $obj->_inflate_to_datetime( $value, \%info ) };
-            die "Error while inflating ${value} for ${column} on ${self}: $@"
+            $self->throw_exception ("Error while inflating ${value} for ${column} on ${self}: $@")
               if $@ and not $undef_if_invalid;
             $dt->set_time_zone($timezone) if $timezone;
             $dt->set_locale($locale) if $locale;
@@ -153,7 +158,7 @@ sub register_column {
           deflate => sub {
             my ($value, $obj) = @_;
             if ($timezone) {
-                warn "You're using a floating timezone, please see the documentation of"
+                carp "You're using a floating timezone, please see the documentation of"
                   . " DBIx::Class::InflateColumn::DateTime for an explanation"
                   if ref( $value->time_zone ) eq 'DateTime::TimeZone::Floating'
                       and not $info{floating_tz_ok}