From 4e4548546695751ee92c84a1cd9019776cdf1f0f Mon Sep 17 00:00:00 2001 From: Yuanjia Zhang Date: Tue, 4 Jun 2019 15:57:22 +0800 Subject: [PATCH] types: extract month support 0 (#10116) (#10702) --- types/time.go | 8 ++------ types/time_test.go | 26 ++++++++++++++++++++++++++ 2 files changed, 28 insertions(+), 6 deletions(-) diff --git a/types/time.go b/types/time.go index 2e1c0c0236b8d..a38dfa2359c73 100644 --- a/types/time.go +++ b/types/time.go @@ -1538,6 +1538,7 @@ func checkDatetimeType(t MysqlTime, allowZeroInDate, allowInvalidDate bool) erro // ExtractDatetimeNum extracts time value number from datetime unit and format. func ExtractDatetimeNum(t *Time, unit string) (int64, error) { + // TODO: Consider time_zone variable. switch strings.ToUpper(unit) { case "DAY": return int64(t.Time.Day()), nil @@ -1545,12 +1546,7 @@ func ExtractDatetimeNum(t *Time, unit string) (int64, error) { week := t.Time.Week(0) return int64(week), nil case "MONTH": - // TODO: Consider time_zone variable. - t1, err := t.Time.GoTime(gotime.Local) - if err != nil { - return 0, errors.Trace(err) - } - return int64(t1.Month()), nil + return int64(t.Time.Month()), nil case "QUARTER": m := int64(t.Time.Month()) // 1 - 3 -> 1 diff --git a/types/time_test.go b/types/time_test.go index 7ca8b2b74624e..caf177de996e6 100644 --- a/types/time_test.go +++ b/types/time_test.go @@ -1165,6 +1165,32 @@ func (s *testTimeSuite) TestExtractDatetimeNum(c *C) { res, err = types.ExtractDatetimeNum(&in, "TEST_ERROR") c.Assert(res, Equals, int64(0)) c.Assert(err, ErrorMatches, "invalid unit.*") + + in = types.Time{ + Time: types.FromDate(0000, 00, 00, 00, 00, 00, 0000), + Type: mysql.TypeTimestamp, + Fsp: types.DefaultFsp, + } + + res, err = types.ExtractDatetimeNum(&in, "day") + c.Assert(err, IsNil) + c.Assert(res, Equals, int64(0)) + + res, err = types.ExtractDatetimeNum(&in, "week") + c.Assert(err, IsNil) + c.Assert(res, Equals, int64(0)) + + res, err = types.ExtractDatetimeNum(&in, "MONTH") + c.Assert(err, IsNil) + c.Assert(res, Equals, int64(0)) + + res, err = types.ExtractDatetimeNum(&in, "QUARTER") + c.Assert(err, IsNil) + c.Assert(res, Equals, int64(0)) + + res, err = types.ExtractDatetimeNum(&in, "YEAR") + c.Assert(err, IsNil) + c.Assert(res, Equals, int64(0)) } func (s *testTimeSuite) TestExtractDurationNum(c *C) {