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');
+}