diff --git a/.golangci.yml b/.golangci.yml index d060a9ec..dc9e75e4 100644 --- a/.golangci.yml +++ b/.golangci.yml @@ -25,7 +25,7 @@ linters: - $gostd - github.com/databricks/databricks-sql-go - github.com/databricks/databricks-sql-kernel-bindings - - github.com/apache/arrow/go/v12 + - github.com/apache/arrow-go/v18 - github.com/apache/thrift/lib/go/thrift - github.com/coreos/go-oidc/v3/oidc - github.com/golang-jwt/jwt/v5 diff --git a/CHANGELOG.md b/CHANGELOG.md index 282b6e1a..aa9c7f9a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,8 @@ ## Unreleased +- **Breaking change:** Upgrade Arrow Go from v12 to v18.8.0. Arrow batch API consumers must migrate to `github.com/apache/arrow-go/v18`. The `database/sql` and Arrow IPC iterator APIs are unchanged. + - Upgrade go-oidc to v3.21.0 (go-jose v4.1.6) and x/oauth2 to v0.36.0 to address go-jose/v3 security findings (databricks/databricks-sql-go#526). - Reduce kernel-backend JSON rendering allocations for nested Boolean and signed-integer values. - Render most nested ARRAY / MAP / STRUCT scalars (numbers, booleans, and strings that need no escaping) without `encoding/json` on both backends, avoiding the per-value overhead of Go 1.27's json/v2-backed `encoding/json` (databricks/databricks-sql-go#527). diff --git a/doc.go b/doc.go index e78f5a61..0c303030 100644 --- a/doc.go +++ b/doc.go @@ -444,9 +444,9 @@ The driver exposes two public interfaces for working with record batches from th } type ArrowBatchIterator interface { - // Retrieve the next arrow.Record. + // Retrieve the next arrow.RecordBatch. // Will return io.EOF if there are no more records - Next() (arrow.Record, error) + Next() (arrow.RecordBatch, error) // Return true if the iterator contains more batches, false otherwise. HasNext() bool diff --git a/examples/arrrowbatches/main.go b/examples/arrrowbatches/main.go index ef14c733..6678d7d7 100644 --- a/examples/arrrowbatches/main.go +++ b/examples/arrrowbatches/main.go @@ -10,7 +10,7 @@ import ( "strconv" "time" - "github.com/apache/arrow/go/v12/arrow" + "github.com/apache/arrow-go/v18/arrow" dbsql "github.com/databricks/databricks-sql-go" dbsqlrows "github.com/databricks/databricks-sql-go/rows" "github.com/joho/godotenv" @@ -124,7 +124,7 @@ func loopWithNext(db *sql.DB) { } var iBatch, nRows int - var b arrow.Record + var b arrow.RecordBatch for b, err = batches.Next(); err == nil; b, err = batches.Next() { log.Printf("batch %v: nRecords=%v\n", iBatch, b.NumRows()) iBatch += 1 diff --git a/examples/ipcstreams/main.go b/examples/ipcstreams/main.go index 2cfc7d2c..8f395460 100644 --- a/examples/ipcstreams/main.go +++ b/examples/ipcstreams/main.go @@ -10,7 +10,7 @@ import ( "strconv" "time" - "github.com/apache/arrow/go/v12/arrow/ipc" + "github.com/apache/arrow-go/v18/arrow/ipc" dbsql "github.com/databricks/databricks-sql-go" dbsqlrows "github.com/databricks/databricks-sql-go/rows" "github.com/joho/godotenv" @@ -97,7 +97,7 @@ func main() { // Process records in the stream for ipcReader.Next() { - record := ipcReader.Record() + record := ipcReader.RecordBatch() recordCount++ log.Printf("Stream %d, Record %d: %d rows, %d columns", streamCount, recordCount, record.NumRows(), record.NumCols()) diff --git a/go.mod b/go.mod index a5ba805a..0ce77d82 100644 --- a/go.mod +++ b/go.mod @@ -3,48 +3,39 @@ module github.com/databricks/databricks-sql-go go 1.27.3 require ( - github.com/apache/arrow/go/v12 v12.0.1 + github.com/apache/arrow-go/v18 v18.8.0 github.com/apache/thrift v0.24.0 github.com/coreos/go-oidc/v3 v3.21.0 github.com/golang-jwt/jwt/v5 v5.2.2 github.com/joho/godotenv v1.4.0 - github.com/mattn/go-isatty v0.0.20 - github.com/pierrec/lz4/v4 v4.1.15 - github.com/stretchr/testify v1.8.1 + github.com/mattn/go-isatty v0.0.24 + github.com/pierrec/lz4/v4 v4.1.29 + github.com/stretchr/testify v1.12.1 golang.org/x/oauth2 v0.36.0 golang.org/x/sync v0.22.0 gotest.tools/gotestsum v1.8.2 ) require ( - github.com/andybalholm/brotli v1.0.4 // indirect - github.com/davecgh/go-spew v1.1.1 // indirect github.com/dnephin/pflag v1.0.7 // indirect github.com/fatih/color v1.16.0 // indirect github.com/fsnotify/fsnotify v1.5.4 // indirect github.com/go-jose/go-jose/v4 v4.1.6 // indirect - github.com/goccy/go-json v0.9.11 // indirect - github.com/golang/snappy v0.0.4 // indirect - github.com/google/flatbuffers v2.0.8+incompatible // indirect + github.com/goccy/go-json v0.10.6 // indirect + github.com/google/flatbuffers v25.12.19+incompatible // indirect github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 // indirect github.com/hashicorp/go-cleanhttp v0.5.2 // indirect - github.com/klauspost/asmfmt v1.3.2 // indirect - github.com/klauspost/compress v1.18.7 // indirect - github.com/klauspost/cpuid/v2 v2.0.9 // indirect - github.com/kr/text v0.2.0 // indirect + github.com/klauspost/compress v1.19.2 // indirect + github.com/klauspost/cpuid/v2 v2.4.0 // indirect github.com/mattn/go-colorable v0.1.13 // indirect - github.com/minio/asm2plan9s v0.0.0-20200509001527-cdd76441f9d8 // indirect - github.com/minio/c2goasm v0.0.0-20190812172519-36a3d3bbc4f3 // indirect - github.com/pmezard/go-difflib v1.0.0 // indirect - github.com/zeebo/xxh3 v1.0.2 // indirect + github.com/zeebo/xxh3 v1.1.0 // indirect + go.yaml.in/yaml/v3 v3.0.5 // indirect // Deliberate security-scan minimum; go mod tidy removes this unused requirement. golang.org/x/crypto v0.55.0 // indirect + golang.org/x/exp v0.0.0-20260112195511-716be5621a96 // indirect golang.org/x/mod v0.40.0 // indirect - golang.org/x/telemetry v0.0.0-20260811182544-a038080d80e5 // indirect golang.org/x/term v0.45.0 // indirect golang.org/x/tools v0.49.0 // indirect - golang.org/x/xerrors v0.0.0-20220609144429-65e65417b02f // indirect - gopkg.in/yaml.v3 v3.0.1 // indirect ) require ( diff --git a/go.sum b/go.sum index 0a820e4f..711c73fa 100644 --- a/go.sum +++ b/go.sum @@ -1,15 +1,12 @@ -github.com/JohnCGriffin/overflow v0.0.0-20211019200055-46fa312c352c h1:RGWPOewvKIROun94nF7v2cua9qP+thov/7M50KEoeSU= -github.com/JohnCGriffin/overflow v0.0.0-20211019200055-46fa312c352c/go.mod h1:X0CRv0ky0k6m906ixxpzmDRLvX58TFUKS2eePweuyxk= -github.com/andybalholm/brotli v1.0.4 h1:V7DdXeJtZscaqfNuAdSRuRFzuiKlHSC/Zh3zl9qY3JY= -github.com/andybalholm/brotli v1.0.4/go.mod h1:fO7iG3H7G2nSZ7m0zPUDn85XEX2GTukHGRSepvi9Eig= -github.com/apache/arrow/go/v12 v12.0.1 h1:JsR2+hzYYjgSUkBSaahpqCetqZMr76djX80fF/DiJbg= -github.com/apache/arrow/go/v12 v12.0.1/go.mod h1:weuTY7JvTG/HDPtMQxEUp7pU73vkLWMLpY67QwZ/WWw= +github.com/andybalholm/brotli v1.2.3 h1:8H1qwOkl2LPfjf3YezB90JnCliZb6SInJ/OJkEbA5NQ= +github.com/andybalholm/brotli v1.2.3/go.mod h1:rzTDkvFWvIrjDXZHkuS16NPggd91W3kUSvPlQ1pLaKY= +github.com/apache/arrow-go/v18 v18.8.0 h1:BLOzbPv7bxMPgXPacAg6HQjnxupYsZzC4tf+FkqPU/M= +github.com/apache/arrow-go/v18 v18.8.0/go.mod h1:uJCFfCwq0KsxCmsCfQg4ft+LsW+iHYzAXiSDh5ug/8U= github.com/apache/thrift v0.24.0 h1:zy31L1a49QTNB2bG1BBfMXol3yJrTH975G3pPubQVLQ= github.com/apache/thrift v0.24.0/go.mod h1:zPt6WxgvTOM6hF92y8C+MkEM5LMxZuk4JcQOiU4Esvs= github.com/coreos/go-oidc/v3 v3.21.0 h1:wZo4Q9Pum8dYEj0eMUPrqR+kvuGkeUplbLpNCkBqoWM= github.com/coreos/go-oidc/v3 v3.21.0/go.mod h1:DYCf24+ncYi+XkIH97GY1+dqoRlbaSI26KVTCI9SrY4= github.com/coreos/go-systemd/v22 v22.3.3-0.20220203105225-a9a7ef127534/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= -github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/databricks/databricks-sql-kernel-bindings/lib/darwin_amd64 v1.3.0 h1:jsqIggzibHpPMCSrnBvszP3Pp0kIClAmp53MevmggNg= github.com/databricks/databricks-sql-kernel-bindings/lib/darwin_amd64 v1.3.0/go.mod h1:ceyJVgJAbNmkwc/2YMUNGuw2gd8nHZwZhP2xpN84VBg= github.com/databricks/databricks-sql-kernel-bindings/lib/darwin_arm64 v1.3.0 h1:VWoBD68/2MEz1ZTpMmAjKSQW4toyxw+zXc3BQ5aJafg= @@ -24,9 +21,6 @@ github.com/databricks/databricks-sql-kernel-bindings/lib/windows_amd64 v1.3.0 h1 github.com/databricks/databricks-sql-kernel-bindings/lib/windows_amd64 v1.3.0/go.mod h1:OaUVov84uK1IJz1gNk5TIoae0rj0vx+4N1qqRT88MdU= github.com/databricks/databricks-sql-kernel-bindings/lib/windows_arm64 v1.3.0 h1:gvvenBmV7zpxJwVUv4zX1vUNoqk+BmkStMqRXxNvW+M= github.com/databricks/databricks-sql-kernel-bindings/lib/windows_arm64 v1.3.0/go.mod h1:Z8JD951Nk66P1J8hL6YhkyMp1YAnrRzxE2JMTYRblxc= -github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= -github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/dnephin/pflag v1.0.7 h1:oxONGlWxhmUct0YzKTgrpQv9AUA1wtPBn7zuSjJqptk= github.com/dnephin/pflag v1.0.7/go.mod h1:uxE91IoWURlOiTUIA8Mq5ZZkAv3dPUfZNaT80Zm7OQE= github.com/fatih/color v1.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYFFOfk= @@ -36,23 +30,21 @@ github.com/fsnotify/fsnotify v1.5.4 h1:jRbGcIw6P2Meqdwuo0H1p6JVLbL5DHKAKlYndzMwV github.com/fsnotify/fsnotify v1.5.4/go.mod h1:OVB6XrOHzAwXMpEM7uPOzcehqUV2UqJxmVXmkdnm1bU= github.com/go-jose/go-jose/v4 v4.1.6 h1:sNRkftxFJxwsILiQukqp5z83QBSmntVwmgRY7AqBDO4= github.com/go-jose/go-jose/v4 v4.1.6/go.mod h1:x4oUasVrzR7071A4TnHLGSPpNOm2a21K9Kf04k1rs08= -github.com/goccy/go-json v0.9.11 h1:/pAaQDLHEoCq/5FFmSKBswWmK6H0e8g4159Kc/X/nqk= -github.com/goccy/go-json v0.9.11/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I= +github.com/goccy/go-json v0.10.6 h1:p8HrPJzOakx/mn/bQtjgNjdTcN+/S6FcG2CTtQOrHVU= +github.com/goccy/go-json v0.10.6/go.mod h1:oq7eo15ShAhp70Anwd5lgX2pLfOS3QCiwU/PULtXL6M= github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= github.com/golang-jwt/jwt/v5 v5.2.2 h1:Rl4B7itRWVtYIHFrSNd7vhTiz9UpLdi6gZhZ3wEeDy8= github.com/golang-jwt/jwt/v5 v5.2.2/go.mod h1:pqrtFR0X4osieyHYxtmOUWsAWrfe1Q5UVIyoH402zdk= -github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM= -github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= -github.com/google/flatbuffers v2.0.8+incompatible h1:ivUb1cGomAB101ZM1T0nOiWz9pSrTMoa9+EiY7igmkM= -github.com/google/flatbuffers v2.0.8+incompatible/go.mod h1:1AeVuKshWv4vARoZatz6mlQ0JxURH0Kv5+zNeJKJCa8= +github.com/google/flatbuffers v25.12.19+incompatible h1:haMV2JRRJCe1998HeW/p0X9UaMTK6SDo0ffLn2+DbLs= +github.com/google/flatbuffers v25.12.19+incompatible/go.mod h1:1AeVuKshWv4vARoZatz6mlQ0JxURH0Kv5+zNeJKJCa8= github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 h1:El6M4kTTCOh6aBiKaUGG7oYTSPP8MxqL4YI3kZKwcP4= github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510/go.mod h1:pupxD2MaaD3pAXIBCelhxNneeOaAeabZDe5s4K6zSpQ= -github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= -github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= +github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/hashicorp/go-cleanhttp v0.5.2 h1:035FKYIWjmULyFRBKPs8TBQoi0x6d9G4xc9neXJWAZQ= github.com/hashicorp/go-cleanhttp v0.5.2/go.mod h1:kO/YDlP8L1346E6Sodw+PrpBSV4/SoxCXGY6BqNFT48= github.com/hashicorp/go-hclog v1.6.3 h1:Qr2kF+eVWjTiYmU7Y31tYlP1h0q/X3Nl3tPGdaB11/k= @@ -61,68 +53,51 @@ github.com/hashicorp/go-retryablehttp v0.7.7 h1:C8hUCYzor8PIfXHa4UrZkU4VvK8o9ISH github.com/hashicorp/go-retryablehttp v0.7.7/go.mod h1:pkQpWZeYWskR+D1tR2O5OcBFOxfA7DoAO6xtkuQnHTk= github.com/joho/godotenv v1.4.0 h1:3l4+N6zfMWnkbPEXKng2o2/MR5mSwTrBih4ZEkkz1lg= github.com/joho/godotenv v1.4.0/go.mod h1:f4LDr5Voq0i2e/R5DDNOoa2zzDfwtkZa6DnEwAbqwq4= -github.com/klauspost/asmfmt v1.3.2 h1:4Ri7ox3EwapiOjCki+hw14RyKk201CN4rzyCJRFLpK4= -github.com/klauspost/asmfmt v1.3.2/go.mod h1:AG8TuvYojzulgDAMCnYn50l/5QV3Bs/tp6j0HLHbNSE= -github.com/klauspost/compress v1.18.7 h1:aUyZsS4kH3QTKurYhAOwAHxllVPnOthb3vPfnF1Ehjw= -github.com/klauspost/compress v1.18.7/go.mod h1:cwPg85FWrGar70rWktvGQj8/hthj3wpl0PGDogxkrSQ= -github.com/klauspost/cpuid/v2 v2.0.9 h1:lgaqFMSdTdQYdZ04uHyN2d/eKdOMyi2YLSvlQIBFYa4= -github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= -github.com/kr/pretty v0.3.0 h1:WgNl7dwNpEZ6jJ9k1snq4pZsg7DOEN8hP9Xw0Tsjwk0= -github.com/kr/pretty v0.3.0/go.mod h1:640gp4NfQd8pI5XOwp5fnNeVWj67G7CFk/SaSQn7NBk= -github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= -github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= -github.com/mattn/go-colorable v0.1.9/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= +github.com/klauspost/compress v1.19.2 h1:hMRETovs/pu/dVWN7zIT1PGG8t509MwT6bO7XSi26R8= +github.com/klauspost/compress v1.19.2/go.mod h1:cwPg85FWrGar70rWktvGQj8/hthj3wpl0PGDogxkrSQ= +github.com/klauspost/cpuid/v2 v2.4.0 h1:S6Hrbc7+ywsr0r+RLapfGBHfyefhCTwEh3A0tV913Dw= +github.com/klauspost/cpuid/v2 v2.4.0/go.mod h1:19jmZ9mjzoF//ddRSUsv0zfBTJWh3QJh9FNxZTMrGxU= github.com/mattn/go-colorable v0.1.12/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4= github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA= github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg= +github.com/mattn/go-colorable v0.1.9/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94= github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= -github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY= -github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= -github.com/minio/asm2plan9s v0.0.0-20200509001527-cdd76441f9d8 h1:AMFGa4R4MiIpspGNG7Z948v4n35fFGB3RR3G/ry4FWs= -github.com/minio/asm2plan9s v0.0.0-20200509001527-cdd76441f9d8/go.mod h1:mC1jAcsrzbxHt8iiaC+zU4b1ylILSosueou12R++wfY= -github.com/minio/c2goasm v0.0.0-20190812172519-36a3d3bbc4f3 h1:+n/aFZefKZp7spd8DFdX7uMikMLXX4oubIzJF4kv/wI= -github.com/minio/c2goasm v0.0.0-20190812172519-36a3d3bbc4f3/go.mod h1:RagcQ7I8IeTMnF8JTXieKnO4Z6JCsikNEzj0DwauVzE= -github.com/pierrec/lz4/v4 v4.1.15 h1:MO0/ucJhngq7299dKLwIMtgTfbkoSPF6AoMYDd8Q4q0= -github.com/pierrec/lz4/v4 v4.1.15/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4= +github.com/mattn/go-isatty v0.0.24 h1:tGZZoVgT/KiqK1c8ocVLeDS8BSWMRd47J3Lbz7vsReI= +github.com/mattn/go-isatty v0.0.24/go.mod h1:nMCL3Zebbrt45jsMDgnfIwz6ydEQApk5oEI3HqDio6A= +github.com/pierrec/lz4/v4 v4.1.29 h1:CDQY6qZOLI4DW0Nx6R1vRrifrCeQHnNXkMb0hZWXFjg= +github.com/pierrec/lz4/v4 v4.1.29/go.mod h1:EoQMVJgeeEOMsCqCzqFm2O0cJvljX2nGZjcRIPL34O4= github.com/pkg/browser v0.0.0-20210911075715-681adbf594b8 h1:KoWmjvw+nsYOo29YJK9vDA65RGE3NrOnUtO7a+RF9HU= github.com/pkg/browser v0.0.0-20210911075715-681adbf594b8/go.mod h1:HKlIX3XHQyzLZPlr7++PzdhaXEj94dEiJgZDTsxEqUI= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= -github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/rogpeppe/go-internal v1.9.0 h1:73kH8U+JUqXU8lRuOHeVHaa/SZPifC7BkcraZVejAe8= -github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs= github.com/rs/xid v1.4.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg= github.com/rs/zerolog v1.28.0 h1:MirSo27VyNi7RJYP3078AA1+Cyzd2GB66qy3aUHvsWY= github.com/rs/zerolog v1.28.0/go.mod h1:NILgTygv/Uej1ra5XxGf82ZFSLk58MFGAUS2o6usyD0= github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= -github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= -github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= -github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= -github.com/stretchr/testify v1.8.1 h1:w7B6lhMri9wdJUVmEZPGGhZzrYTPvgJArz7wNPgYKsk= -github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= +github.com/stretchr/testify v1.12.1 h1:EuwCh5fleGS7H32xRwO3wRGT7DxrDhLAT6FF8MpWDWE= +github.com/stretchr/testify v1.12.1/go.mod h1:MDEgiDPPsNp5cuIrHPPCyornHKgEVbtFUmoNlxoYthg= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.4.1/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= github.com/zeebo/assert v1.3.0 h1:g7C04CbJuIDKNPFHmsk4hwZDO5O+kntRxzaUoNXj+IQ= github.com/zeebo/assert v1.3.0/go.mod h1:Pq9JiuJQpG8JLJdtkwrJESF0Foym2/D9XMU5ciN/wJ0= -github.com/zeebo/xxh3 v1.0.2 h1:xZmwmqxHZA8AI603jOQ0tMqmBr9lPeFwGg6d+xy9DC0= -github.com/zeebo/xxh3 v1.0.2/go.mod h1:5NWz9Sef7zIDm2JHfFlcQvNekmcEl9ekUZQQKCYaDcA= +github.com/zeebo/xxh3 v1.1.0 h1:s7DLGDK45Dyfg7++yxI0khrfwq9661w9EN78eP/UZVs= +github.com/zeebo/xxh3 v1.1.0/go.mod h1:IisAie1LELR4xhVinxWS5+zf1lA4p0MW4T+w+W07F5s= +go.yaml.in/yaml/v3 v3.0.5 h1:N6y/pJk8buWs9NY5ERU2HSMfm+IuD/OtfdAnq6kESPw= +go.yaml.in/yaml/v3 v3.0.5/go.mod h1:HVTZu1O7/Vkt2N+BFy8Zza+lnLsABggaTM2ZpNIGuKg= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.55.0 h1:+KWHjbgOaAQ66dh/YlkZKHlz9ZUlq61AFirAR9ntP8M= golang.org/x/crypto v0.55.0/go.mod h1:uq0V9dE/fzQuJtbnL+2EhWOE63vo164FY8xqEnV9xis= -golang.org/x/exp v0.0.0-20220827204233-334a2380cb91 h1:tnebWN09GYg9OLPss1KXj8txwZc6X6uMr6VFdcGNbHw= -golang.org/x/exp v0.0.0-20220827204233-334a2380cb91/go.mod h1:cyybsKvd6eL0RnXn6p/Grxp8F5bW7iYuBgsNCOHpMYE= +golang.org/x/exp v0.0.0-20260112195511-716be5621a96 h1:Z/6YuSHTLOHfNFdb8zVZomZr7cqNgTJvA8+Qz75D8gU= +golang.org/x/exp v0.0.0-20260112195511-716be5621a96/go.mod h1:nzimsREAkjBCIEFtHiYkrJyT+2uy9YZJB7H1k68CXZU= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= golang.org/x/mod v0.40.0 h1:hUv+3cXcdRHz08UmSiOob7sadHig73uo5bkXxQ/tvUs= golang.org/x/mod v0.40.0/go.mod h1:0/weTWkPWGBikyTWAX3dkjVztMmBA5hM0DH6BElSupE= +golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= @@ -152,11 +127,8 @@ golang.org/x/sys v0.0.0-20211019181941-9d821ace8654/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220412211240-33da011f77ad/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.47.0 h1:o7XGOvZQCADBQQ4Y7VNq2dRWQR7JmOUW8Kxx4ZsNgWs= golang.org/x/sys v0.47.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw= -golang.org/x/telemetry v0.0.0-20260811182544-a038080d80e5 h1:ZUSxONxc981v7AW7QUg+I9WwZzSTTJ019ENBYr5pV/Q= -golang.org/x/telemetry v0.0.0-20260811182544-a038080d80e5/go.mod h1:LVehoXe41cL5SCVQilsV7Gg6BNG+Js6P9PhSbYTIUkQ= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20220526004731-065cf7ba2467/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.45.0 h1:NwWyBmoJCbfTHpxrWoZ9C6/VxOf7ic219I8xZZFdrf0= @@ -175,16 +147,8 @@ golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8T golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20220609144429-65e65417b02f h1:uF6paiQQebLeSXkrTqHqz0MXhXXS1KgF41eUdBNvxK0= -golang.org/x/xerrors v0.0.0-20220609144429-65e65417b02f/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= -gonum.org/v1/gonum v0.11.0 h1:f1IJhK4Km5tBJmaiJXtk/PkL4cdVX6J+tGiM187uT5E= -gonum.org/v1/gonum v0.11.0/go.mod h1:fSG4YDCxxUZQJ7rKsQrj0gMOg00Il0Z96/qMA4bVQhA= -gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= -gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= -gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= -gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gonum.org/v1/gonum v0.17.0 h1:VbpOemQlsSMrYmn7T2OUvQ4dqxQXU+ouZFQsZOx50z4= +gonum.org/v1/gonum v0.17.0/go.mod h1:El3tOrEuMpv2UdMrbNlKEh9vd86bmQ6vqIcDwxEOc1E= gotest.tools/gotestsum v1.8.2 h1:szU3TaSz8wMx/uG+w/A2+4JUPwH903YYaMI9yOOYAyI= gotest.tools/gotestsum v1.8.2/go.mod h1:6JHCiN6TEjA7Kaz23q1bH0e2Dc3YJjDUZ0DmctFZf+w= gotest.tools/v3 v3.3.0 h1:MfDY1b1/0xN1CyMlQDac0ziEy9zJQd9CXBRRDHw2jJo= diff --git a/internal/arrowscan/arrowscan.go b/internal/arrowscan/arrowscan.go index a201610c..f7c82508 100644 --- a/internal/arrowscan/arrowscan.go +++ b/internal/arrowscan/arrowscan.go @@ -27,8 +27,8 @@ import ( "strings" "time" - "github.com/apache/arrow/go/v12/arrow" - "github.com/apache/arrow/go/v12/arrow/array" + "github.com/apache/arrow-go/v18/arrow" + "github.com/apache/arrow-go/v18/arrow/array" "github.com/databricks/databricks-sql-go/internal/decimalfmt" "github.com/databricks/databricks-sql-go/internal/jsonfmt" ) diff --git a/internal/arrowscan/arrowscan_test.go b/internal/arrowscan/arrowscan_test.go index 52fecbd3..a164029e 100644 --- a/internal/arrowscan/arrowscan_test.go +++ b/internal/arrowscan/arrowscan_test.go @@ -7,10 +7,10 @@ import ( "testing" "time" - "github.com/apache/arrow/go/v12/arrow" - "github.com/apache/arrow/go/v12/arrow/array" - "github.com/apache/arrow/go/v12/arrow/decimal128" - "github.com/apache/arrow/go/v12/arrow/memory" + "github.com/apache/arrow-go/v18/arrow" + "github.com/apache/arrow-go/v18/arrow/array" + "github.com/apache/arrow-go/v18/arrow/decimal128" + "github.com/apache/arrow-go/v18/arrow/memory" ) // ScanCell renders the supported scalar types and rejects an unsupported type @@ -543,10 +543,8 @@ func TestStructKeyCacheReset(t *testing.T) { // LargeList and FixedSizeList are handled by arrowscan but NOT by the Thrift // arrowbased renderer, so the cross-backend parity test can't reach them; their -// offset arithmetic (hand-rolled, distinct from List's ValueOffsets — arrow-go v12 -// LargeList.ValueOffsets does not add the logical offset, and FixedSizeList has no -// ValueOffsets at all) is verified here directly, including on a sliced array where -// a non-zero logical offset would expose an off-by-offset bug. +// offset arithmetic is verified here directly, including on a sliced array +// where a non-zero logical offset would expose an off-by-offset bug. func TestScanCellLargeAndFixedSizeList(t *testing.T) { pool := memory.NewGoAllocator() diff --git a/internal/arrowscan/coltype.go b/internal/arrowscan/coltype.go index c46c1cfb..6e0c9d91 100644 --- a/internal/arrowscan/coltype.go +++ b/internal/arrowscan/coltype.go @@ -7,7 +7,7 @@ import ( "strings" "time" - "github.com/apache/arrow/go/v12/arrow" + "github.com/apache/arrow-go/v18/arrow" ) const databricksTypeNameMetadataKey = "databricks.type_name" diff --git a/internal/arrowscan/coltype_ntz_test.go b/internal/arrowscan/coltype_ntz_test.go index f3336829..bd7a92b6 100644 --- a/internal/arrowscan/coltype_ntz_test.go +++ b/internal/arrowscan/coltype_ntz_test.go @@ -3,7 +3,7 @@ package arrowscan import ( "testing" - "github.com/apache/arrow/go/v12/arrow" + "github.com/apache/arrow-go/v18/arrow" ) // TestColumnTypeInfoForTimestampNTZ pins the TIMESTAMP vs TIMESTAMP_NTZ type-name diff --git a/internal/arrowscan/coltype_test.go b/internal/arrowscan/coltype_test.go index dfb643be..25c3bd18 100644 --- a/internal/arrowscan/coltype_test.go +++ b/internal/arrowscan/coltype_test.go @@ -7,7 +7,7 @@ import ( "testing" "time" - "github.com/apache/arrow/go/v12/arrow" + "github.com/apache/arrow-go/v18/arrow" ) // TestColumnTypeInfoFor pins the Arrow → column-metadata mapping so it stays diff --git a/internal/arrowscan/timestamp_ntz_nested_test.go b/internal/arrowscan/timestamp_ntz_nested_test.go index c8ac6f55..71f5790f 100644 --- a/internal/arrowscan/timestamp_ntz_nested_test.go +++ b/internal/arrowscan/timestamp_ntz_nested_test.go @@ -4,9 +4,9 @@ import ( "testing" "time" - "github.com/apache/arrow/go/v12/arrow" - "github.com/apache/arrow/go/v12/arrow/array" - "github.com/apache/arrow/go/v12/arrow/memory" + "github.com/apache/arrow-go/v18/arrow" + "github.com/apache/arrow-go/v18/arrow/array" + "github.com/apache/arrow-go/v18/arrow/memory" ) // TestScanCellNestedKernelNTZKeepsWallClock pins that a nested child the kernel diff --git a/internal/arrowscan/timestamp_ntz_test.go b/internal/arrowscan/timestamp_ntz_test.go index cb71b1d5..126d63a2 100644 --- a/internal/arrowscan/timestamp_ntz_test.go +++ b/internal/arrowscan/timestamp_ntz_test.go @@ -4,9 +4,9 @@ import ( "testing" "time" - "github.com/apache/arrow/go/v12/arrow" - "github.com/apache/arrow/go/v12/arrow/array" - "github.com/apache/arrow/go/v12/arrow/memory" + "github.com/apache/arrow-go/v18/arrow" + "github.com/apache/arrow-go/v18/arrow/array" + "github.com/apache/arrow-go/v18/arrow/memory" ) // TestScanCellTimestampNTZPreservesWallClock pins the value contract for diff --git a/internal/backend/kernel/batchiterator_test.go b/internal/backend/kernel/batchiterator_test.go index 6429e8e1..cd04dfdb 100644 --- a/internal/backend/kernel/batchiterator_test.go +++ b/internal/backend/kernel/batchiterator_test.go @@ -12,10 +12,10 @@ import ( "testing" "time" - "github.com/apache/arrow/go/v12/arrow" - "github.com/apache/arrow/go/v12/arrow/array" - "github.com/apache/arrow/go/v12/arrow/ipc" - "github.com/apache/arrow/go/v12/arrow/memory" + "github.com/apache/arrow-go/v18/arrow" + "github.com/apache/arrow-go/v18/arrow/array" + "github.com/apache/arrow-go/v18/arrow/ipc" + "github.com/apache/arrow-go/v18/arrow/memory" dbsqlerr "github.com/databricks/databricks-sql-go/errors" "github.com/databricks/databricks-sql-go/internal/arrowscan" dbsqlrows "github.com/databricks/databricks-sql-go/internal/rows" @@ -137,7 +137,7 @@ func TestRowsTimestampNTZWithServerSchema(t *testing.T) { defer builder.Release() builder.Field(0).(*array.TimestampBuilder).Append(arrow.Timestamp(wall.Add(4 * time.Hour).UnixMicro())) builder.Field(1).(*array.TimestampBuilder).Append(arrow.Timestamp(wall.UnixMicro())) - record := builder.NewRecord() + record := builder.NewRecordBatch() defer record.Release() rowSet := &kernelRows{ op: &kernelOp{location: location}, cur: record, diff --git a/internal/backend/kernel/rows.go b/internal/backend/kernel/rows.go index 697dd71f..aa662f55 100644 --- a/internal/backend/kernel/rows.go +++ b/internal/backend/kernel/rows.go @@ -21,8 +21,8 @@ import ( "time" "unsafe" - "github.com/apache/arrow/go/v12/arrow" - "github.com/apache/arrow/go/v12/arrow/cdata" + "github.com/apache/arrow-go/v18/arrow" + "github.com/apache/arrow-go/v18/arrow/cdata" dbsqlerr "github.com/databricks/databricks-sql-go/errors" "github.com/databricks/databricks-sql-go/internal/arrowscan" context2 "github.com/databricks/databricks-sql-go/internal/compat/context" @@ -52,7 +52,7 @@ var ( // // The batch/row split mirrors the kernel's own ResultStream: next_batch does the // per-batch network/decode work once; row reads walk the already-imported -// arrow.Record with O(1) indexing. +// arrow.RecordBatch with O(1) indexing. type kernelRows struct { // ctx is detached from the caller's QueryContext (via context2.WithoutCancel) // so a submit-gating deadline can't truncate a large CloudFetch stream, matching @@ -68,7 +68,7 @@ type kernelRows struct { geoBinary []bool // top-level logical geo structs become EWKB for database/sql ntz []bool // top-level TIMESTAMP_NTZ columns scan in UTC, not the session location schema *arrow.Schema // result-set schema, for GetArrowBatches().Schema() - cur arrow.Record // current batch (nil until first Next) + cur arrow.RecordBatch // current batch (nil until first Next) rowInCur int // next row index within cur chunkCount int // cumulative batches fetched, for OnChunkFetched closed bool @@ -297,7 +297,7 @@ func (r *kernelRows) nextBatch() error { return io.EOF } // Zero-copy import. The kernel exports self-contained batches (Rust to_ffi - // moves the Arc-owned buffers in), so the arrow.Record safely outlives the + // moves the Arc-owned buffers in), so the arrow.RecordBatch safely outlives the // stream; we still Release each batch explicitly as we advance. rec, err := cdata.ImportCRecordBatch( (*cdata.CArrowArray)(unsafe.Pointer(&carr)), @@ -325,7 +325,7 @@ func (r *kernelRows) nextBatch() error { return nil } -// GetArrowBatches exposes the kernel stream as an arrow.Record iterator (the +// GetArrowBatches exposes the kernel stream as an arrow.RecordBatch iterator (the // public zero-copy batch API), reusing the row scanner's next_batch pull. Callers // MUST Release() each record. func (r *kernelRows) GetArrowBatches(context.Context) (dbrows.ArrowBatchIterator, error) { @@ -345,9 +345,9 @@ func (r *kernelRows) GetArrowIPCStreams(context.Context) (dbrows.ArrowIPCStreamI // each record's ownership to the caller, who must Release it. type kernelBatchIterator struct { r *kernelRows - pending arrow.Record // prefetched, not yet handed out - done bool // stream drained (io.EOF seen) - err error // sticky fetch error, surfaced by Next + pending arrow.RecordBatch // prefetched, not yet handed out + done bool // stream drained (io.EOF seen) + err error // sticky fetch error, surfaced by Next } var _ dbrows.ArrowBatchIterator = (*kernelBatchIterator)(nil) @@ -378,7 +378,7 @@ func (it *kernelBatchIterator) fill() { } // Next returns the next record (caller owns it) or io.EOF when the stream drains. -func (it *kernelBatchIterator) Next() (arrow.Record, error) { +func (it *kernelBatchIterator) Next() (arrow.RecordBatch, error) { it.fill() if it.err != nil { // Surface a fetch error exactly once, then terminate the iterator: mark diff --git a/internal/decimalfmt/decimalfmt.go b/internal/decimalfmt/decimalfmt.go index 90b2b43c..67389637 100644 --- a/internal/decimalfmt/decimalfmt.go +++ b/internal/decimalfmt/decimalfmt.go @@ -7,7 +7,7 @@ package decimalfmt import ( "math/big" - "github.com/apache/arrow/go/v12/arrow/decimal128" + "github.com/apache/arrow-go/v18/arrow/decimal128" ) // decMaxLen bounds the longest exact string a real Databricks DECIMAL produces, diff --git a/internal/decimalfmt/decimalfmt_test.go b/internal/decimalfmt/decimalfmt_test.go index 07773e31..7fda6fbe 100644 --- a/internal/decimalfmt/decimalfmt_test.go +++ b/internal/decimalfmt/decimalfmt_test.go @@ -6,7 +6,7 @@ import ( "strings" "testing" - "github.com/apache/arrow/go/v12/arrow/decimal128" + "github.com/apache/arrow-go/v18/arrow/decimal128" ) // ExactString applies scale by string placement, preserving digits a float64 diff --git a/internal/rows/arrowbased/arrowRecordIterator.go b/internal/rows/arrowbased/arrowRecordIterator.go index 999bd42b..81664b16 100644 --- a/internal/rows/arrowbased/arrowRecordIterator.go +++ b/internal/rows/arrowbased/arrowRecordIterator.go @@ -6,8 +6,8 @@ import ( "fmt" "io" - "github.com/apache/arrow/go/v12/arrow" - "github.com/apache/arrow/go/v12/arrow/ipc" + "github.com/apache/arrow-go/v18/arrow" + "github.com/apache/arrow-go/v18/arrow/ipc" "github.com/databricks/databricks-sql-go/internal/cli_service" "github.com/databricks/databricks-sql-go/internal/config" dbsqlerr "github.com/databricks/databricks-sql-go/internal/errors" @@ -49,7 +49,7 @@ type arrowRecordIterator struct { var _ rows.ArrowBatchIterator = (*arrowRecordIterator)(nil) // Retrieve the next arrow record -func (ri *arrowRecordIterator) Next() (arrow.Record, error) { +func (ri *arrowRecordIterator) Next() (arrow.RecordBatch, error) { if !ri.HasNext() { // returning EOF indicates that there are no more records to iterate return nil, io.EOF diff --git a/internal/rows/arrowbased/arrowRows.go b/internal/rows/arrowbased/arrowRows.go index 144b6909..d50e5ed1 100644 --- a/internal/rows/arrowbased/arrowRows.go +++ b/internal/rows/arrowbased/arrowRows.go @@ -8,9 +8,9 @@ import ( "io" "time" - "github.com/apache/arrow/go/v12/arrow" - "github.com/apache/arrow/go/v12/arrow/array" - "github.com/apache/arrow/go/v12/arrow/ipc" + "github.com/apache/arrow-go/v18/arrow" + "github.com/apache/arrow-go/v18/arrow/array" + "github.com/apache/arrow-go/v18/arrow/ipc" dbsqlerr "github.com/databricks/databricks-sql-go/errors" "github.com/databricks/databricks-sql-go/internal/arrowscan" "github.com/databricks/databricks-sql-go/internal/cli_service" @@ -33,7 +33,7 @@ type SparkArrowBatch interface { // Abstraction for an arrow record type SparkArrowRecord interface { rowscanner.Delimiter - arrow.Record + arrow.RecordBatch } type timeStampFn func(arrow.Timestamp) time.Time @@ -768,20 +768,20 @@ func (b *sparkArrowBatch) Close() { // the rows corresponding to the record. type sparkArrowRecord struct { rowscanner.Delimiter - arrow.Record + arrow.RecordBatch } var _ SparkArrowRecord = (*sparkArrowRecord)(nil) func (sar *sparkArrowRecord) Release() { - if sar.Record != nil { - sar.Record.Release() - sar.Record = nil + if sar.RecordBatch != nil { + sar.RecordBatch.Release() + sar.RecordBatch = nil } } func (sar *sparkArrowRecord) Retain() { - if sar.Record != nil { - sar.Record.Retain() + if sar.RecordBatch != nil { + sar.RecordBatch.Retain() } } diff --git a/internal/rows/arrowbased/arrowRows_test.go b/internal/rows/arrowbased/arrowRows_test.go index 77caff7c..66a9c36f 100644 --- a/internal/rows/arrowbased/arrowRows_test.go +++ b/internal/rows/arrowbased/arrowRows_test.go @@ -12,10 +12,10 @@ import ( "testing" "time" - "github.com/apache/arrow/go/v12/arrow" - "github.com/apache/arrow/go/v12/arrow/array" - "github.com/apache/arrow/go/v12/arrow/decimal128" - "github.com/apache/arrow/go/v12/arrow/memory" + "github.com/apache/arrow-go/v18/arrow" + "github.com/apache/arrow-go/v18/arrow/array" + "github.com/apache/arrow-go/v18/arrow/decimal128" + "github.com/apache/arrow-go/v18/arrow/memory" "github.com/databricks/databricks-sql-go/driverctx" dbsqlerr "github.com/databricks/databricks-sql-go/errors" "github.com/databricks/databricks-sql-go/internal/cli_service" @@ -493,10 +493,10 @@ func TestArrowRowScanner(t *testing.T) { assert.Nil(t, ars.rowValues) b1 := &sparkArrowBatch{Delimiter: rowscanner.NewDelimiter(0, 5), arrowRecords: []SparkArrowRecord{ - &sparkArrowRecord{Delimiter: rowscanner.NewDelimiter(0, 2), Record: &fakeRecord{}}, - &sparkArrowRecord{Delimiter: rowscanner.NewDelimiter(2, 3), Record: &fakeRecord{}}}} - b2 := &sparkArrowBatch{Delimiter: rowscanner.NewDelimiter(5, 3), arrowRecords: []SparkArrowRecord{&sparkArrowRecord{Delimiter: rowscanner.NewDelimiter(5, 3), Record: &fakeRecord{}}}} - b3 := &sparkArrowBatch{Delimiter: rowscanner.NewDelimiter(8, 7), arrowRecords: []SparkArrowRecord{&sparkArrowRecord{Delimiter: rowscanner.NewDelimiter(8, 7), Record: &fakeRecord{}}}} + &sparkArrowRecord{Delimiter: rowscanner.NewDelimiter(0, 2), RecordBatch: &fakeRecord{}}, + &sparkArrowRecord{Delimiter: rowscanner.NewDelimiter(2, 3), RecordBatch: &fakeRecord{}}}} + b2 := &sparkArrowBatch{Delimiter: rowscanner.NewDelimiter(5, 3), arrowRecords: []SparkArrowRecord{&sparkArrowRecord{Delimiter: rowscanner.NewDelimiter(5, 3), RecordBatch: &fakeRecord{}}}} + b3 := &sparkArrowBatch{Delimiter: rowscanner.NewDelimiter(8, 7), arrowRecords: []SparkArrowRecord{&sparkArrowRecord{Delimiter: rowscanner.NewDelimiter(8, 7), RecordBatch: &fakeRecord{}}}} fbi := &fakeBatchIterator{ batches: []SparkArrowBatch{b1, b2, b3}, @@ -562,9 +562,9 @@ func TestArrowRowScanner(t *testing.T) { fbi := &fakeBatchIterator{ batches: []SparkArrowBatch{ - &sparkArrowBatch{Delimiter: rowscanner.NewDelimiter(0, 5), arrowRecords: []SparkArrowRecord{&sparkArrowRecord{Delimiter: rowscanner.NewDelimiter(0, 5), Record: &fakeRecord{}}}}, - &sparkArrowBatch{Delimiter: rowscanner.NewDelimiter(5, 3), arrowRecords: []SparkArrowRecord{&sparkArrowRecord{Delimiter: rowscanner.NewDelimiter(5, 3), Record: &fakeRecord{}}}}, - &sparkArrowBatch{Delimiter: rowscanner.NewDelimiter(8, 7), arrowRecords: []SparkArrowRecord{&sparkArrowRecord{Delimiter: rowscanner.NewDelimiter(8, 7), Record: &fakeRecord{}}}}, + &sparkArrowBatch{Delimiter: rowscanner.NewDelimiter(0, 5), arrowRecords: []SparkArrowRecord{&sparkArrowRecord{Delimiter: rowscanner.NewDelimiter(0, 5), RecordBatch: &fakeRecord{}}}}, + &sparkArrowBatch{Delimiter: rowscanner.NewDelimiter(5, 3), arrowRecords: []SparkArrowRecord{&sparkArrowRecord{Delimiter: rowscanner.NewDelimiter(5, 3), RecordBatch: &fakeRecord{}}}}, + &sparkArrowBatch{Delimiter: rowscanner.NewDelimiter(8, 7), arrowRecords: []SparkArrowRecord{&sparkArrowRecord{Delimiter: rowscanner.NewDelimiter(8, 7), RecordBatch: &fakeRecord{}}}}, }, index: -1, callCount: 0, @@ -600,9 +600,9 @@ func TestArrowRowScanner(t *testing.T) { fbi := &fakeBatchIterator{ batches: []SparkArrowBatch{ - &sparkArrowBatch{Delimiter: rowscanner.NewDelimiter(0, 5), arrowRecords: []SparkArrowRecord{&sparkArrowRecord{Delimiter: rowscanner.NewDelimiter(0, 5), Record: &fakeRecord{}}}}, - &sparkArrowBatch{Delimiter: rowscanner.NewDelimiter(5, 3), arrowRecords: []SparkArrowRecord{&sparkArrowRecord{Delimiter: rowscanner.NewDelimiter(5, 3), Record: &fakeRecord{}}}}, - &sparkArrowBatch{Delimiter: rowscanner.NewDelimiter(8, 7), arrowRecords: []SparkArrowRecord{&sparkArrowRecord{Delimiter: rowscanner.NewDelimiter(8, 7), Record: &fakeRecord{}}}}, + &sparkArrowBatch{Delimiter: rowscanner.NewDelimiter(0, 5), arrowRecords: []SparkArrowRecord{&sparkArrowRecord{Delimiter: rowscanner.NewDelimiter(0, 5), RecordBatch: &fakeRecord{}}}}, + &sparkArrowBatch{Delimiter: rowscanner.NewDelimiter(5, 3), arrowRecords: []SparkArrowRecord{&sparkArrowRecord{Delimiter: rowscanner.NewDelimiter(5, 3), RecordBatch: &fakeRecord{}}}}, + &sparkArrowBatch{Delimiter: rowscanner.NewDelimiter(8, 7), arrowRecords: []SparkArrowRecord{&sparkArrowRecord{Delimiter: rowscanner.NewDelimiter(8, 7), RecordBatch: &fakeRecord{}}}}, }, index: -1, callCount: 0, @@ -639,9 +639,9 @@ func TestArrowRowScanner(t *testing.T) { fbi := &fakeBatchIterator{ batches: []SparkArrowBatch{ - &sparkArrowBatch{Delimiter: rowscanner.NewDelimiter(0, 5), arrowRecords: []SparkArrowRecord{&sparkArrowRecord{Delimiter: rowscanner.NewDelimiter(0, 5), Record: &fakeRecord{}}}}, - &sparkArrowBatch{Delimiter: rowscanner.NewDelimiter(5, 3), arrowRecords: []SparkArrowRecord{&sparkArrowRecord{Delimiter: rowscanner.NewDelimiter(5, 3), Record: &fakeRecord{}}}}, - &sparkArrowBatch{Delimiter: rowscanner.NewDelimiter(8, 7), arrowRecords: []SparkArrowRecord{&sparkArrowRecord{Delimiter: rowscanner.NewDelimiter(8, 7), Record: &fakeRecord{}}}}, + &sparkArrowBatch{Delimiter: rowscanner.NewDelimiter(0, 5), arrowRecords: []SparkArrowRecord{&sparkArrowRecord{Delimiter: rowscanner.NewDelimiter(0, 5), RecordBatch: &fakeRecord{}}}}, + &sparkArrowBatch{Delimiter: rowscanner.NewDelimiter(5, 3), arrowRecords: []SparkArrowRecord{&sparkArrowRecord{Delimiter: rowscanner.NewDelimiter(5, 3), RecordBatch: &fakeRecord{}}}}, + &sparkArrowBatch{Delimiter: rowscanner.NewDelimiter(8, 7), arrowRecords: []SparkArrowRecord{&sparkArrowRecord{Delimiter: rowscanner.NewDelimiter(8, 7), RecordBatch: &fakeRecord{}}}}, }, index: -1, callCount: 0, @@ -680,9 +680,9 @@ func TestArrowRowScanner(t *testing.T) { fbi := &fakeBatchIterator{ batches: []SparkArrowBatch{ - &sparkArrowBatch{Delimiter: rowscanner.NewDelimiter(0, 5), arrowRecords: []SparkArrowRecord{&sparkArrowRecord{Delimiter: rowscanner.NewDelimiter(0, 5), Record: &fakeRecord{}}}}, - &sparkArrowBatch{Delimiter: rowscanner.NewDelimiter(5, 3), arrowRecords: []SparkArrowRecord{&sparkArrowRecord{Delimiter: rowscanner.NewDelimiter(5, 3), Record: &fakeRecord{}}}}, - &sparkArrowBatch{Delimiter: rowscanner.NewDelimiter(8, 7), arrowRecords: []SparkArrowRecord{&sparkArrowRecord{Delimiter: rowscanner.NewDelimiter(8, 7), Record: &fakeRecord{}}}}, + &sparkArrowBatch{Delimiter: rowscanner.NewDelimiter(0, 5), arrowRecords: []SparkArrowRecord{&sparkArrowRecord{Delimiter: rowscanner.NewDelimiter(0, 5), RecordBatch: &fakeRecord{}}}}, + &sparkArrowBatch{Delimiter: rowscanner.NewDelimiter(5, 3), arrowRecords: []SparkArrowRecord{&sparkArrowRecord{Delimiter: rowscanner.NewDelimiter(5, 3), RecordBatch: &fakeRecord{}}}}, + &sparkArrowBatch{Delimiter: rowscanner.NewDelimiter(8, 7), arrowRecords: []SparkArrowRecord{&sparkArrowRecord{Delimiter: rowscanner.NewDelimiter(8, 7), RecordBatch: &fakeRecord{}}}}, }, index: -1, callCount: 0, @@ -716,9 +716,9 @@ func TestArrowRowScanner(t *testing.T) { fbi := &fakeBatchIterator{ batches: []SparkArrowBatch{ - &sparkArrowBatch{Delimiter: rowscanner.NewDelimiter(0, 5), arrowRecords: []SparkArrowRecord{&sparkArrowRecord{Delimiter: rowscanner.NewDelimiter(0, 5), Record: &fakeRecord{}}}}, - &sparkArrowBatch{Delimiter: rowscanner.NewDelimiter(5, 3), arrowRecords: []SparkArrowRecord{&sparkArrowRecord{Delimiter: rowscanner.NewDelimiter(5, 3), Record: &fakeRecord{}}}}, - &sparkArrowBatch{Delimiter: rowscanner.NewDelimiter(8, 7), arrowRecords: []SparkArrowRecord{&sparkArrowRecord{Delimiter: rowscanner.NewDelimiter(8, 7), Record: &fakeRecord{}}}}, + &sparkArrowBatch{Delimiter: rowscanner.NewDelimiter(0, 5), arrowRecords: []SparkArrowRecord{&sparkArrowRecord{Delimiter: rowscanner.NewDelimiter(0, 5), RecordBatch: &fakeRecord{}}}}, + &sparkArrowBatch{Delimiter: rowscanner.NewDelimiter(5, 3), arrowRecords: []SparkArrowRecord{&sparkArrowRecord{Delimiter: rowscanner.NewDelimiter(5, 3), RecordBatch: &fakeRecord{}}}}, + &sparkArrowBatch{Delimiter: rowscanner.NewDelimiter(8, 7), arrowRecords: []SparkArrowRecord{&sparkArrowRecord{Delimiter: rowscanner.NewDelimiter(8, 7), RecordBatch: &fakeRecord{}}}}, }, index: -1, callCount: 0, @@ -868,9 +868,9 @@ func TestArrowRowScanner(t *testing.T) { fbi := &fakeBatchIterator{ batches: []SparkArrowBatch{ - &sparkArrowBatch{Delimiter: rowscanner.NewDelimiter(0, 5), arrowRecords: []SparkArrowRecord{&sparkArrowRecord{Delimiter: rowscanner.NewDelimiter(0, 5), Record: &fakeRecord{}}}}, - &sparkArrowBatch{Delimiter: rowscanner.NewDelimiter(5, 3), arrowRecords: []SparkArrowRecord{&sparkArrowRecord{Delimiter: rowscanner.NewDelimiter(5, 3), Record: &fakeRecord{}}}}, - &sparkArrowBatch{Delimiter: rowscanner.NewDelimiter(8, 7), arrowRecords: []SparkArrowRecord{&sparkArrowRecord{Delimiter: rowscanner.NewDelimiter(8, 7), Record: &fakeRecord{}}}}, + &sparkArrowBatch{Delimiter: rowscanner.NewDelimiter(0, 5), arrowRecords: []SparkArrowRecord{&sparkArrowRecord{Delimiter: rowscanner.NewDelimiter(0, 5), RecordBatch: &fakeRecord{}}}}, + &sparkArrowBatch{Delimiter: rowscanner.NewDelimiter(5, 3), arrowRecords: []SparkArrowRecord{&sparkArrowRecord{Delimiter: rowscanner.NewDelimiter(5, 3), RecordBatch: &fakeRecord{}}}}, + &sparkArrowBatch{Delimiter: rowscanner.NewDelimiter(8, 7), arrowRecords: []SparkArrowRecord{&sparkArrowRecord{Delimiter: rowscanner.NewDelimiter(8, 7), RecordBatch: &fakeRecord{}}}}, }, index: -1, callCount: 0, @@ -1715,8 +1715,8 @@ type fakeRecord struct { fnColumns func() []arrow.Array fnColumn func(i int) arrow.Array fnColumnName func(i int) string - fnNewSlice func(i, j int64) arrow.Record - fnSetColumn func(int, arrow.Array) (arrow.Record, error) + fnNewSlice func(i, j int64) arrow.RecordBatch + fnSetColumn func(int, arrow.Array) (arrow.RecordBatch, error) } func (fr fakeRecord) Release() { @@ -1769,7 +1769,7 @@ func (fr fakeRecord) ColumnName(i int) string { return "" } -func (fr fakeRecord) NewSlice(i, j int64) arrow.Record { +func (fr fakeRecord) NewSlice(i, j int64) arrow.RecordBatch { if fr.fnNewSlice != nil { return fr.fnNewSlice(i, j) } @@ -1778,7 +1778,7 @@ func (fr fakeRecord) NewSlice(i, j int64) arrow.Record { func (fr fakeRecord) MarshalJSON() ([]byte, error) { return nil, nil } -func (fr fakeRecord) SetColumn(i int, arr arrow.Array) (arrow.Record, error) { +func (fr fakeRecord) SetColumn(i int, arr arrow.Array) (arrow.RecordBatch, error) { if fr.fnSetColumn != nil { return fr.fnSetColumn(i, arr) } @@ -2212,7 +2212,7 @@ func TestScanRowNativeDecimal(t *testing.T) { ars.batchIterator = &fakeBatchIterator{ batches: []SparkArrowBatch{ - &sparkArrowBatch{Delimiter: rowscanner.NewDelimiter(0, 1), arrowRecords: []SparkArrowRecord{&sparkArrowRecord{Delimiter: rowscanner.NewDelimiter(0, 1), Record: &fakeRecord{}}}}, + &sparkArrowBatch{Delimiter: rowscanner.NewDelimiter(0, 1), arrowRecords: []SparkArrowRecord{&sparkArrowRecord{Delimiter: rowscanner.NewDelimiter(0, 1), RecordBatch: &fakeRecord{}}}}, }, index: -1, callCount: 0, diff --git a/internal/rows/arrowbased/arrowscan_parity_test.go b/internal/rows/arrowbased/arrowscan_parity_test.go index f60eaefe..b0951a5c 100644 --- a/internal/rows/arrowbased/arrowscan_parity_test.go +++ b/internal/rows/arrowbased/arrowscan_parity_test.go @@ -5,10 +5,10 @@ import ( "testing" "time" - "github.com/apache/arrow/go/v12/arrow" - "github.com/apache/arrow/go/v12/arrow/array" - "github.com/apache/arrow/go/v12/arrow/decimal128" - "github.com/apache/arrow/go/v12/arrow/memory" + "github.com/apache/arrow-go/v18/arrow" + "github.com/apache/arrow-go/v18/arrow/array" + "github.com/apache/arrow-go/v18/arrow/decimal128" + "github.com/apache/arrow-go/v18/arrow/memory" "github.com/databricks/databricks-sql-go/internal/arrowscan" ) @@ -298,7 +298,7 @@ func TestArrowbasedKernelRenderParity(t *testing.T) { {"flag":null,"tiny":null,"small":null,"int":null,"big":null}, null ]` - full, _, err := array.FromJSON(pool, dt, strings.NewReader(input), array.WithUseNumber()) + full, _, err := array.FromJSON(pool, dt, strings.NewReader(input)) if err != nil { t.Fatal(err) } diff --git a/internal/rows/arrowbased/batchloader.go b/internal/rows/arrowbased/batchloader.go index 13f153ee..1771a813 100644 --- a/internal/rows/arrowbased/batchloader.go +++ b/internal/rows/arrowbased/batchloader.go @@ -16,9 +16,9 @@ import ( "net/http" - "github.com/apache/arrow/go/v12/arrow" - "github.com/apache/arrow/go/v12/arrow/array" - "github.com/apache/arrow/go/v12/arrow/ipc" + "github.com/apache/arrow-go/v18/arrow" + "github.com/apache/arrow-go/v18/arrow/array" + "github.com/apache/arrow-go/v18/arrow/ipc" dbsqlerr "github.com/databricks/databricks-sql-go/errors" "github.com/databricks/databricks-sql-go/internal/cli_service" dbsqlerrint "github.com/databricks/databricks-sql-go/internal/errors" @@ -542,12 +542,12 @@ func getArrowRecords(r io.Reader, startRowOffset int64) ([]SparkArrowRecord, err startRow := startRowOffset var records []SparkArrowRecord for ipcReader.Next() { - r := ipcReader.Record() + r := ipcReader.RecordBatch() r.Retain() sar := sparkArrowRecord{ - Delimiter: rowscanner.NewDelimiter(startRow, r.NumRows()), - Record: r, + Delimiter: rowscanner.NewDelimiter(startRow, r.NumRows()), + RecordBatch: r, } records = append(records, &sar) @@ -629,11 +629,11 @@ func (bi *batchIterator) Next() (SparkArrowBatch, error) { if !ok { continue } - corrected := array.NewRecord(bi.overrideSchema, sar.Columns(), sar.NumRows()) + corrected := array.NewRecordBatch(bi.overrideSchema, sar.Columns(), sar.NumRows()) sar.Release() records[i] = &sparkArrowRecord{ - Delimiter: sar.Delimiter, - Record: corrected, + Delimiter: sar.Delimiter, + RecordBatch: corrected, } } } @@ -691,8 +691,8 @@ func limitArrowRecords(records []SparkArrowRecord, expectedRows int64) []SparkAr record.Release() if sliced != nil { limited = append(limited, &sparkArrowRecord{ - Delimiter: rowscanner.NewDelimiter(start, sliced.NumRows()), - Record: sliced, + Delimiter: rowscanner.NewDelimiter(start, sliced.NumRows()), + RecordBatch: sliced, }) } remaining = 0 diff --git a/internal/rows/arrowbased/batchloader_test.go b/internal/rows/arrowbased/batchloader_test.go index 3e3e4831..c5eb86cf 100644 --- a/internal/rows/arrowbased/batchloader_test.go +++ b/internal/rows/arrowbased/batchloader_test.go @@ -19,10 +19,10 @@ import ( "github.com/databricks/databricks-sql-go/internal/config" "github.com/pkg/errors" - "github.com/apache/arrow/go/v12/arrow" - "github.com/apache/arrow/go/v12/arrow/array" - "github.com/apache/arrow/go/v12/arrow/ipc" - "github.com/apache/arrow/go/v12/arrow/memory" + "github.com/apache/arrow-go/v18/arrow" + "github.com/apache/arrow-go/v18/arrow/array" + "github.com/apache/arrow-go/v18/arrow/ipc" + "github.com/apache/arrow-go/v18/arrow/memory" "github.com/stretchr/testify/assert" ) @@ -920,7 +920,7 @@ func TestCloudFetchIterator_OnFileDownloaded_NilCallbackDoesNotPanic(t *testing. }, "nil onFileDownloaded must not cause a panic") } -func generateArrowRecord() arrow.Record { +func generateArrowRecord() arrow.RecordBatch { mem := memory.NewCheckedAllocator(memory.NewGoAllocator()) fields := []arrow.Field{ @@ -935,12 +935,12 @@ func generateArrowRecord() arrow.Record { builder.Field(0).(*array.Int32Builder).AppendValues([]int32{1, 2, 3}, nil) builder.Field(1).(*array.StringBuilder).AppendValues([]string{"one", "two", "three"}, nil) - record := builder.NewRecord() + record := builder.NewRecordBatch() return record } -func generateMockArrowBytes(record arrow.Record) []byte { +func generateMockArrowBytes(record arrow.RecordBatch) []byte { defer record.Release() diff --git a/internal/rows/arrowbased/columnValues.go b/internal/rows/arrowbased/columnValues.go index 9b02350b..ef1890a5 100644 --- a/internal/rows/arrowbased/columnValues.go +++ b/internal/rows/arrowbased/columnValues.go @@ -4,8 +4,8 @@ import ( "strings" "time" - "github.com/apache/arrow/go/v12/arrow" - "github.com/apache/arrow/go/v12/arrow/array" + "github.com/apache/arrow-go/v18/arrow" + "github.com/apache/arrow-go/v18/arrow/array" "github.com/databricks/databricks-sql-go/internal/decimalfmt" "github.com/databricks/databricks-sql-go/internal/jsonfmt" "github.com/databricks/databricks-sql-go/internal/rows/rowscanner" diff --git a/internal/rows/arrowbased/render_bench_test.go b/internal/rows/arrowbased/render_bench_test.go index 44c4e869..37fc9ce3 100644 --- a/internal/rows/arrowbased/render_bench_test.go +++ b/internal/rows/arrowbased/render_bench_test.go @@ -5,9 +5,9 @@ import ( "testing" "time" - "github.com/apache/arrow/go/v12/arrow" - "github.com/apache/arrow/go/v12/arrow/array" - "github.com/apache/arrow/go/v12/arrow/memory" + "github.com/apache/arrow-go/v18/arrow" + "github.com/apache/arrow-go/v18/arrow/array" + "github.com/apache/arrow-go/v18/arrow/memory" "github.com/databricks/databricks-sql-go/internal/arrowscan" ) diff --git a/internal/rows/arrowbased/timestamp_ntz_test.go b/internal/rows/arrowbased/timestamp_ntz_test.go index 938b41cd..6a48e604 100644 --- a/internal/rows/arrowbased/timestamp_ntz_test.go +++ b/internal/rows/arrowbased/timestamp_ntz_test.go @@ -4,9 +4,9 @@ import ( "testing" "time" - "github.com/apache/arrow/go/v12/arrow" - "github.com/apache/arrow/go/v12/arrow/array" - "github.com/apache/arrow/go/v12/arrow/memory" + "github.com/apache/arrow-go/v18/arrow" + "github.com/apache/arrow-go/v18/arrow/array" + "github.com/apache/arrow-go/v18/arrow/memory" ) // TestThriftTimestampNTZPreservesWallClock pins the Thrift (arrowbased) backend's diff --git a/internal/rows/coltype_thrift_parity_test.go b/internal/rows/coltype_thrift_parity_test.go index 7635ec00..e6fbf54e 100644 --- a/internal/rows/coltype_thrift_parity_test.go +++ b/internal/rows/coltype_thrift_parity_test.go @@ -3,7 +3,7 @@ package rows import ( "testing" - "github.com/apache/arrow/go/v12/arrow" + "github.com/apache/arrow-go/v18/arrow" "github.com/databricks/databricks-sql-go/internal/arrowscan" "github.com/databricks/databricks-sql-go/internal/cli_service" diff --git a/internal/rows/rows.go b/internal/rows/rows.go index f7a7a0f4..60994a62 100644 --- a/internal/rows/rows.go +++ b/internal/rows/rows.go @@ -11,7 +11,7 @@ import ( "sync" "time" - "github.com/apache/arrow/go/v12/arrow/ipc" + "github.com/apache/arrow-go/v18/arrow/ipc" "github.com/databricks/databricks-sql-go/driverctx" dbsqlerr "github.com/databricks/databricks-sql-go/errors" "github.com/databricks/databricks-sql-go/internal/arrowscan" diff --git a/internal/rows/rows_test.go b/internal/rows/rows_test.go index 07d8b8ff..3415e9f2 100644 --- a/internal/rows/rows_test.go +++ b/internal/rows/rows_test.go @@ -14,8 +14,8 @@ import ( "testing" "time" - "github.com/apache/arrow/go/v12/arrow" - "github.com/apache/arrow/go/v12/arrow/ipc" + "github.com/apache/arrow-go/v18/arrow" + "github.com/apache/arrow-go/v18/arrow/ipc" "github.com/databricks/databricks-sql-go/driverctx" "github.com/databricks/databricks-sql-go/internal/cli_service" "github.com/databricks/databricks-sql-go/internal/client" diff --git a/kernel_geospatial_e2e_test.go b/kernel_geospatial_e2e_test.go index 41d1c53f..c0b0e7e2 100644 --- a/kernel_geospatial_e2e_test.go +++ b/kernel_geospatial_e2e_test.go @@ -14,7 +14,7 @@ import ( "reflect" "testing" - "github.com/apache/arrow/go/v12/arrow/array" + "github.com/apache/arrow-go/v18/arrow/array" dbsqlrows "github.com/databricks/databricks-sql-go/rows" ) diff --git a/rows/rows.go b/rows/rows.go index 98ba71da..aa9a6112 100644 --- a/rows/rows.go +++ b/rows/rows.go @@ -4,7 +4,7 @@ import ( "context" "io" - "github.com/apache/arrow/go/v12/arrow" + "github.com/apache/arrow-go/v18/arrow" ) type Rows interface { @@ -13,9 +13,9 @@ type Rows interface { } type ArrowBatchIterator interface { - // Retrieve the next arrow.Record. + // Retrieve the next arrow.RecordBatch. // Will return io.EOF if there are no more records - Next() (arrow.Record, error) + Next() (arrow.RecordBatch, error) // Return true if the iterator contains more batches, false otherwise. HasNext() bool