From 0de479dcd51dadab3fd260f3ad6b176e60b1c77a Mon Sep 17 00:00:00 2001 From: Inada Naoki Date: Tue, 24 Aug 2021 15:22:53 +0900 Subject: [PATCH 1/5] Fix parsing 0 year. Fix #1252 --- utils.go | 4 ---- 1 file changed, 4 deletions(-) diff --git a/utils.go b/utils.go index bcdee1b46..6e56e8dda 100644 --- a/utils.go +++ b/utils.go @@ -118,10 +118,6 @@ func parseDateTime(b []byte, loc *time.Location) (time.Time, error) { if err != nil { return time.Time{}, err } - if year <= 0 { - year = 1 - } - if b[4] != '-' { return time.Time{}, fmt.Errorf("bad value for field: `%c`", b[4]) } From 0c5315dc37de9b0a96f53f0770e32df278eb23f0 Mon Sep 17 00:00:00 2001 From: Inada Naoki Date: Tue, 24 Aug 2021 15:27:30 +0900 Subject: [PATCH 2/5] Remove month and day check too. --- utils.go | 6 ------ 1 file changed, 6 deletions(-) diff --git a/utils.go b/utils.go index 6e56e8dda..75e35f144 100644 --- a/utils.go +++ b/utils.go @@ -126,9 +126,6 @@ func parseDateTime(b []byte, loc *time.Location) (time.Time, error) { if err != nil { return time.Time{}, err } - if m <= 0 { - m = 1 - } month := time.Month(m) if b[7] != '-' { @@ -139,9 +136,6 @@ func parseDateTime(b []byte, loc *time.Location) (time.Time, error) { if err != nil { return time.Time{}, err } - if day <= 0 { - day = 1 - } if len(b) == 10 { return time.Date(year, month, day, 0, 0, 0, 0, loc), nil } From d3895e67560839b7a2623b0e8766a1126b4d80d3 Mon Sep 17 00:00:00 2001 From: Inada Naoki Date: Tue, 24 Aug 2021 15:36:17 +0900 Subject: [PATCH 3/5] Add test case. --- utils_test.go | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/utils_test.go b/utils_test.go index b0069251e..564736074 100644 --- a/utils_test.go +++ b/utils_test.go @@ -387,6 +387,10 @@ func TestParseDateTime(t *testing.T) { name: "parse null datetime", str: sDateTime0, }, + { + name: "parse datetime without day", + str: "0000-00-00 21:30:45", + }, { name: "parse datetime nanosec 1-digit", str: "2020-05-25 23:22:01.1", From cca93a229b6669a9d43d730957bc353a053e35c0 Mon Sep 17 00:00:00 2001 From: Inada Naoki Date: Tue, 24 Aug 2021 16:07:40 +0900 Subject: [PATCH 4/5] fix test case --- utils_test.go | 33 +++++++++++++++++++++++++++++---- 1 file changed, 29 insertions(+), 4 deletions(-) diff --git a/utils_test.go b/utils_test.go index 564736074..0d8644b49 100644 --- a/utils_test.go +++ b/utils_test.go @@ -387,10 +387,6 @@ func TestParseDateTime(t *testing.T) { name: "parse null datetime", str: sDateTime0, }, - { - name: "parse datetime without day", - str: "0000-00-00 21:30:45", - }, { name: "parse datetime nanosec 1-digit", str: "2020-05-25 23:22:01.1", @@ -444,6 +440,35 @@ func TestParseDateTime(t *testing.T) { } } +func TestInvalidDateTime(t *testing.T) { + cases := []struct { + name string + str string + want time.Time + }{ + { + name: "parse datetime without day", + str: "0000-00-00 21:30:45", + want: time.Date(0, 0, 0, 21, 30, 45, 0, time.UTC), + }, + } + + loc := time.UTC + + for _, cc := range cases { + t.Run(cc.name+"-"+loc.String(), func(t *testing.T) { + got, err := parseDateTime([]byte(cc.str), loc) + if err != nil { + t.Fatal(err) + } + + if !cc.want.Equal(got) { + t.Fatalf("want: %v, but got %v", cc.want, got) + } + }) + } +} + func TestParseDateTimeFail(t *testing.T) { cases := []struct { name string From 5d3df484d6afab6edd69d8f7afeb0533a57c8aef Mon Sep 17 00:00:00 2001 From: Inada Naoki Date: Tue, 24 Aug 2021 16:30:07 +0900 Subject: [PATCH 5/5] cleanup --- utils_test.go | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/utils_test.go b/utils_test.go index 0d8644b49..a89f2dd71 100644 --- a/utils_test.go +++ b/utils_test.go @@ -453,11 +453,9 @@ func TestInvalidDateTime(t *testing.T) { }, } - loc := time.UTC - for _, cc := range cases { - t.Run(cc.name+"-"+loc.String(), func(t *testing.T) { - got, err := parseDateTime([]byte(cc.str), loc) + t.Run(cc.name, func(t *testing.T) { + got, err := parseDateTime([]byte(cc.str), time.UTC) if err != nil { t.Fatal(err) }