From d356bd501b557b41502a45ac7471e055112962f5 Mon Sep 17 00:00:00 2001 From: Dimitri Fontaine Date: Mon, 10 Sep 2018 19:33:39 +0200 Subject: [PATCH] Accept even more ragged date format input. When parsing a date string from a date format, accept that the ms or us part be completely missing, rather than just missing some digits. Fixed #828. --- src/parsers/date-format.lisp | 7 ++++--- test/csv-parse-date.load | 1 + test/regress/expected/csv-parse-date.out | 1 + 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/src/parsers/date-format.lisp b/src/parsers/date-format.lisp index d7b7fc6..45ba4d7 100644 --- a/src/parsers/date-format.lisp +++ b/src/parsers/date-format.lisp @@ -38,11 +38,12 @@ :for ragged-end := (when end (cond ((member name '(:msecs :usecs)) ;; take any number of digits up to - ;; the specified field lenght + ;; the specified field length ;; (less digits are allowed) - (min end (length date-string))) + (when (<= start (length date-string)) + (min end (length date-string)))) (t end))) - :when (and start end) + :when (and start ragged-end) :append (list name (subseq date-string start ragged-end))) (if (or (string= year "0000") (string= month "00") diff --git a/test/csv-parse-date.load b/test/csv-parse-date.load index 318df8a..9d74e22 100644 --- a/test/csv-parse-date.load +++ b/test/csv-parse-date.load @@ -28,3 +28,4 @@ LOAD CSV 1,10-02-1999 00-33-12.123456,"00:05.02" 2,10-02-2014 00-33-13.123,"18:25.52" 3,10-02-2014 00-33-14.1234,13:14.15 +4,10-09-2018 19-24-59,19:24.59 diff --git a/test/regress/expected/csv-parse-date.out b/test/regress/expected/csv-parse-date.out index 4f4e941..d21c37a 100644 --- a/test/regress/expected/csv-parse-date.out +++ b/test/regress/expected/csv-parse-date.out @@ -1,3 +1,4 @@ 1 1999-10-02 00:33:12.123456+02 00:05:02 2 2014-10-02 00:33:13.123+02 18:25:52 3 2014-10-02 00:33:14.1234+02 13:14:15 +4 2018-10-09 19:24:59+02 19:24:59