Skip to content
This repository was archived by the owner on Feb 26, 2024. It is now read-only.

Commit 4c3871c

Browse files
authored
Merge pull request ClickHouse#263 from coraxster/issue260
handle DateTime(<TZ>)
2 parents 74c52b8 + a4ee814 commit 4c3871c

File tree

2 files changed

+38
-10
lines changed

2 files changed

+38
-10
lines changed

lib/column/column.go

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -128,15 +128,6 @@ func Factory(name, chType string, timezone *time.Location) (Column, error) {
128128
Timezone: timezone,
129129
offset: int64(offset),
130130
}, nil
131-
case "DateTime":
132-
return &DateTime{
133-
base: base{
134-
name: name,
135-
chType: chType,
136-
valueOf: columnBaseTypes[time.Time{}],
137-
},
138-
Timezone: timezone,
139-
}, nil
140131
case "IPv4":
141132
return &IPv4{
142133
base: base{
@@ -154,8 +145,16 @@ func Factory(name, chType string, timezone *time.Location) (Column, error) {
154145
},
155146
}, nil
156147
}
157-
158148
switch {
149+
case strings.HasPrefix(chType, "DateTime"):
150+
return &DateTime{
151+
base: base{
152+
name: name,
153+
chType: "DateTime",
154+
valueOf: columnBaseTypes[time.Time{}],
155+
},
156+
Timezone: timezone,
157+
}, nil
159158
case strings.HasPrefix(chType, "Array"):
160159
return parseArray(name, chType, timezone)
161160
case strings.HasPrefix(chType, "Nullable"):

lib/column/column_test.go

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -465,6 +465,35 @@ func Test_Column_DateTime(t *testing.T) {
465465
}
466466
}
467467

468+
func Test_Column_DateTimeWithTZ(t *testing.T) {
469+
var (
470+
buf bytes.Buffer
471+
timeNow = time.Now().Truncate(time.Second)
472+
encoder = binary.NewEncoder(&buf)
473+
decoder = binary.NewDecoder(&buf)
474+
)
475+
if column, err := columns.Factory("column_name", `DateTime("UTC")`, time.Local); assert.NoError(t, err) {
476+
if err := column.Write(encoder, timeNow); assert.NoError(t, err) {
477+
if v, err := column.Read(decoder); assert.NoError(t, err) {
478+
assert.Equal(t, timeNow, v)
479+
}
480+
}
481+
if err := column.Write(encoder, timeNow.In(time.UTC).Format("2006-01-02 15:04:05")); assert.NoError(t, err) {
482+
if v, err := column.Read(decoder); assert.NoError(t, err) {
483+
assert.Equal(t, timeNow, v)
484+
}
485+
}
486+
if assert.Equal(t, "column_name", column.Name()) && assert.Equal(t, "DateTime", column.CHType()) {
487+
assert.Equal(t, reflect.TypeOf(time.Time{}).Kind(), column.ScanType().Kind())
488+
}
489+
if err := column.Write(encoder, int8(0)); assert.Error(t, err) {
490+
if e, ok := err.(*columns.ErrUnexpectedType); assert.True(t, ok) {
491+
assert.Equal(t, int8(0), e.T)
492+
}
493+
}
494+
}
495+
}
496+
468497
func Test_Column_UUID(t *testing.T) {
469498
var (
470499
buf bytes.Buffer

0 commit comments

Comments
 (0)