[Jifty-commit] r1718 - Jifty-DBI/trunk/lib/Jifty/DBI/Filter

jifty-commit at lists.jifty.org jifty-commit at lists.jifty.org
Tue Aug 1 14:23:22 EDT 2006


Author: nelhage
Date: Tue Aug  1 14:23:21 2006
New Revision: 1718

Modified:
   Jifty-DBI/trunk/lib/Jifty/DBI/Filter/Date.pm
   Jifty-DBI/trunk/lib/Jifty/DBI/Filter/DateTime.pm

Log:
JDBI::Filter::Date clones dates before setting timezone, so that we
don't alter the object we're passed.

Modified: Jifty-DBI/trunk/lib/Jifty/DBI/Filter/Date.pm
==============================================================================
--- Jifty-DBI/trunk/lib/Jifty/DBI/Filter/Date.pm	(original)
+++ Jifty-DBI/trunk/lib/Jifty/DBI/Filter/Date.pm	Tue Aug  1 14:23:21 2006
@@ -38,10 +38,13 @@
     return unless $$value_ref;
 
     return unless UNIVERSAL::isa( $$value_ref, 'DateTime' );
-    $$value_ref->time_zone('floating');
+
+    # Clone the DateTime to avoid altering the object we're given
+    my $dt = $$value_ref->clone;
+    $dt->time_zone('floating');
 
     my $format = ($self->column->type eq "date" ? "%Y-%m-%d" : "%Y-%m-%d %H:%M:%S");
-    $$value_ref = $$value_ref->strftime($format);
+    $$value_ref = $dt->strftime($format);
     return 1;
 }
 
@@ -71,8 +74,8 @@
     my $str = join('T', split ' ', $$value_ref, 2);
     my $dt = DateTime::Format::ISO8601->parse_datetime($str);
     $dt->time_zone('floating');
-    $dt->set_formatter(DateTime::Format::Strptime->new(pattern => '%Y-%m-%d'));
     if ($dt) {
+        $dt->set_formatter(DateTime::Format::Strptime->new(pattern => '%Y-%m-%d'));
         $$value_ref = $dt;
     } else {
         return;

Modified: Jifty-DBI/trunk/lib/Jifty/DBI/Filter/DateTime.pm
==============================================================================
--- Jifty-DBI/trunk/lib/Jifty/DBI/Filter/DateTime.pm	(original)
+++ Jifty-DBI/trunk/lib/Jifty/DBI/Filter/DateTime.pm	Tue Aug  1 14:23:21 2006
@@ -6,6 +6,7 @@
 use base qw|Jifty::DBI::Filter|;
 use DateTime                  ();
 use DateTime::Format::ISO8601 ();
+use DateTime::Format::Strptime ();
 
 =head1 NAME
 
@@ -61,7 +62,9 @@
 
     my $str = join('T', split ' ', $$value_ref, 2);
     my $dt = DateTime::Format::ISO8601->parse_datetime($str);
+
     if ($dt) {
+        $dt->set_formatter(DateTime::Format::Strptime->new(pattern => '%Y-%m-%d %H:%M:%S'));
         $$value_ref = $dt;
     } else {
         return;


More information about the Jifty-commit mailing list