Commit e6f2811b by Leonard Gram

sql: seconds epochs are now correctly converted to ms.

Closes #12061
parent 83b7bbd6
...@@ -144,10 +144,10 @@ func ConvertSqlTimeColumnToEpochMs(values RowValues, timeIndex int) { ...@@ -144,10 +144,10 @@ func ConvertSqlTimeColumnToEpochMs(values RowValues, timeIndex int) {
if timeIndex >= 0 { if timeIndex >= 0 {
switch value := values[timeIndex].(type) { switch value := values[timeIndex].(type) {
case time.Time: case time.Time:
values[timeIndex] = EpochPrecisionToMs(float64(value.UnixNano())) values[timeIndex] = float64(value.UnixNano()) / float64(time.Millisecond)
case *time.Time: case *time.Time:
if value != nil { if value != nil {
values[timeIndex] = EpochPrecisionToMs(float64((*value).UnixNano())) values[timeIndex] = float64((*value).UnixNano()) / float64(time.Millisecond)
} }
case int64: case int64:
values[timeIndex] = int64(EpochPrecisionToMs(float64(value))) values[timeIndex] = int64(EpochPrecisionToMs(float64(value)))
......
...@@ -12,14 +12,17 @@ import ( ...@@ -12,14 +12,17 @@ import (
func TestSqlEngine(t *testing.T) { func TestSqlEngine(t *testing.T) {
Convey("SqlEngine", t, func() { Convey("SqlEngine", t, func() {
dt := time.Date(2018, 3, 14, 21, 20, 6, int(527345*time.Microsecond), time.UTC) dt := time.Date(2018, 3, 14, 21, 20, 6, int(527345*time.Microsecond), time.UTC)
earlyDt := time.Date(1970, 3, 14, 21, 20, 6, int(527345*time.Microsecond), time.UTC)
Convey("Given row values with time.Time as time columns", func() { Convey("Given row values with time.Time as time columns", func() {
var nilPointer *time.Time var nilPointer *time.Time
fixtures := make([]interface{}, 3) fixtures := make([]interface{}, 5)
fixtures[0] = dt fixtures[0] = dt
fixtures[1] = &dt fixtures[1] = &dt
fixtures[2] = nilPointer fixtures[2] = earlyDt
fixtures[3] = &earlyDt
fixtures[4] = nilPointer
for i := range fixtures { for i := range fixtures {
ConvertSqlTimeColumnToEpochMs(fixtures, i) ConvertSqlTimeColumnToEpochMs(fixtures, i)
...@@ -27,9 +30,13 @@ func TestSqlEngine(t *testing.T) { ...@@ -27,9 +30,13 @@ func TestSqlEngine(t *testing.T) {
Convey("When converting them should return epoch time with millisecond precision ", func() { Convey("When converting them should return epoch time with millisecond precision ", func() {
expected := float64(dt.UnixNano()) / float64(time.Millisecond) expected := float64(dt.UnixNano()) / float64(time.Millisecond)
expectedEarly := float64(earlyDt.UnixNano()) / float64(time.Millisecond)
So(fixtures[0].(float64), ShouldEqual, expected) So(fixtures[0].(float64), ShouldEqual, expected)
So(fixtures[1].(float64), ShouldEqual, expected) So(fixtures[1].(float64), ShouldEqual, expected)
So(fixtures[2], ShouldBeNil) So(fixtures[2].(float64), ShouldEqual, expectedEarly)
So(fixtures[3].(float64), ShouldEqual, expectedEarly)
So(fixtures[4], ShouldBeNil)
}) })
}) })
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment