Skip to content

Commit 011caea

Browse files
qw4990zz-jason
authored andcommitted
types: fix converting decimal to datetime and timestamp (#9899) (#10734)
1 parent d07bdb2 commit 011caea

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
@@ -4057,3 +4057,15 @@ func (s *testIntegrationSuite) TestIssue10181(c *C) {
40574057
tk.MustExec(`insert into t values(9223372036854775807), (18446744073709551615)`)
40584058
tk.MustQuery(`select * from t where a > 9223372036854775807-0.5 order by a`).Check(testkit.Rows(`9223372036854775807`, `18446744073709551615`))
40594059
}
4060+
4061+
// for issue #9770
4062+
func (s *testIntegrationSuite) TestDecimalConvertToTime(c *C) {
4063+
tk := testkit.NewTestKit(c, s.store)
4064+
defer s.cleanEnv(c)
4065+
4066+
tk.MustExec("use test")
4067+
tk.MustExec("drop table if exists t")
4068+
tk.MustExec("create table t(a datetime(6), b timestamp)")
4069+
tk.MustExec("insert t values (20010101100000.123456, 20110707101112.123456)")
4070+
tk.MustQuery("select * from t").Check(testkit.Rows("2001-01-01 10:00:00.123456 2011-07-07 10:11:12"))
4071+
}

types/convert_test.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -628,7 +628,9 @@ func (s *testTypeConvertSuite) TestConvert(c *C) {
628628
signedAccept(c, mysql.TypeDatetime, "2012-08-23 12:34:03.123456", "2012-08-23 12:34:03")
629629
signedAccept(c, mysql.TypeDatetime, ZeroDatetime, "0000-00-00 00:00:00")
630630
signedAccept(c, mysql.TypeDatetime, int64(0), "0000-00-00 00:00:00")
631+
signedAccept(c, mysql.TypeDatetime, NewDecFromFloatForTest(20010101100000.123456), "2001-01-01 10:00:00")
631632
signedAccept(c, mysql.TypeTimestamp, "2012-08-23 12:34:03.123456", "2012-08-23 12:34:03")
633+
signedAccept(c, mysql.TypeTimestamp, NewDecFromFloatForTest(20010101100000.123456), "2001-01-01 10:00:00")
632634
signedAccept(c, mysql.TypeDuration, "10:11:12", "10:11:12")
633635
signedAccept(c, mysql.TypeDuration, ZeroDatetime, "00:00:00")
634636
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
@@ -948,6 +948,8 @@ func (d *Datum) convertToMysqlTimestamp(sc *stmtctx.StatementContext, target *Fi
948948
t, err = ParseTime(sc, d.GetString(), mysql.TypeTimestamp, fsp)
949949
case KindInt64:
950950
t, err = ParseTimeFromNum(sc, d.GetInt64(), mysql.TypeTimestamp, fsp)
951+
case KindMysqlDecimal:
952+
t, err = ParseTimeFromFloatString(sc, d.GetMysqlDecimal().String(), mysql.TypeTimestamp, fsp)
951953
default:
952954
return invalidConv(d, mysql.TypeTimestamp)
953955
}
@@ -985,6 +987,8 @@ func (d *Datum) convertToMysqlTime(sc *stmtctx.StatementContext, target *FieldTy
985987
return ret, errors.Trace(err)
986988
}
987989
t, err = t.RoundFrac(sc, fsp)
990+
case KindMysqlDecimal:
991+
t, err = ParseTimeFromFloatString(sc, d.GetMysqlDecimal().String(), tp, fsp)
988992
case KindString, KindBytes:
989993
t, err = ParseTime(sc, d.GetString(), tp, fsp)
990994
case KindInt64:

0 commit comments

Comments
 (0)