From 31f5abdad8cc7744d3e0c4c371b4a3eb8a31fe9b Mon Sep 17 00:00:00 2001 From: Misko Lee Date: Fri, 2 Nov 2018 14:14:57 +0800 Subject: [PATCH] apply unit:day special logic on unit:hour for INTERVAL segment (#8146) --- expression/builtin_time.go | 4 ++-- expression/integration_test.go | 5 +++++ 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/expression/builtin_time.go b/expression/builtin_time.go index f2988489d5000..9eb30f6b27f44 100644 --- a/expression/builtin_time.go +++ b/expression/builtin_time.go @@ -2577,8 +2577,8 @@ func (du *baseDateArithmitical) getIntervalFromString(ctx sessionctx.Context, ar if isNull || err != nil { return "", true, errors.Trace(err) } - // unit "DAY" has to be specially handled. - if strings.ToLower(unit) == "day" { + // unit "DAY" and "HOUR" has to be specially handled. + if toLower := strings.ToLower(unit); toLower == "day" || toLower == "hour" { if strings.ToLower(interval) == "true" { interval = "1" } else if strings.ToLower(interval) == "false" { diff --git a/expression/integration_test.go b/expression/integration_test.go index 345427843f032..35373e5d39803 100644 --- a/expression/integration_test.go +++ b/expression/integration_test.go @@ -1807,6 +1807,11 @@ func (s *testIntegrationSuite) TestTimeBuiltin(c *C) { {"\"2009-01-01\"", "6/4", "HOUR_MINUTE", "2009-01-04 12:20:00", "2008-12-28 11:40:00"}, {"\"2009-01-01\"", "6/0", "HOUR_MINUTE", "", ""}, {"\"1970-01-01 12:00:00\"", "CAST(6/4 AS DECIMAL(3,1))", "HOUR_MINUTE", "1970-01-01 13:05:00", "1970-01-01 10:55:00"}, + //for issue #8077 + {"\"2012-01-02\"", "\"prefix8\"", "HOUR", "2012-01-02 08:00:00", "2012-01-01 16:00:00"}, + {"\"2012-01-02\"", "\"prefix8prefix\"", "HOUR", "2012-01-02 08:00:00", "2012-01-01 16:00:00"}, + {"\"2012-01-02\"", "\"8:00\"", "HOUR", "2012-01-02 08:00:00", "2012-01-01 16:00:00"}, + {"\"2012-01-02\"", "\"8:00:00\"", "HOUR", "2012-01-02 08:00:00", "2012-01-01 16:00:00"}, } for _, tc := range dateArithmeticalTests { addDate := fmt.Sprintf("select adddate(%s, interval %s %s);", tc.Date, tc.Interval, tc.Unit)