This is an automated email from the ASF dual-hosted git repository.
zeroshade pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/arrow-adbc.git
The following commit(s) were added to refs/heads/main by this push:
new 9cff03fa fix(go/adbc/driver/snowflake): proper timezone for
timestamp_ltz (#1155)
9cff03fa is described below
commit 9cff03fa724fd15b7f27a097f102e086266c3f1e
Author: Matt Topol <[email protected]>
AuthorDate: Tue Oct 3 16:24:56 2023 -0400
fix(go/adbc/driver/snowflake): proper timezone for timestamp_ltz (#1155)
Fixes #1154
---
go/adbc/driver/snowflake/driver_test.go | 24 ++++++++++++++++++++++++
go/adbc/driver/snowflake/record_reader.go | 5 +++--
2 files changed, 27 insertions(+), 2 deletions(-)
diff --git a/go/adbc/driver/snowflake/driver_test.go
b/go/adbc/driver/snowflake/driver_test.go
index e35dea79..06fa7520 100644
--- a/go/adbc/driver/snowflake/driver_test.go
+++ b/go/adbc/driver/snowflake/driver_test.go
@@ -606,3 +606,27 @@ func (suite *SnowflakeTests)
TestNewDatabaseGetSetOptions() {
suite.NoError(err)
suite.Equal(optVal2, val2)
}
+
+func (suite *SnowflakeTests) TestTimestampSnow() {
+ suite.Require().NoError(suite.stmt.SetSqlQuery(`ALTER SESSION SET
TIMEZONE = "America/New_York"`))
+ _, err := suite.stmt.ExecuteUpdate(suite.ctx)
+ suite.Require().NoError(err)
+
+ suite.Require().NoError(suite.stmt.SetSqlQuery("SHOW WAREHOUSES"))
+ rdr, _, err := suite.stmt.ExecuteQuery(suite.ctx)
+ suite.Require().NoError(err)
+ defer rdr.Release()
+
+ suite.True(rdr.Next())
+ rec := rdr.Record()
+ for _, f := range rec.Schema().Fields() {
+ st, ok := f.Metadata.GetValue("SNOWFLAKE_TYPE")
+ if !ok {
+ continue
+ }
+ if st == "timestamp_ltz" {
+ suite.Require().IsType(&arrow.TimestampType{}, f.Type)
+ suite.Equal("America/New_York",
f.Type.(*arrow.TimestampType).TimeZone)
+ }
+ }
+}
diff --git a/go/adbc/driver/snowflake/record_reader.go
b/go/adbc/driver/snowflake/record_reader.go
index 5b4dbb49..8e0218a9 100644
--- a/go/adbc/driver/snowflake/record_reader.go
+++ b/go/adbc/driver/snowflake/record_reader.go
@@ -277,7 +277,7 @@ func rowTypesToArrowSchema(ctx context.Context, ld
gosnowflake.ArrowStreamLoader
fields[i].Type = arrow.FixedWidthTypes.Timestamp_ns
case "timestamp_ltz":
if loc == nil {
- loc = time.Now().Location()
+ loc = ld.Location()
}
fields[i].Type = &arrow.TimestampType{Unit:
arrow.Nanosecond, TimeZone: loc.String()}
case "binary":
@@ -335,7 +335,8 @@ func jsonDataToArrow(ctx context.Context, bldr
*array.RecordBuilder, ld gosnowfl
if err != nil {
return nil, err
}
- val := time.Unix(sec, nsec).In(loc)
+
+ val := time.Unix(sec, nsec).In(tz)
ts, err := arrow.TimestampFromTime(val,
arrow.Nanosecond)
if err != nil {
return nil, err