Skip to content

Commit 470e9f1

Browse files
authored
Merge pull request #390 from YenchangChan/main
fix(proto): DateTime/DateTime64 with '1970-01-01 00:00:00 UTC'
2 parents 0585bc2 + 7b55cdd commit 470e9f1

File tree

4 files changed

+36
-8
lines changed

4 files changed

+36
-8
lines changed

proto/datetime.go

-3
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,6 @@ func ToDateTime(t time.Time) DateTime {
1515

1616
// Time returns DateTime as time.Time.
1717
func (d DateTime) Time() time.Time {
18-
if d == 0 {
19-
return time.Time{}
20-
}
2118
// https://clickhouse.com/docs/en/sql-reference/data-types/datetime/#usage-remarks
2219
// ClickHouse stores UTC timestamps that are timezone-agnostic.
2320
return time.Unix(int64(d), 0)

proto/datetime64.go

-3
Original file line numberDiff line numberDiff line change
@@ -57,9 +57,6 @@ func ToDateTime64(t time.Time, p Precision) DateTime64 {
5757

5858
// Time returns DateTime64 as time.Time.
5959
func (d DateTime64) Time(p Precision) time.Time {
60-
if d == 0 {
61-
return time.Time{}
62-
}
6360
nsec := int64(d) * p.Scale()
6461
return time.Unix(nsec/1e9, nsec%1e9)
6562
}

proto/datetime64_test.go

+16-1
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ func TestDateTime64_Time(t *testing.T) {
1818
} {
1919
t.Run(p.Duration().String(), func(t *testing.T) {
2020
for _, v := range []time.Time{
21-
{}, // zero time
21+
time.Unix(0, 0).UTC(), // zero time
2222
time.Unix(1546290000, 0).UTC(),
2323
} {
2424
d := ToDateTime64(v, p)
@@ -28,6 +28,21 @@ func TestDateTime64_Time(t *testing.T) {
2828
assert.True(t, p.Valid())
2929
}
3030
})
31+
32+
t.Run("Zero_"+p.Duration().String(), func(t *testing.T) {
33+
t1 := time.Time{}
34+
t2 := time.Unix(0, 0).UTC()
35+
d1 := ToDateTime64(t1, p)
36+
d2 := ToDateTime64(t2, p)
37+
vt1 := d1.Time(p)
38+
vt2 := d2.Time(p)
39+
40+
assert.True(t, t1.IsZero())
41+
assert.False(t, t2.IsZero())
42+
assert.Equal(t, d1, d2)
43+
assert.Equal(t, vt1.Unix(), int64(0))
44+
assert.Equal(t, vt2.Unix(), int64(0))
45+
})
3146
}
3247
t.Run("Duration", func(t *testing.T) {
3348
assert.Equal(t, time.Second, PrecisionSecond.Duration(), "sec")

proto/datetime_test.go

+20-1
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import (
77
"github.com/stretchr/testify/assert"
88
)
99

10-
func TestDateTime_Time(t *testing.T) {
10+
func TestDateTime_ToDateTime(t *testing.T) {
1111
t.Run("Ok", func(t *testing.T) {
1212
v := time.Unix(1546290000, 0).UTC()
1313
d := ToDateTime(v)
@@ -19,3 +19,22 @@ func TestDateTime_Time(t *testing.T) {
1919
assert.Equal(t, int32(0), int32(d))
2020
})
2121
}
22+
23+
func TestDateTime_Time(t *testing.T) {
24+
t.Run("OK", func(t *testing.T) {
25+
d := DateTime(1546290000)
26+
assert.Equal(t, d.Time().Unix(), int64(1546290000))
27+
})
28+
29+
t.Run("Zero", func(t *testing.T) {
30+
d := DateTime(0)
31+
assert.Equal(t, d.Time().Unix(), int64(0))
32+
})
33+
34+
t.Run("IsZero", func(t *testing.T) {
35+
d1 := DateTime(0)
36+
d2 := time.Time{}
37+
assert.Equal(t, d1.Time().IsZero(), false)
38+
assert.Equal(t, d2.IsZero(), true)
39+
})
40+
}

0 commit comments

Comments
 (0)