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

Reply via email to