Skip to content

Commit 424995d

Browse files
Debiancczz-jason
authored andcommitted
types: fix converting decimal to datetime and timestamp (#9899)
1 parent b758907 commit 424995d

File tree

3 files changed

+18
-0
lines changed

3 files changed

+18
-0
lines changed

expression/integration_test.go

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4116,3 +4116,15 @@ func (s *testIntegrationSuite) TestIssue9710(c *C) {
41164116
break
41174117
}
41184118
}
4119+
4120+
// for issue #9770
4121+
func (s *testIntegrationSuite) TestDecimalConvertToTime(c *C) {
4122+
tk := testkit.NewTestKit(c, s.store)
4123+
defer s.cleanEnv(c)
4124+
4125+
tk.MustExec("use test")
4126+
tk.MustExec("drop table if exists t")
4127+
tk.MustExec("create table t(a datetime(6), b timestamp)")
4128+
tk.MustExec("insert t values (20010101100000.123456, 20110707101112.123456)")
4129+
tk.MustQuery("select * from t").Check(testkit.Rows("2001-01-01 10:00:00.123456 2011-07-07 10:11:12"))
4130+
}

types/convert_test.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -630,7 +630,9 @@ func (s *testTypeConvertSuite) TestConvert(c *C) {
630630
signedAccept(c, mysql.TypeDatetime, "2012-08-23 12:34:03.123456", "2012-08-23 12:34:03")
631631
signedAccept(c, mysql.TypeDatetime, ZeroDatetime, "0000-00-00 00:00:00")
632632
signedAccept(c, mysql.TypeDatetime, int64(0), "0000-00-00 00:00:00")
633+
signedAccept(c, mysql.TypeDatetime, NewDecFromFloatForTest(20010101100000.123456), "2001-01-01 10:00:00")
633634
signedAccept(c, mysql.TypeTimestamp, "2012-08-23 12:34:03.123456", "2012-08-23 12:34:03")
635+
signedAccept(c, mysql.TypeTimestamp, NewDecFromFloatForTest(20010101100000.123456), "2001-01-01 10:00:00")
634636
signedAccept(c, mysql.TypeDuration, "10:11:12", "10:11:12")
635637
signedAccept(c, mysql.TypeDuration, ZeroDatetime, "00:00:00")
636638
signedAccept(c, mysql.TypeDuration, ZeroDuration, "00:00:00")

types/datum.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -961,6 +961,8 @@ func (d *Datum) convertToMysqlTimestamp(sc *stmtctx.StatementContext, target *Fi
961961
t, err = ParseTime(sc, d.GetString(), mysql.TypeTimestamp, fsp)
962962
case KindInt64:
963963
t, err = ParseTimeFromNum(sc, d.GetInt64(), mysql.TypeTimestamp, fsp)
964+
case KindMysqlDecimal:
965+
t, err = ParseTimeFromFloatString(sc, d.GetMysqlDecimal().String(), mysql.TypeTimestamp, fsp)
964966
default:
965967
return invalidConv(d, mysql.TypeTimestamp)
966968
}
@@ -998,6 +1000,8 @@ func (d *Datum) convertToMysqlTime(sc *stmtctx.StatementContext, target *FieldTy
9981000
return ret, errors.Trace(err)
9991001
}
10001002
t, err = t.RoundFrac(sc, fsp)
1003+
case KindMysqlDecimal:
1004+
t, err = ParseTimeFromFloatString(sc, d.GetMysqlDecimal().String(), tp, fsp)
10011005
case KindString, KindBytes:
10021006
t, err = ParseTime(sc, d.GetString(), tp, fsp)
10031007
case KindInt64:

0 commit comments

Comments
 (0)