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

Commit 54b6774

Browse files
authored
Merge pull request #1 from ClickHouse/master
sync with origin master
2 parents 07664d4 + 4c3871c commit 54b6774

File tree

3 files changed

+40
-12
lines changed

3 files changed

+40
-12
lines changed

clickhouse_negative_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,14 +18,14 @@ func Test_Negative_OpenConnectAndPing(t *testing.T) {
1818
if connect, err := sql.Open("clickhouse", "tcp://127.0.0.1:9000?username=invalid"); assert.NoError(t, err) {
1919
if err := connect.Ping(); assert.Error(t, err) {
2020
if exception, ok := err.(*clickhouse.Exception); assert.True(t, ok) {
21-
assert.Equal(t, int32(192), exception.Code)
21+
assert.Truef(t, exception.Code == int32(192) || exception.Code == int32(516), "Not equal. Expected: 192 or 516. Actual: %n", exception.Code)
2222
}
2323
}
2424
}
2525
if connect, err := sql.Open("clickhouse", "tcp://127.0.0.1:9000?password=invalid"); assert.NoError(t, err) {
2626
if err := connect.Ping(); assert.Error(t, err) {
2727
if exception, ok := err.(*clickhouse.Exception); assert.True(t, ok) {
28-
assert.Equal(t, int32(193), exception.Code)
28+
assert.Truef(t, exception.Code == int32(192) || exception.Code == int32(516), "Not equal. Expected: 192 or 516. Actual: %n", exception.Code)
2929
}
3030
}
3131
}

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)