Hello community,

here is the log from the commit of package perl-DateTime-Format-Pg for 
openSUSE:Factory checked in at 2017-05-31 12:16:34
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/perl-DateTime-Format-Pg (Old)
 and      /work/SRC/openSUSE:Factory/.perl-DateTime-Format-Pg.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "perl-DateTime-Format-Pg"

Wed May 31 12:16:34 2017 rev:4 rq:494771 version:0.16013

Changes:
--------
--- 
/work/SRC/openSUSE:Factory/perl-DateTime-Format-Pg/perl-DateTime-Format-Pg.changes
  2016-07-24 19:53:18.000000000 +0200
+++ 
/work/SRC/openSUSE:Factory/.perl-DateTime-Format-Pg.new/perl-DateTime-Format-Pg.changes
     2017-05-31 12:17:42.937565031 +0200
@@ -1,0 +2,10 @@
+Sat May  6 05:25:12 UTC 2017 - [email protected]
+
+- updated to 0.16013
+   see /usr/share/doc/packages/perl-DateTime-Format-Pg/Changes
+
+  0.16013 2017-05-04T12:46:23Z
+      - Fix handling for nanoseconds (issue #14)
+      - Fix handling fractional seconds (issue #12)
+
+-------------------------------------------------------------------

Old:
----
  DateTime-Format-Pg-0.16012.tar.gz

New:
----
  DateTime-Format-Pg-0.16013.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ perl-DateTime-Format-Pg.spec ++++++
--- /var/tmp/diff_new_pack.BNycLs/_old  2017-05-31 12:17:43.513483733 +0200
+++ /var/tmp/diff_new_pack.BNycLs/_new  2017-05-31 12:17:43.517483168 +0200
@@ -1,7 +1,7 @@
 #
 # spec file for package perl-DateTime-Format-Pg
 #
-# Copyright (c) 2016 SUSE LINUX GmbH, Nuernberg, Germany.
+# Copyright (c) 2017 SUSE LINUX GmbH, Nuernberg, Germany.
 #
 # All modifications and additions to the file contributed by third parties
 # remain the property of their copyright owners, unless otherwise agreed
@@ -17,14 +17,14 @@
 
 
 Name:           perl-DateTime-Format-Pg
-Version:        0.16012
+Version:        0.16013
 Release:        0
 %define cpan_name DateTime-Format-Pg
 Summary:        Parse and format PostgreSQL dates and times
 License:        Artistic-1.0 or GPL-1.0+
 Group:          Development/Libraries/Perl
 Url:            http://search.cpan.org/dist/DateTime-Format-Pg/
-Source0:        
http://www.cpan.org/authors/id/D/DM/DMAKI/%{cpan_name}-%{version}.tar.gz
+Source0:        
https://cpan.metacpan.org/authors/id/D/DM/DMAKI/%{cpan_name}-%{version}.tar.gz
 Source1:        cpanspec.yml
 BuildArch:      noarch
 BuildRoot:      %{_tmppath}/%{name}-%{version}-build
@@ -63,6 +63,7 @@
 
 %files -f %{name}.files
 %defattr(-,root,root,755)
-%doc Changes LICENSE Makefile README.md
+%doc Changes Makefile README.md
+%license LICENSE
 
 %changelog

++++++ DateTime-Format-Pg-0.16012.tar.gz -> DateTime-Format-Pg-0.16013.tar.gz 
++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/DateTime-Format-Pg-0.16012/Changes 
new/DateTime-Format-Pg-0.16013/Changes
--- old/DateTime-Format-Pg-0.16012/Changes      2016-07-19 23:37:34.000000000 
+0200
+++ new/DateTime-Format-Pg-0.16013/Changes      2017-05-04 14:46:26.000000000 
+0200
@@ -1,8 +1,12 @@
 Revision history for Perl extension DateTime::Format::Pg.
 
+0.16013 2017-05-04T12:46:23Z
+    - Fix handling for nanoseconds (issue #14)
+    - Fix handling fractional seconds (issue #12)
+
 0.16012 2016-07-19T21:37:31Z
     - Parsing invalid intervals with no amount and units only should have
-      resulted in exceptions, but did not. Reported by Henrik Pauli (ssue #8)
+      resulted in exceptions, but did not. Reported by Henrik Pauli (issue #8)
     - Internal cleanup
 
 0.16011 2015-06-19T13:40:27Z
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/DateTime-Format-Pg-0.16012/MANIFEST 
new/DateTime-Format-Pg-0.16013/MANIFEST
--- old/DateTime-Format-Pg-0.16012/MANIFEST     2016-07-19 23:37:34.000000000 
+0200
+++ new/DateTime-Format-Pg-0.16013/MANIFEST     2017-05-04 14:46:26.000000000 
+0200
@@ -14,11 +14,13 @@
 t/format_datetime.t
 t/format_fractional.t
 t/format_interval.t
+t/gh12.t
 t/parse_date.t
 t/parse_datetime.t
 t/parse_datetime2.t
 t/parse_datetime3.t
 t/parse_datetime4.t
+t/parse_datetime5.t
 t/parse_infinity.t
 t/parse_interval.t
 t/parse_time.t
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/DateTime-Format-Pg-0.16012/META.json 
new/DateTime-Format-Pg-0.16013/META.json
--- old/DateTime-Format-Pg-0.16012/META.json    2016-07-19 23:37:34.000000000 
+0200
+++ new/DateTime-Format-Pg-0.16013/META.json    2017-05-04 14:46:26.000000000 
+0200
@@ -57,7 +57,7 @@
    "provides" : {
       "DateTime::Format::Pg" : {
          "file" : "lib/DateTime/Format/Pg.pm",
-         "version" : "0.16012"
+         "version" : "0.16013"
       }
    },
    "release_status" : "stable",
@@ -71,12 +71,13 @@
          "web" : "https://github.com/lestrrat/DateTime-Format-Pg";
       }
    },
-   "version" : "0.16012",
+   "version" : "0.16013",
    "x_contributors" : [
       "Vasily Chekalkin <[email protected]>",
       "David Steinbrunner <[email protected]>",
       "Henrik Pauli <[email protected]>",
       "Nitish Bezzala <[email protected]>",
+      "Ilya Chesnokov <[email protected]>",
       "lestrrat <[email protected]>"
    ]
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/DateTime-Format-Pg-0.16012/META.yml 
new/DateTime-Format-Pg-0.16013/META.yml
--- old/DateTime-Format-Pg-0.16012/META.yml     2016-07-19 23:37:34.000000000 
+0200
+++ new/DateTime-Format-Pg-0.16013/META.yml     2017-05-04 14:46:26.000000000 
+0200
@@ -27,7 +27,7 @@
 provides:
   DateTime::Format::Pg:
     file: lib/DateTime/Format/Pg.pm
-    version: '0.16012'
+    version: '0.16013'
 requires:
   DateTime: '0.10'
   DateTime::Format::Builder: '0.72'
@@ -36,10 +36,11 @@
   bugtracker: https://github.com/lestrrat/DateTime-Format-Pg/issues
   homepage: https://github.com/lestrrat/DateTime-Format-Pg
   repository: git://github.com/lestrrat/DateTime-Format-Pg.git
-version: '0.16012'
+version: '0.16013'
 x_contributors:
   - 'Vasily Chekalkin <[email protected]>'
   - 'David Steinbrunner <[email protected]>'
   - 'Henrik Pauli <[email protected]>'
   - 'Nitish Bezzala <[email protected]>'
+  - 'Ilya Chesnokov <[email protected]>'
   - 'lestrrat <[email protected]>'
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/DateTime-Format-Pg-0.16012/README.md 
new/DateTime-Format-Pg-0.16013/README.md
--- old/DateTime-Format-Pg-0.16012/README.md    2016-07-19 23:37:34.000000000 
+0200
+++ new/DateTime-Format-Pg-0.16013/README.md    2017-05-04 14:46:26.000000000 
+0200
@@ -269,7 +269,7 @@
 
 If DateStyle is set to 'PostgreSQL', 'SQL', or 'German', PostgreSQL does
 not send numerical time zones for the TIMESTAMPTZ (or TIMESTAMP WITH
-TIME ZONE) type. Unfortunatly, the time zone names used instead can be
+TIME ZONE) type. Unfortunately, the time zone names used instead can be
 ambiguous: For example, 'EST' can mean -0500, +1000, or +1100.
 
 You must set the 'server\_tz' variable to a time zone that is identical to that
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/DateTime-Format-Pg-0.16012/lib/DateTime/Format/Pg.pm 
new/DateTime-Format-Pg-0.16013/lib/DateTime/Format/Pg.pm
--- old/DateTime-Format-Pg-0.16012/lib/DateTime/Format/Pg.pm    2016-07-19 
23:37:34.000000000 +0200
+++ new/DateTime-Format-Pg-0.16013/lib/DateTime/Format/Pg.pm    2017-05-04 
14:46:26.000000000 +0200
@@ -11,7 +11,7 @@
 use DateTime::TimeZone::UTC;
 use DateTime::TimeZone::Floating;
 
-$VERSION = '0.16012';
+$VERSION = '0.16013';
 $VERSION = eval $VERSION;
 
 our @ISA = ('DateTime::Format::Builder');
@@ -368,7 +368,7 @@
 sub _fix_nanosecond {
   my %args = @_;
   if(defined $args{'parsed'}->{'nanosecond'}) {
-    $args{'parsed'}->{'nanosecond'} *= 1.0E9;
+    $args{'parsed'}->{'nanosecond'} = sprintf '%.0f', 
$args{'parsed'}->{'nanosecond'} * 1.0E9;
   } else {
     delete $args{'parsed'}->{'nanosecond'}
   };
@@ -581,40 +581,58 @@
     (my $string = $string_to_parse) =~ s/^@\s*//;
     $string =~ s/\+(\d+)/$1/g;
 
-    my $subtract = 0;
+    # Method used later on duration object
+    my $arith_method = "add";
     if ( $string =~ s/ago// ) {
-        $subtract = 1;
+        $arith_method = "subtract";
     }
 
     my $sign = 0;
     my %done;
 
-#   $timespec =~ s/\b(\d+):(\d\d):((\d\d)|(\d\d.\d+))\b/$1h $2m $3s/g;
-    $string =~ s/\b(\d+):(\d\d):(\d\d)\b/$1h $2m $3s/g;
+    $string =~ s/\b(\d+):(\d\d):(\d\d)(\.\d+)?\b/$1h $2m $3$4s/g;
     $string =~ s/\b(\d+):(\d\d)\b/$1h $2m/g;
     $string =~ s/(-\d+h)\s+(\d+m)\s+(\d+s)\s*/$1 -$2 -$3 /;
     $string =~ s/(-\d+h)\s+(\d+m)\s*/$1 -$2 /;
 
     while ($string =~ 
s/^\s*(-?\d+(?:[.,]\d+)?)\s*([a-zA-Z]+)(?:\s*(?:,|and)\s*)*//i) {
         my($amount, $unit) = ($1, $2);
-        $unit = lc($unit) unless length($unit) == 1;
+        if (length($unit) != 1) {
+            $unit = lc($unit);
+        }
+
+        my $udata = $units{$unit};
+        if (! $udata) {
+            Carp::croak("Unknown timespec: $string_to_parse");
+        }
+        my ($base_unit, $num) = @$udata;
+        my $key = $base_unit . "-" . $num;
+        if (exists $done{$key}) {
+            Carp::croak("Unknown timespec: $string_to_parse");
+        }
+        $done{$key} = 1;
 
-        my ($base_unit, $num);
-        if ( defined( $units{$unit} ) ) { 
-            ($base_unit, $num) = @{$units{$unit}};
-            my $key = $base_unit . "-" . $num;
-            Carp::croak "Unknown timespec: $string_to_parse" if 
defined($done{$key});
-            $done{$key} = 1;
-
-            $amount =~ s/,/./;
-            if ( $subtract ) {
-                 $du->subtract( $base_unit => $amount * $num );
-            } else {
-                $du->add( $base_unit => $amount * $num );
+        my @extra_args;
+
+        $amount =~ s/,/./;
+        if ($amount =~ s/\.(\d+)$//) {
+            my $fractional = $1;
+            # We only handle fractional seconds right now. If you
+            # need support for silly formats (from my perspective ;-P)
+            # like '1.5 weeks', please provide me with a comprehensive
+            # test for all possible combinations of fractional times.
+            if ($base_unit ne "seconds") {
+                Carp::croak("Fractional input detected: currently only 
fractional seconds are supported")
             }
-        } else {
-            Carp::croak "Unknown timespec: $string_to_parse";
+
+            # From the spec, Pg can take up to 6 digits for fractional part
+            # (duh, as 1 sec = 1_000_000 nano sec). If we're missing 0's,
+            # we should pad them
+            $fractional .= '0'x (6 - length($fractional));
+            push @extra_args, ("nanoseconds" => $fractional);
         }
+
+        $du->$arith_method($base_unit => $amount * $num, @extra_args);
     }
 
     if ($string =~ /\S/) { # OK to have extra spaces, but nothing else
@@ -862,7 +880,7 @@
 
 If DateStyle is set to 'PostgreSQL', 'SQL', or 'German', PostgreSQL does
 not send numerical time zones for the TIMESTAMPTZ (or TIMESTAMP WITH
-TIME ZONE) type. Unfortunatly, the time zone names used instead can be
+TIME ZONE) type. Unfortunately, the time zone names used instead can be
 ambiguous: For example, 'EST' can mean -0500, +1000, or +1100.
 
 You must set the 'server_tz' variable to a time zone that is identical to that
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/DateTime-Format-Pg-0.16012/t/gh12.t 
new/DateTime-Format-Pg-0.16013/t/gh12.t
--- old/DateTime-Format-Pg-0.16012/t/gh12.t     1970-01-01 01:00:00.000000000 
+0100
+++ new/DateTime-Format-Pg-0.16013/t/gh12.t     2017-05-04 14:46:26.000000000 
+0200
@@ -0,0 +1,20 @@
+use strict;
+use Test::More;
+
+use_ok('DateTime::Format::Pg');
+
+# 
https://www.postgresql.org/docs/9.5/static/datatype-datetime.html#DATATYPE-INTERVAL-INPUT
+my $offset = '1095 days 13:37:28.36922';
+my $duration;
+eval {
+    $duration = DateTime::Format::Pg->parse_duration($offset);
+};
+my $e = $@;
+if (! ok !$e, "should succeed parsing '$offset' without errors") {
+    diag $e;
+}
+
+is $duration->seconds, 28, "seconds should be '28'";
+is $duration->nanoseconds, 369220, "seconds should be '369220'";
+
+done_testing;
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/DateTime-Format-Pg-0.16012/t/parse_datetime5.t 
new/DateTime-Format-Pg-0.16013/t/parse_datetime5.t
--- old/DateTime-Format-Pg-0.16012/t/parse_datetime5.t  1970-01-01 
01:00:00.000000000 +0100
+++ new/DateTime-Format-Pg-0.16013/t/parse_datetime5.t  2017-05-04 
14:46:26.000000000 +0200
@@ -0,0 +1,10 @@
+use Test::More tests => 1;
+use DateTime::Format::Pg 0.02;
+
+# This test fails when nanosecond is not converted properly to an integer. This
+# happens when the fractional part of timestamp is .254182 - got this number by
+# experiment.
+{
+  my $dt = DateTime::Format::Pg->parse_datetime('2017-05-02 
12:39:10.254182+00');
+  cmp_ok($dt->nanosecond(), '==', 254182000, 'nanosecond as a number');
+}


Reply via email to