This is an automated email from the ASF dual-hosted git repository.

lidavidm 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 0bd45fd9 feat(go/adbc/driver/flightsql): enable incremental queries 
(#1457)
0bd45fd9 is described below

commit 0bd45fd9028ae8f7618011656e5d1a9ded2f6bf6
Author: David Li <[email protected]>
AuthorDate: Mon Jan 22 12:17:29 2024 -0500

    feat(go/adbc/driver/flightsql): enable incremental queries (#1457)
    
    Requires apache/arrow#39575.
    
    Closes #1451.
---
 CONTRIBUTING.md                                    |   2 +-
 go/adbc/adbc.go                                    |   4 +-
 go/adbc/driver/driverbase/database.go              |   2 +-
 go/adbc/driver/driverbase/driver.go                |   2 +-
 go/adbc/driver/flightsql/cmd/testserver/main.go    |  10 +-
 .../driver/flightsql/flightsql_adbc_server_test.go | 389 ++++++++++++++++++++-
 go/adbc/driver/flightsql/flightsql_adbc_test.go    |  14 +-
 go/adbc/driver/flightsql/flightsql_connection.go   |  28 +-
 go/adbc/driver/flightsql/flightsql_database.go     |   6 +-
 go/adbc/driver/flightsql/flightsql_driver.go       |   2 +-
 go/adbc/driver/flightsql/flightsql_statement.go    | 178 +++++++++-
 go/adbc/driver/flightsql/record_reader.go          |  10 +-
 go/adbc/driver/flightsql/record_reader_test.go     |  12 +-
 go/adbc/driver/internal/shared_utils.go            |   6 +-
 go/adbc/driver/panicdummy/panicdummy_adbc.go       |   6 +-
 go/adbc/driver/snowflake/connection.go             |   4 +-
 go/adbc/driver/snowflake/driver.go                 |   2 +-
 go/adbc/driver/snowflake/driver_test.go            |   8 +-
 go/adbc/driver/snowflake/record_reader.go          |  10 +-
 go/adbc/driver/snowflake/statement.go              |   6 +-
 go/adbc/drivermgr/wrapper.go                       |   6 +-
 go/adbc/drivermgr/wrapper_sqlite_test.go           |   6 +-
 go/adbc/go.mod                                     |   9 +-
 go/adbc/go.sum                                     |  14 +-
 go/adbc/pkg/_tmpl/driver.go.tmpl                   |   8 +-
 go/adbc/pkg/flightsql/driver.go                    |   8 +-
 go/adbc/pkg/panicdummy/driver.go                   |   8 +-
 go/adbc/pkg/snowflake/driver.go                    |   8 +-
 go/adbc/sqldriver/driver.go                        |  10 +-
 go/adbc/sqldriver/driver_internals_test.go         |  10 +-
 go/adbc/sqldriver/flightsql/flightsql.go           |   2 +-
 go/adbc/sqldriver/flightsql/flightsql_test.go      |   8 +-
 go/adbc/standard_schemas.go                        |   2 +-
 go/adbc/utils/utils.go                             |   2 +-
 go/adbc/validation/validation.go                   |   6 +-
 r/adbcsnowflake/tools/create-go-vendor-archive.R   |   2 +-
 36 files changed, 671 insertions(+), 139 deletions(-)

diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index 6c5ccaf2..b7c5249d 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -347,7 +347,7 @@ $ cd go/adbc && go-licenses report ./... \
   --ignore github.com/apache/arrow/go/v11 \
   --ignore github.com/apache/arrow/go/v12 \
   --ignore github.com/apache/arrow/go/v13 \
-  --ignore github.com/apache/arrow/go/v14 \
+  --ignore github.com/apache/arrow/go/v15 \
   --template ../../license.tpl > ../../LICENSE.txt 2> /dev/null
 ```
 
diff --git a/go/adbc/adbc.go b/go/adbc/adbc.go
index 71a75daf..078135c8 100644
--- a/go/adbc/adbc.go
+++ b/go/adbc/adbc.go
@@ -40,8 +40,8 @@ import (
        "context"
        "fmt"
 
-       "github.com/apache/arrow/go/v14/arrow"
-       "github.com/apache/arrow/go/v14/arrow/array"
+       "github.com/apache/arrow/go/v15/arrow"
+       "github.com/apache/arrow/go/v15/arrow/array"
        "google.golang.org/protobuf/proto"
        "google.golang.org/protobuf/types/known/anypb"
 )
diff --git a/go/adbc/driver/driverbase/database.go 
b/go/adbc/driver/driverbase/database.go
index 7f32510c..07d6c12c 100644
--- a/go/adbc/driver/driverbase/database.go
+++ b/go/adbc/driver/driverbase/database.go
@@ -21,7 +21,7 @@ import (
        "context"
 
        "github.com/apache/arrow-adbc/go/adbc"
-       "github.com/apache/arrow/go/v14/arrow/memory"
+       "github.com/apache/arrow/go/v15/arrow/memory"
        "golang.org/x/exp/slog"
 )
 
diff --git a/go/adbc/driver/driverbase/driver.go 
b/go/adbc/driver/driverbase/driver.go
index acd182f8..de9eaf15 100644
--- a/go/adbc/driver/driverbase/driver.go
+++ b/go/adbc/driver/driverbase/driver.go
@@ -22,7 +22,7 @@ package driverbase
 
 import (
        "github.com/apache/arrow-adbc/go/adbc"
-       "github.com/apache/arrow/go/v14/arrow/memory"
+       "github.com/apache/arrow/go/v15/arrow/memory"
 )
 
 // DriverImpl is an interface that drivers implement to provide
diff --git a/go/adbc/driver/flightsql/cmd/testserver/main.go 
b/go/adbc/driver/flightsql/cmd/testserver/main.go
index bb3053d6..0ecda6c3 100644
--- a/go/adbc/driver/flightsql/cmd/testserver/main.go
+++ b/go/adbc/driver/flightsql/cmd/testserver/main.go
@@ -31,11 +31,11 @@ import (
        "strconv"
        "strings"
 
-       "github.com/apache/arrow/go/v14/arrow"
-       "github.com/apache/arrow/go/v14/arrow/array"
-       "github.com/apache/arrow/go/v14/arrow/flight"
-       "github.com/apache/arrow/go/v14/arrow/flight/flightsql"
-       "github.com/apache/arrow/go/v14/arrow/memory"
+       "github.com/apache/arrow/go/v15/arrow"
+       "github.com/apache/arrow/go/v15/arrow/array"
+       "github.com/apache/arrow/go/v15/arrow/flight"
+       "github.com/apache/arrow/go/v15/arrow/flight/flightsql"
+       "github.com/apache/arrow/go/v15/arrow/memory"
        "google.golang.org/grpc/codes"
        "google.golang.org/grpc/status"
        "google.golang.org/protobuf/proto"
diff --git a/go/adbc/driver/flightsql/flightsql_adbc_server_test.go 
b/go/adbc/driver/flightsql/flightsql_adbc_server_test.go
index dfd1f6cf..675b3e2b 100644
--- a/go/adbc/driver/flightsql/flightsql_adbc_server_test.go
+++ b/go/adbc/driver/flightsql/flightsql_adbc_server_test.go
@@ -23,20 +23,23 @@ import (
        "context"
        "errors"
        "fmt"
+       "github.com/google/uuid"
        "net/textproto"
        "os"
+       "strconv"
        "strings"
+       "sync"
        "testing"
        "time"
 
        "github.com/apache/arrow-adbc/go/adbc"
        driver "github.com/apache/arrow-adbc/go/adbc/driver/flightsql"
-       "github.com/apache/arrow/go/v14/arrow"
-       "github.com/apache/arrow/go/v14/arrow/array"
-       "github.com/apache/arrow/go/v14/arrow/flight"
-       "github.com/apache/arrow/go/v14/arrow/flight/flightsql"
-       "github.com/apache/arrow/go/v14/arrow/flight/flightsql/schema_ref"
-       "github.com/apache/arrow/go/v14/arrow/memory"
+       "github.com/apache/arrow/go/v15/arrow"
+       "github.com/apache/arrow/go/v15/arrow/array"
+       "github.com/apache/arrow/go/v15/arrow/flight"
+       "github.com/apache/arrow/go/v15/arrow/flight/flightsql"
+       "github.com/apache/arrow/go/v15/arrow/flight/flightsql/schema_ref"
+       "github.com/apache/arrow/go/v15/arrow/memory"
        "github.com/golang/protobuf/ptypes/wrappers"
        "github.com/stretchr/testify/suite"
        "golang.org/x/exp/maps"
@@ -109,6 +112,10 @@ func TestExecuteSchema(t *testing.T) {
        suite.Run(t, &ExecuteSchemaTests{})
 }
 
+func TestIncrementalPoll(t *testing.T) {
+       suite.Run(t, &IncrementalPollTests{})
+}
+
 func TestTimeout(t *testing.T) {
        suite.Run(t, &TimeoutTests{})
 }
@@ -428,6 +435,376 @@ func (ts *ExecuteSchemaTests) TestQuery() {
        ts.True(expectedSchema.Equal(schema), schema.String())
 }
 
+// ---- IncrementalPoll Tests --------------------
+
+type IncrementalQuery struct {
+       query     string
+       nextIndex int
+}
+
+type IncrementalPollTestServer struct {
+       flightsql.BaseServer
+       mu        sync.Mutex
+       queries   map[string]*IncrementalQuery
+       testCases map[string]IncrementalPollTestCase
+}
+
+func (srv *IncrementalPollTestServer) PollFlightInfo(ctx context.Context, desc 
*flight.FlightDescriptor) (*flight.PollInfo, error) {
+       srv.mu.Lock()
+       defer srv.mu.Unlock()
+
+       var val wrapperspb.StringValue
+       var err error
+       if err = proto.Unmarshal(desc.Cmd, &val); err != nil {
+               return nil, err
+       }
+       queryId := val.Value
+       progress := int64(0)
+       if strings.Contains(queryId, ";") {
+               parts := strings.SplitN(queryId, ";", 2)
+               queryId = parts[0]
+               progress, err = strconv.ParseInt(parts[1], 10, 32)
+               if err != nil {
+                       return nil, err
+               }
+       }
+
+       query, ok := srv.queries[queryId]
+       if !ok {
+               return nil, status.Errorf(codes.NotFound, "Query ID not found")
+       }
+
+       testCase, ok := srv.testCases[query.query]
+       if !ok {
+               return nil, status.Errorf(codes.Unimplemented, 
fmt.Sprintf("Invalid case %s", query.query))
+       }
+
+       if testCase.differentRetryDescriptor && progress != 
int64(query.nextIndex) {
+               return nil, status.Errorf(codes.InvalidArgument, 
fmt.Sprintf("Used wrong retry descriptor, expected %d but got %d", 
query.nextIndex, progress))
+       }
+
+       return srv.MakePollInfo(&testCase, query, queryId)
+}
+
+func (srv *IncrementalPollTestServer) PollFlightInfoStatement(ctx 
context.Context, query flightsql.StatementQuery, desc *flight.FlightDescriptor) 
(*flight.PollInfo, error) {
+       queryId := uuid.New().String()
+
+       testCase, ok := srv.testCases[query.GetQuery()]
+       if !ok {
+               return nil, status.Errorf(codes.Unimplemented, 
fmt.Sprintf("Invalid case %s", query.GetQuery()))
+       }
+
+       srv.mu.Lock()
+       defer srv.mu.Unlock()
+
+       srv.queries[queryId] = &IncrementalQuery{
+               query:     query.GetQuery(),
+               nextIndex: 0,
+       }
+
+       return srv.MakePollInfo(&testCase, srv.queries[queryId], queryId)
+}
+
+func (srv *IncrementalPollTestServer) PollFlightInfoPreparedStatement(ctx 
context.Context, query flightsql.PreparedStatementQuery, desc 
*flight.FlightDescriptor) (*flight.PollInfo, error) {
+       queryId := uuid.New().String()
+       req := string(query.GetPreparedStatementHandle())
+
+       testCase, ok := srv.testCases[req]
+       if !ok {
+               return nil, status.Errorf(codes.Unimplemented, 
fmt.Sprintf("Invalid case %s", req))
+       }
+
+       srv.mu.Lock()
+       defer srv.mu.Unlock()
+
+       srv.queries[queryId] = &IncrementalQuery{
+               query:     req,
+               nextIndex: 0,
+       }
+
+       return srv.MakePollInfo(&testCase, srv.queries[queryId], queryId)
+}
+
+func (srv *IncrementalPollTestServer) BeginTransaction(context.Context, 
flightsql.ActionBeginTransactionRequest) (id []byte, err error) {
+       return []byte("txn"), nil
+}
+
+func (srv *IncrementalPollTestServer) EndTransaction(context.Context, 
flightsql.ActionEndTransactionRequest) error {
+       return nil
+}
+
+func (srv *IncrementalPollTestServer) CreatePreparedStatement(ctx 
context.Context, req flightsql.ActionCreatePreparedStatementRequest) (res 
flightsql.ActionCreatePreparedStatementResult, err error) {
+       return flightsql.ActionCreatePreparedStatementResult{
+               Handle: []byte(req.GetQuery()),
+               DatasetSchema: arrow.NewSchema([]arrow.Field{
+                       {Name: "ints", Type: arrow.PrimitiveTypes.Int32},
+               }, nil),
+       }, nil
+}
+
+func (srv *IncrementalPollTestServer) ClosePreparedStatement(ctx 
context.Context, req flightsql.ActionClosePreparedStatementRequest) error {
+       return nil
+}
+
+func (srv *IncrementalPollTestServer) MakePollInfo(testCase 
*IncrementalPollTestCase, query *IncrementalQuery, queryId string) 
(*flight.PollInfo, error) {
+       schema := flight.SerializeSchema(arrow.NewSchema([]arrow.Field{
+               {Name: "ints", Type: arrow.PrimitiveTypes.Int32},
+       }, nil), srv.Alloc)
+
+       pb := wrapperspb.StringValue{Value: queryId}
+       if testCase.differentRetryDescriptor {
+               pb.Value = queryId + ";" + strconv.Itoa(query.nextIndex+1)
+       }
+       descriptor, err := proto.Marshal(&pb)
+       if err != nil {
+               return nil, err
+       }
+
+       numEndpoints := 0
+       for i := 0; i <= query.nextIndex; i++ {
+               if i >= len(testCase.progress) {
+                       break
+               }
+               numEndpoints += testCase.progress[i]
+       }
+       endpoints := make([]*flight.FlightEndpoint, numEndpoints)
+       for i := range endpoints {
+               endpoints[i] = &flight.FlightEndpoint{
+                       Ticket: &flight.Ticket{
+                               Ticket: []byte{},
+                       },
+               }
+       }
+
+       query.nextIndex++
+       pollInfo := flight.PollInfo{
+               Info: &flight.FlightInfo{
+                       Schema:   schema,
+                       Endpoint: endpoints,
+               },
+               FlightDescriptor: &flight.FlightDescriptor{
+                       Type: flight.DescriptorCMD,
+                       Cmd:  descriptor,
+               },
+               Progress: proto.Float64(float64(query.nextIndex) / 
float64(len(testCase.progress))),
+       }
+
+       if query.nextIndex >= len(testCase.progress) {
+               if testCase.completeLazily {
+                       if query.nextIndex == len(testCase.progress) {
+                               // Make the client poll one more time
+                       } else {
+                               pollInfo.FlightDescriptor = nil
+                               delete(srv.queries, queryId)
+                       }
+
+               } else {
+                       pollInfo.FlightDescriptor = nil
+                       delete(srv.queries, queryId)
+               }
+       }
+
+       return &pollInfo, nil
+}
+
+type IncrementalPollTestCase struct {
+       // on each poll (including the first), this many new endpoints complete
+       // making 0 progress is allowed, but not recommended (allow clients to 
'long poll')
+       progress []int
+
+       // use a different retry descriptor for each poll
+       differentRetryDescriptor bool
+
+       // require one extra poll to get completion (i.e. the last poll will 
have a nil FlightInfo)
+       completeLazily bool
+}
+
+type IncrementalPollTests struct {
+       ServerBasedTests
+       testCases map[string]IncrementalPollTestCase
+}
+
+func (suite *IncrementalPollTests) SetupSuite() {
+       suite.testCases = map[string]IncrementalPollTestCase{
+               "basic": {
+                       progress: []int{1, 1, 1, 1},
+               },
+               "basic 2": {
+                       progress: []int{2, 3, 4, 5},
+               },
+               "basic 3": {
+                       progress: []int{2},
+               },
+               "descriptor changes": {
+                       progress:                 []int{1, 1, 1, 1},
+                       differentRetryDescriptor: true,
+               },
+               "lazy": {
+                       progress:       []int{1, 1, 1, 1},
+                       completeLazily: true,
+               },
+               "lazy 2": {
+                       progress:       []int{1, 1, 1, 0},
+                       completeLazily: true,
+               },
+               "no progress": {
+                       progress: []int{0, 1, 1, 1},
+               },
+               "no progress 2": {
+                       progress: []int{0, 0, 1, 1},
+               },
+               "no progress 3": {
+                       progress: []int{0, 0, 1, 0},
+               },
+       }
+
+       srv := IncrementalPollTestServer{
+               queries:   make(map[string]*IncrementalQuery),
+               testCases: suite.testCases,
+       }
+       
suite.NoError(srv.RegisterSqlInfo(flightsql.SqlInfoFlightSqlServerTransaction, 
int32(flightsql.SqlTransactionTransaction)))
+       srv.Alloc = memory.DefaultAllocator
+       suite.DoSetupSuite(&srv, nil, nil)
+}
+
+func (ts *IncrementalPollTests) TestMaxProgress() {
+       stmt, err := ts.cnxn.NewStatement()
+       ts.NoError(err)
+       defer stmt.Close()
+       opts := stmt.(adbc.GetSetOptions)
+
+       val, err := opts.GetOptionDouble(adbc.OptionKeyMaxProgress)
+       ts.NoError(err)
+       ts.Equal(1.0, val)
+}
+
+func (ts *IncrementalPollTests) TestOptionValue() {
+       stmt, err := ts.cnxn.NewStatement()
+       ts.NoError(err)
+       defer stmt.Close()
+       opts := stmt.(adbc.GetSetOptions)
+
+       val, err := opts.GetOption(adbc.OptionKeyIncremental)
+       ts.NoError(err)
+       ts.Equal(adbc.OptionValueDisabled, val)
+
+       ts.NoError(stmt.SetOption(adbc.OptionKeyIncremental, 
adbc.OptionValueEnabled))
+
+       val, err = opts.GetOption(adbc.OptionKeyIncremental)
+       ts.NoError(err)
+       ts.Equal(adbc.OptionValueEnabled, val)
+
+       var adbcErr adbc.Error
+       ts.ErrorAs(stmt.SetOption(adbc.OptionKeyIncremental, "foobar"), 
&adbcErr)
+       ts.Equal(adbc.StatusInvalidArgument, adbcErr.Code)
+}
+
+func (ts *IncrementalPollTests) RunOneTestCase(ctx context.Context, stmt 
adbc.Statement, name string, testCase *IncrementalPollTestCase) {
+       opts := stmt.(adbc.GetSetOptions)
+
+       for idx, progress := range testCase.progress {
+               if progress == 0 {
+                       // the driver hides this from us
+                       continue
+               }
+
+               _, partitions, _, err := stmt.ExecutePartitions(ctx)
+               ts.NoError(err)
+
+               ts.Equal(uint64(progress), partitions.NumPartitions)
+
+               val, err := opts.GetOptionDouble(adbc.OptionKeyProgress)
+               ts.NoError(err)
+               ts.Equal(float64(idx+1)/float64(len(testCase.progress)), val)
+       }
+
+       // Query completed, but we find out by getting no partitions in this 
call
+       _, partitions, _, err := stmt.ExecutePartitions(ctx)
+       ts.NoError(err)
+
+       ts.Equal(uint64(0), partitions.NumPartitions)
+}
+
+func (ts *IncrementalPollTests) TestQuery() {
+       ctx := context.Background()
+       for name, testCase := range ts.testCases {
+               ts.Run(name, func() {
+                       stmt, err := ts.cnxn.NewStatement()
+                       ts.NoError(err)
+                       defer stmt.Close()
+
+                       ts.NoError(stmt.SetOption(adbc.OptionKeyIncremental, 
adbc.OptionValueEnabled))
+
+                       // Run the query multiple times (we should be able to 
reuse the statement)
+                       for i := 0; i < 2; i++ {
+                               ts.NoError(stmt.SetSqlQuery(name))
+                               ts.RunOneTestCase(ctx, stmt, name, &testCase)
+                       }
+               })
+       }
+}
+
+func (ts *IncrementalPollTests) TestQueryPrepared() {
+       ctx := context.Background()
+       for name, testCase := range ts.testCases {
+               ts.Run(name, func() {
+                       stmt, err := ts.cnxn.NewStatement()
+                       ts.NoError(err)
+                       defer stmt.Close()
+
+                       ts.NoError(stmt.SetOption(adbc.OptionKeyIncremental, 
adbc.OptionValueEnabled))
+
+                       // Run the query multiple times (we should be able to 
reuse the statement)
+                       for i := 0; i < 2; i++ {
+                               ts.NoError(stmt.SetSqlQuery(name))
+                               ts.NoError(stmt.Prepare(ctx))
+                               ts.RunOneTestCase(ctx, stmt, name, &testCase)
+                       }
+               })
+       }
+}
+
+func (ts *IncrementalPollTests) TestQueryPreparedTransaction() {
+       ctx := context.Background()
+       for name, testCase := range ts.testCases {
+               ts.Run(name, func() {
+                       
ts.NoError(ts.cnxn.(adbc.PostInitOptions).SetOption(adbc.OptionKeyAutoCommit, 
adbc.OptionValueDisabled))
+                       stmt, err := ts.cnxn.NewStatement()
+                       ts.NoError(err)
+                       defer stmt.Close()
+
+                       ts.NoError(stmt.SetOption(adbc.OptionKeyIncremental, 
adbc.OptionValueEnabled))
+
+                       // Run the query multiple times (we should be able to 
reuse the statement)
+                       for i := 0; i < 2; i++ {
+                               ts.NoError(stmt.SetSqlQuery(name))
+                               ts.NoError(stmt.Prepare(ctx))
+                               ts.RunOneTestCase(ctx, stmt, name, &testCase)
+                       }
+               })
+       }
+}
+
+func (ts *IncrementalPollTests) TestQueryTransaction() {
+       ctx := context.Background()
+       for name, testCase := range ts.testCases {
+               ts.Run(name, func() {
+                       
ts.NoError(ts.cnxn.(adbc.PostInitOptions).SetOption(adbc.OptionKeyAutoCommit, 
adbc.OptionValueDisabled))
+                       stmt, err := ts.cnxn.NewStatement()
+                       ts.NoError(err)
+                       defer stmt.Close()
+
+                       ts.NoError(stmt.SetOption(adbc.OptionKeyIncremental, 
adbc.OptionValueEnabled))
+
+                       // Run the query multiple times (we should be able to 
reuse the statement)
+                       for i := 0; i < 2; i++ {
+                               ts.NoError(stmt.SetSqlQuery(name))
+                               ts.RunOneTestCase(ctx, stmt, name, &testCase)
+                       }
+               })
+       }
+}
+
 // ---- Timeout Tests --------------------
 
 type TimeoutTestServer struct {
diff --git a/go/adbc/driver/flightsql/flightsql_adbc_test.go 
b/go/adbc/driver/flightsql/flightsql_adbc_test.go
index 2fcc010d..b0f786e9 100644
--- a/go/adbc/driver/flightsql/flightsql_adbc_test.go
+++ b/go/adbc/driver/flightsql/flightsql_adbc_test.go
@@ -42,12 +42,12 @@ import (
        "github.com/apache/arrow-adbc/go/adbc"
        driver "github.com/apache/arrow-adbc/go/adbc/driver/flightsql"
        "github.com/apache/arrow-adbc/go/adbc/validation"
-       "github.com/apache/arrow/go/v14/arrow"
-       "github.com/apache/arrow/go/v14/arrow/array"
-       "github.com/apache/arrow/go/v14/arrow/flight"
-       "github.com/apache/arrow/go/v14/arrow/flight/flightsql"
-       "github.com/apache/arrow/go/v14/arrow/flight/flightsql/example"
-       "github.com/apache/arrow/go/v14/arrow/memory"
+       "github.com/apache/arrow/go/v15/arrow"
+       "github.com/apache/arrow/go/v15/arrow/array"
+       "github.com/apache/arrow/go/v15/arrow/flight"
+       "github.com/apache/arrow/go/v15/arrow/flight/flightsql"
+       "github.com/apache/arrow/go/v15/arrow/flight/flightsql/example"
+       "github.com/apache/arrow/go/v15/arrow/memory"
        "github.com/stretchr/testify/require"
        "github.com/stretchr/testify/suite"
        "google.golang.org/grpc"
@@ -260,7 +260,7 @@ func (s *FlightSQLQuirks) GetMetadata(code adbc.InfoCode) 
interface{} {
        case adbc.InfoVendorVersion:
                return "sqlite 3"
        case adbc.InfoVendorArrowVersion:
-               return "14.0.2"
+               return "15.0.0-SNAPSHOT"
        }
 
        return nil
diff --git a/go/adbc/driver/flightsql/flightsql_connection.go 
b/go/adbc/driver/flightsql/flightsql_connection.go
index ee24b75e..a3f9f4cc 100644
--- a/go/adbc/driver/flightsql/flightsql_connection.go
+++ b/go/adbc/driver/flightsql/flightsql_connection.go
@@ -27,12 +27,12 @@ import (
 
        "github.com/apache/arrow-adbc/go/adbc"
        "github.com/apache/arrow-adbc/go/adbc/driver/internal"
-       "github.com/apache/arrow/go/v14/arrow"
-       "github.com/apache/arrow/go/v14/arrow/array"
-       "github.com/apache/arrow/go/v14/arrow/flight"
-       "github.com/apache/arrow/go/v14/arrow/flight/flightsql"
-       "github.com/apache/arrow/go/v14/arrow/flight/flightsql/schema_ref"
-       "github.com/apache/arrow/go/v14/arrow/ipc"
+       "github.com/apache/arrow/go/v15/arrow"
+       "github.com/apache/arrow/go/v15/arrow/array"
+       "github.com/apache/arrow/go/v15/arrow/flight"
+       "github.com/apache/arrow/go/v15/arrow/flight/flightsql"
+       "github.com/apache/arrow/go/v15/arrow/flight/flightsql/schema_ref"
+       "github.com/apache/arrow/go/v15/arrow/ipc"
        "github.com/bluele/gcache"
        "google.golang.org/grpc"
        grpccodes "google.golang.org/grpc/codes"
@@ -886,6 +886,22 @@ func (c *cnxn) executeSubstraitUpdate(ctx context.Context, 
plan flightsql.Substr
        return c.cl.ExecuteSubstraitUpdate(ctx, plan, opts...)
 }
 
+func (c *cnxn) poll(ctx context.Context, query string, retryDescriptor 
*flight.FlightDescriptor, opts ...grpc.CallOption) (*flight.PollInfo, error) {
+       if c.txn != nil {
+               return c.txn.ExecutePoll(ctx, query, retryDescriptor, opts...)
+       }
+
+       return c.cl.ExecutePoll(ctx, query, retryDescriptor, opts...)
+}
+
+func (c *cnxn) pollSubstrait(ctx context.Context, plan 
flightsql.SubstraitPlan, retryDescriptor *flight.FlightDescriptor, opts 
...grpc.CallOption) (*flight.PollInfo, error) {
+       if c.txn != nil {
+               return c.txn.ExecuteSubstraitPoll(ctx, plan, retryDescriptor, 
opts...)
+       }
+
+       return c.cl.ExecuteSubstraitPoll(ctx, plan, retryDescriptor, opts...)
+}
+
 func (c *cnxn) prepare(ctx context.Context, query string, opts 
...grpc.CallOption) (*flightsql.PreparedStatement, error) {
        if c.txn != nil {
                return c.txn.Prepare(ctx, query, opts...)
diff --git a/go/adbc/driver/flightsql/flightsql_database.go 
b/go/adbc/driver/flightsql/flightsql_database.go
index f9537f50..50736488 100644
--- a/go/adbc/driver/flightsql/flightsql_database.go
+++ b/go/adbc/driver/flightsql/flightsql_database.go
@@ -30,9 +30,9 @@ import (
 
        "github.com/apache/arrow-adbc/go/adbc"
        "github.com/apache/arrow-adbc/go/adbc/driver/driverbase"
-       "github.com/apache/arrow/go/v14/arrow/array"
-       "github.com/apache/arrow/go/v14/arrow/flight"
-       "github.com/apache/arrow/go/v14/arrow/flight/flightsql"
+       "github.com/apache/arrow/go/v15/arrow/array"
+       "github.com/apache/arrow/go/v15/arrow/flight"
+       "github.com/apache/arrow/go/v15/arrow/flight/flightsql"
        "github.com/bluele/gcache"
        "google.golang.org/grpc"
        "google.golang.org/grpc/credentials"
diff --git a/go/adbc/driver/flightsql/flightsql_driver.go 
b/go/adbc/driver/flightsql/flightsql_driver.go
index cc58a9e1..ffce7c1a 100644
--- a/go/adbc/driver/flightsql/flightsql_driver.go
+++ b/go/adbc/driver/flightsql/flightsql_driver.go
@@ -38,7 +38,7 @@ import (
 
        "github.com/apache/arrow-adbc/go/adbc"
        "github.com/apache/arrow-adbc/go/adbc/driver/driverbase"
-       "github.com/apache/arrow/go/v14/arrow/memory"
+       "github.com/apache/arrow/go/v15/arrow/memory"
        "golang.org/x/exp/maps"
        "google.golang.org/grpc/metadata"
 )
diff --git a/go/adbc/driver/flightsql/flightsql_statement.go 
b/go/adbc/driver/flightsql/flightsql_statement.go
index 9edcf439..59674dfe 100644
--- a/go/adbc/driver/flightsql/flightsql_statement.go
+++ b/go/adbc/driver/flightsql/flightsql_statement.go
@@ -22,13 +22,14 @@ import (
        "fmt"
        "strconv"
        "strings"
+       "time"
 
        "github.com/apache/arrow-adbc/go/adbc"
-       "github.com/apache/arrow/go/v14/arrow"
-       "github.com/apache/arrow/go/v14/arrow/array"
-       "github.com/apache/arrow/go/v14/arrow/flight"
-       "github.com/apache/arrow/go/v14/arrow/flight/flightsql"
-       "github.com/apache/arrow/go/v14/arrow/memory"
+       "github.com/apache/arrow/go/v15/arrow"
+       "github.com/apache/arrow/go/v15/arrow/array"
+       "github.com/apache/arrow/go/v15/arrow/flight"
+       "github.com/apache/arrow/go/v15/arrow/flight/flightsql"
+       "github.com/apache/arrow/go/v15/arrow/memory"
        "github.com/bluele/gcache"
        "google.golang.org/grpc"
        "google.golang.org/grpc/metadata"
@@ -109,6 +110,19 @@ func (s *sqlOrSubstrait) executeUpdate(ctx 
context.Context, cnxn *cnxn, opts ...
        }
 }
 
+func (s *sqlOrSubstrait) poll(ctx context.Context, cnxn *cnxn, retryDescriptor 
*flight.FlightDescriptor, opts ...grpc.CallOption) (*flight.PollInfo, error) {
+       if s.sqlQuery != "" {
+               return cnxn.poll(ctx, s.sqlQuery, retryDescriptor, opts...)
+       } else if s.substraitPlan != nil {
+               return cnxn.pollSubstrait(ctx, flightsql.SubstraitPlan{Plan: 
s.substraitPlan, Version: s.substraitVersion}, retryDescriptor, opts...)
+       }
+
+       return nil, adbc.Error{
+               Code: adbc.StatusInvalidState,
+               Msg:  "[Flight SQL] cannot call ExecuteQuery without a query or 
prepared statement",
+       }
+}
+
 func (s *sqlOrSubstrait) prepare(ctx context.Context, cnxn *cnxn, opts 
...grpc.CallOption) (*flightsql.PreparedStatement, error) {
        if s.sqlQuery != "" {
                return cnxn.prepare(ctx, s.sqlQuery, opts...)
@@ -122,16 +136,25 @@ func (s *sqlOrSubstrait) prepare(ctx context.Context, 
cnxn *cnxn, opts ...grpc.C
        }
 }
 
+type incrementalState struct {
+       schema          *arrow.Schema
+       previousInfo    *flight.FlightInfo
+       retryDescriptor *flight.FlightDescriptor
+       complete        bool
+}
+
 type statement struct {
        alloc       memory.Allocator
        cnxn        *cnxn
        clientCache gcache.Cache
 
-       hdrs      metadata.MD
-       query     sqlOrSubstrait
-       prepared  *flightsql.PreparedStatement
-       queueSize int
-       timeouts  timeoutOption
+       hdrs             metadata.MD
+       query            sqlOrSubstrait
+       prepared         *flightsql.PreparedStatement
+       queueSize        int
+       timeouts         timeoutOption
+       incrementalState *incrementalState
+       progress         float64
 }
 
 func (s *statement) closePreparedStatement() error {
@@ -140,6 +163,27 @@ func (s *statement) closePreparedStatement() error {
        return adbcFromFlightStatusWithDetails(err, header, trailer, 
"ClosePreparedStatement")
 }
 
+func (s *statement) clearIncrementalQuery() error {
+       // retryDescriptor != nil ==> query is in progress
+       if s.incrementalState != nil {
+               if !s.incrementalState.complete && 
s.incrementalState.retryDescriptor != nil {
+                       return adbc.Error{
+                               Code: adbc.StatusInvalidState,
+                               Msg:  "[Flight SQL] Cannot disable incremental 
execution while a query is in progress, finish execution first",
+                       }
+               }
+               s.incrementalState = &incrementalState{}
+       }
+       return nil
+}
+
+func (s *statement) poll(ctx context.Context, opts ...grpc.CallOption) 
(*flight.PollInfo, error) {
+       if s.prepared != nil {
+               return s.prepared.ExecutePoll(ctx, 
s.incrementalState.retryDescriptor, opts...)
+       }
+       return s.query.poll(ctx, s.cnxn, s.incrementalState.retryDescriptor, 
opts...)
+}
+
 // Close releases any relevant resources associated with this statement
 // and closes it (particularly if it is a prepared statement).
 //
@@ -173,6 +217,11 @@ func (s *statement) GetOption(key string) (string, error) {
                return s.timeouts.queryTimeout.String(), nil
        case OptionTimeoutUpdate:
                return s.timeouts.updateTimeout.String(), nil
+       case adbc.OptionKeyIncremental:
+               if s.incrementalState != nil {
+                       return adbc.OptionValueEnabled, nil
+               }
+               return adbc.OptionValueDisabled, nil
        }
 
        if strings.HasPrefix(key, OptionRPCCallHeaderPrefix) {
@@ -221,6 +270,10 @@ func (s *statement) GetOptionDouble(key string) (float64, 
error) {
                return s.timeouts.queryTimeout.Seconds(), nil
        case OptionTimeoutUpdate:
                return s.timeouts.updateTimeout.Seconds(), nil
+       case adbc.OptionKeyProgress:
+               return s.progress, nil
+       case adbc.OptionKeyMaxProgress:
+               return 1.0, nil
        }
 
        return 0, adbc.Error{
@@ -260,6 +313,24 @@ func (s *statement) SetOption(key string, val string) 
error {
                return s.SetOptionInt(key, int64(size))
        case OptionStatementSubstraitVersion:
                s.query.substraitVersion = val
+       case adbc.OptionKeyIncremental:
+               switch val {
+               case adbc.OptionValueEnabled:
+                       if err := s.clearIncrementalQuery(); err != nil {
+                               return err
+                       }
+                       s.incrementalState = &incrementalState{}
+               case adbc.OptionValueDisabled:
+                       if err := s.clearIncrementalQuery(); err != nil {
+                               return err
+                       }
+                       s.incrementalState = nil
+               default:
+                       return adbc.Error{
+                               Msg:  fmt.Sprintf("[Flight SQL] Invalid 
statement option value %s=%s", key, val),
+                               Code: adbc.StatusInvalidArgument,
+                       }
+               }
        default:
                return adbc.Error{
                        Msg:  "[Flight SQL] Unknown statement option '" + key + 
"'",
@@ -318,7 +389,9 @@ func (s *statement) SetSqlQuery(query string) error {
                }
                s.prepared = nil
        }
-
+       if err := s.clearIncrementalQuery(); err != nil {
+               return err
+       }
        s.query.setSqlQuery(query)
        return nil
 }
@@ -329,6 +402,10 @@ func (s *statement) SetSqlQuery(query string) error {
 //
 // This invalidates any prior result sets on this statement.
 func (s *statement) ExecuteQuery(ctx context.Context) (rdr array.RecordReader, 
nrec int64, err error) {
+       if err := s.clearIncrementalQuery(); err != nil {
+               return nil, -1, err
+       }
+
        ctx = metadata.NewOutgoingContext(ctx, s.hdrs)
        var info *flight.FlightInfo
        var header, trailer metadata.MD
@@ -351,6 +428,10 @@ func (s *statement) ExecuteQuery(ctx context.Context) (rdr 
array.RecordReader, n
 // ExecuteUpdate executes a statement that does not generate a result
 // set. It returns the number of rows affected if known, otherwise -1.
 func (s *statement) ExecuteUpdate(ctx context.Context) (n int64, err error) {
+       if err := s.clearIncrementalQuery(); err != nil {
+               return -1, err
+       }
+
        ctx = metadata.NewOutgoingContext(ctx, s.hdrs)
        var header, trailer metadata.MD
        opts := append([]grpc.CallOption{}, grpc.Header(&header), 
grpc.Trailer(&trailer), s.timeouts)
@@ -396,6 +477,9 @@ func (s *statement) SetSubstraitPlan(plan []byte) error {
                }
                s.prepared = nil
        }
+       if err := s.clearIncrementalQuery(); err != nil {
+               return err
+       }
 
        s.query.setSubstraitPlan(plan)
        return nil
@@ -485,13 +569,79 @@ func (s *statement) ExecutePartitions(ctx 
context.Context) (*arrow.Schema, adbc.
 
        var (
                info *flight.FlightInfo
+               poll *flight.PollInfo
                out  adbc.Partitions
                sc   *arrow.Schema
                err  error
        )
 
        var header, trailer metadata.MD
-       if s.prepared != nil {
+       if s.incrementalState != nil {
+               if s.incrementalState.complete {
+                       schema := s.incrementalState.schema
+                       totalRecords := 
s.incrementalState.previousInfo.TotalRecords
+                       // Reset the statement for reuse
+                       s.incrementalState = &incrementalState{}
+                       s.progress = 0.0
+                       return schema, adbc.Partitions{}, totalRecords, nil
+               }
+
+               backoff := 100 * time.Millisecond
+               for {
+                       // Keep polling until the query completes or we get new 
partitions
+                       poll, err = s.poll(ctx, grpc.Header(&header), 
grpc.Trailer(&trailer), s.timeouts)
+                       if err != nil {
+                               break
+                       }
+                       info = poll.GetInfo()
+                       if info == nil {
+                               // The server is misbehaving
+                               // XXX: should we also issue a query 
cancellation?
+                               s.incrementalState = &incrementalState{}
+                               s.progress = 0.0
+                               return nil, adbc.Partitions{}, -1, adbc.Error{
+                                       Msg:  "[Flight SQL] Server returned a 
PollInfo with no FlightInfo",
+                                       Code: adbc.StatusInternal,
+                               }
+                       }
+                       info = proto.Clone(info).(*flight.FlightInfo)
+                       // We only return the new endpoints each time
+                       if s.incrementalState.previousInfo != nil {
+                               offset := 
len(s.incrementalState.previousInfo.Endpoint)
+                               if offset >= len(info.Endpoint) {
+                                       info.Endpoint = 
[]*flight.FlightEndpoint{}
+                               } else {
+                                       info.Endpoint = info.Endpoint[offset:]
+                               }
+                       }
+                       s.incrementalState.previousInfo = poll.GetInfo()
+                       s.incrementalState.retryDescriptor = 
poll.GetFlightDescriptor()
+                       s.progress = poll.GetProgress()
+
+                       if s.incrementalState.retryDescriptor == nil {
+                               // Query is finished
+                               s.incrementalState.complete = true
+                               break
+                       } else if len(info.Endpoint) > 0 {
+                               // Query made progress
+                               break
+                       }
+                       // Back off before next poll
+                       time.Sleep(backoff)
+                       backoff *= 2
+                       if backoff > 5000*time.Millisecond {
+                               backoff = 5000 * time.Millisecond
+                       }
+               }
+
+               // Special case: the query completed but there were no new 
endpoints. We
+               // return 0 new partitions, and also reset the statement 
(because
+               // returning 0 partitions implies completion)
+               if s.incrementalState.complete && len(info.Endpoint) == 0 {
+                       s.incrementalState = &incrementalState{}
+                       s.progress = 0.0
+               }
+       } else if s.prepared != nil {
                info, err = s.prepared.Execute(ctx, grpc.Header(&header), 
grpc.Trailer(&trailer), s.timeouts)
        } else {
                info, err = s.query.execute(ctx, s.cnxn, grpc.Header(&header), 
grpc.Trailer(&trailer), s.timeouts)
@@ -508,6 +658,10 @@ func (s *statement) ExecutePartitions(ctx context.Context) 
(*arrow.Schema, adbc.
                }
        }
 
+       if s.incrementalState != nil {
+               s.incrementalState.schema = sc
+       }
+
        out.NumPartitions = uint64(len(info.Endpoint))
        out.PartitionIDs = make([][]byte, out.NumPartitions)
        for i, e := range info.Endpoint {
diff --git a/go/adbc/driver/flightsql/record_reader.go 
b/go/adbc/driver/flightsql/record_reader.go
index 9a10e370..c2ae474a 100644
--- a/go/adbc/driver/flightsql/record_reader.go
+++ b/go/adbc/driver/flightsql/record_reader.go
@@ -24,11 +24,11 @@ import (
 
        "github.com/apache/arrow-adbc/go/adbc"
        "github.com/apache/arrow-adbc/go/adbc/utils"
-       "github.com/apache/arrow/go/v14/arrow"
-       "github.com/apache/arrow/go/v14/arrow/array"
-       "github.com/apache/arrow/go/v14/arrow/flight"
-       "github.com/apache/arrow/go/v14/arrow/flight/flightsql"
-       "github.com/apache/arrow/go/v14/arrow/memory"
+       "github.com/apache/arrow/go/v15/arrow"
+       "github.com/apache/arrow/go/v15/arrow/array"
+       "github.com/apache/arrow/go/v15/arrow/flight"
+       "github.com/apache/arrow/go/v15/arrow/flight/flightsql"
+       "github.com/apache/arrow/go/v15/arrow/memory"
        "github.com/bluele/gcache"
        "golang.org/x/sync/errgroup"
        "google.golang.org/grpc"
diff --git a/go/adbc/driver/flightsql/record_reader_test.go 
b/go/adbc/driver/flightsql/record_reader_test.go
index 28c90462..83104e63 100644
--- a/go/adbc/driver/flightsql/record_reader_test.go
+++ b/go/adbc/driver/flightsql/record_reader_test.go
@@ -24,12 +24,12 @@ import (
        "testing"
 
        "github.com/apache/arrow-adbc/go/adbc"
-       "github.com/apache/arrow/go/v14/arrow"
-       "github.com/apache/arrow/go/v14/arrow/array"
-       "github.com/apache/arrow/go/v14/arrow/flight"
-       "github.com/apache/arrow/go/v14/arrow/flight/flightsql"
-       "github.com/apache/arrow/go/v14/arrow/ipc"
-       "github.com/apache/arrow/go/v14/arrow/memory"
+       "github.com/apache/arrow/go/v15/arrow"
+       "github.com/apache/arrow/go/v15/arrow/array"
+       "github.com/apache/arrow/go/v15/arrow/flight"
+       "github.com/apache/arrow/go/v15/arrow/flight/flightsql"
+       "github.com/apache/arrow/go/v15/arrow/ipc"
+       "github.com/apache/arrow/go/v15/arrow/memory"
        "github.com/bluele/gcache"
        "github.com/stretchr/testify/suite"
        "google.golang.org/grpc"
diff --git a/go/adbc/driver/internal/shared_utils.go 
b/go/adbc/driver/internal/shared_utils.go
index 3a579119..52d74d9c 100644
--- a/go/adbc/driver/internal/shared_utils.go
+++ b/go/adbc/driver/internal/shared_utils.go
@@ -26,9 +26,9 @@ import (
        "time"
 
        "github.com/apache/arrow-adbc/go/adbc"
-       "github.com/apache/arrow/go/v14/arrow"
-       "github.com/apache/arrow/go/v14/arrow/array"
-       "github.com/apache/arrow/go/v14/arrow/memory"
+       "github.com/apache/arrow/go/v15/arrow"
+       "github.com/apache/arrow/go/v15/arrow/array"
+       "github.com/apache/arrow/go/v15/arrow/memory"
 )
 
 type CatalogAndSchema struct {
diff --git a/go/adbc/driver/panicdummy/panicdummy_adbc.go 
b/go/adbc/driver/panicdummy/panicdummy_adbc.go
index 95171591..a30fc7fe 100644
--- a/go/adbc/driver/panicdummy/panicdummy_adbc.go
+++ b/go/adbc/driver/panicdummy/panicdummy_adbc.go
@@ -25,9 +25,9 @@ import (
        "os"
 
        "github.com/apache/arrow-adbc/go/adbc"
-       "github.com/apache/arrow/go/v14/arrow"
-       "github.com/apache/arrow/go/v14/arrow/array"
-       "github.com/apache/arrow/go/v14/arrow/memory"
+       "github.com/apache/arrow/go/v15/arrow"
+       "github.com/apache/arrow/go/v15/arrow/array"
+       "github.com/apache/arrow/go/v15/arrow/memory"
 )
 
 func maybePanic(fname string) {
diff --git a/go/adbc/driver/snowflake/connection.go 
b/go/adbc/driver/snowflake/connection.go
index e2f98487..681d9038 100644
--- a/go/adbc/driver/snowflake/connection.go
+++ b/go/adbc/driver/snowflake/connection.go
@@ -30,8 +30,8 @@ import (
 
        "github.com/apache/arrow-adbc/go/adbc"
        "github.com/apache/arrow-adbc/go/adbc/driver/internal"
-       "github.com/apache/arrow/go/v14/arrow"
-       "github.com/apache/arrow/go/v14/arrow/array"
+       "github.com/apache/arrow/go/v15/arrow"
+       "github.com/apache/arrow/go/v15/arrow/array"
        "github.com/snowflakedb/gosnowflake"
 )
 
diff --git a/go/adbc/driver/snowflake/driver.go 
b/go/adbc/driver/snowflake/driver.go
index 3b9d72cc..c70ce826 100644
--- a/go/adbc/driver/snowflake/driver.go
+++ b/go/adbc/driver/snowflake/driver.go
@@ -24,7 +24,7 @@ import (
 
        "github.com/apache/arrow-adbc/go/adbc"
        "github.com/apache/arrow-adbc/go/adbc/driver/driverbase"
-       "github.com/apache/arrow/go/v14/arrow/memory"
+       "github.com/apache/arrow/go/v15/arrow/memory"
        "github.com/snowflakedb/gosnowflake"
        "golang.org/x/exp/maps"
 )
diff --git a/go/adbc/driver/snowflake/driver_test.go 
b/go/adbc/driver/snowflake/driver_test.go
index a69a0b04..850fcd5b 100644
--- a/go/adbc/driver/snowflake/driver_test.go
+++ b/go/adbc/driver/snowflake/driver_test.go
@@ -37,10 +37,10 @@ import (
        "github.com/apache/arrow-adbc/go/adbc/driver/internal"
        driver "github.com/apache/arrow-adbc/go/adbc/driver/snowflake"
        "github.com/apache/arrow-adbc/go/adbc/validation"
-       "github.com/apache/arrow/go/v14/arrow"
-       "github.com/apache/arrow/go/v14/arrow/array"
-       "github.com/apache/arrow/go/v14/arrow/decimal128"
-       "github.com/apache/arrow/go/v14/arrow/memory"
+       "github.com/apache/arrow/go/v15/arrow"
+       "github.com/apache/arrow/go/v15/arrow/array"
+       "github.com/apache/arrow/go/v15/arrow/decimal128"
+       "github.com/apache/arrow/go/v15/arrow/memory"
        "github.com/google/uuid"
        "github.com/snowflakedb/gosnowflake"
        "github.com/stretchr/testify/require"
diff --git a/go/adbc/driver/snowflake/record_reader.go 
b/go/adbc/driver/snowflake/record_reader.go
index c77b578f..44057d4e 100644
--- a/go/adbc/driver/snowflake/record_reader.go
+++ b/go/adbc/driver/snowflake/record_reader.go
@@ -27,11 +27,11 @@ import (
        "time"
 
        "github.com/apache/arrow-adbc/go/adbc"
-       "github.com/apache/arrow/go/v14/arrow"
-       "github.com/apache/arrow/go/v14/arrow/array"
-       "github.com/apache/arrow/go/v14/arrow/compute"
-       "github.com/apache/arrow/go/v14/arrow/ipc"
-       "github.com/apache/arrow/go/v14/arrow/memory"
+       "github.com/apache/arrow/go/v15/arrow"
+       "github.com/apache/arrow/go/v15/arrow/array"
+       "github.com/apache/arrow/go/v15/arrow/compute"
+       "github.com/apache/arrow/go/v15/arrow/ipc"
+       "github.com/apache/arrow/go/v15/arrow/memory"
        "github.com/snowflakedb/gosnowflake"
        "golang.org/x/sync/errgroup"
 )
diff --git a/go/adbc/driver/snowflake/statement.go 
b/go/adbc/driver/snowflake/statement.go
index 57ac079d..edbaa826 100644
--- a/go/adbc/driver/snowflake/statement.go
+++ b/go/adbc/driver/snowflake/statement.go
@@ -25,9 +25,9 @@ import (
        "strings"
 
        "github.com/apache/arrow-adbc/go/adbc"
-       "github.com/apache/arrow/go/v14/arrow"
-       "github.com/apache/arrow/go/v14/arrow/array"
-       "github.com/apache/arrow/go/v14/arrow/memory"
+       "github.com/apache/arrow/go/v15/arrow"
+       "github.com/apache/arrow/go/v15/arrow/array"
+       "github.com/apache/arrow/go/v15/arrow/memory"
        "github.com/snowflakedb/gosnowflake"
        "golang.org/x/exp/constraints"
 )
diff --git a/go/adbc/drivermgr/wrapper.go b/go/adbc/drivermgr/wrapper.go
index 63fb9ee9..7542873c 100644
--- a/go/adbc/drivermgr/wrapper.go
+++ b/go/adbc/drivermgr/wrapper.go
@@ -43,9 +43,9 @@ import (
        "unsafe"
 
        "github.com/apache/arrow-adbc/go/adbc"
-       "github.com/apache/arrow/go/v14/arrow"
-       "github.com/apache/arrow/go/v14/arrow/array"
-       "github.com/apache/arrow/go/v14/arrow/cdata"
+       "github.com/apache/arrow/go/v15/arrow"
+       "github.com/apache/arrow/go/v15/arrow/array"
+       "github.com/apache/arrow/go/v15/arrow/cdata"
 )
 
 type option struct {
diff --git a/go/adbc/drivermgr/wrapper_sqlite_test.go 
b/go/adbc/drivermgr/wrapper_sqlite_test.go
index af307a08..9d8dd996 100644
--- a/go/adbc/drivermgr/wrapper_sqlite_test.go
+++ b/go/adbc/drivermgr/wrapper_sqlite_test.go
@@ -27,9 +27,9 @@ import (
 
        "github.com/apache/arrow-adbc/go/adbc"
        "github.com/apache/arrow-adbc/go/adbc/drivermgr"
-       "github.com/apache/arrow/go/v14/arrow"
-       "github.com/apache/arrow/go/v14/arrow/array"
-       "github.com/apache/arrow/go/v14/arrow/memory"
+       "github.com/apache/arrow/go/v15/arrow"
+       "github.com/apache/arrow/go/v15/arrow/array"
+       "github.com/apache/arrow/go/v15/arrow/memory"
        "github.com/stretchr/testify/assert"
        "github.com/stretchr/testify/require"
        "github.com/stretchr/testify/suite"
diff --git a/go/adbc/go.mod b/go/adbc/go.mod
index 2eff02d9..8db9d3cb 100644
--- a/go/adbc/go.mod
+++ b/go/adbc/go.mod
@@ -20,7 +20,7 @@ module github.com/apache/arrow-adbc/go/adbc
 go 1.19
 
 require (
-       github.com/apache/arrow/go/v14 v14.0.2
+       github.com/apache/arrow/go/v15 v15.0.0-20240119162530-143a7da1038c
        github.com/bluele/gcache v0.0.2
        github.com/golang/protobuf v1.5.3
        github.com/google/uuid v1.3.1
@@ -41,8 +41,7 @@ require (
        github.com/Azure/azure-sdk-for-go/sdk/internal v1.5.1 // indirect
        github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v1.2.1 // indirect
        github.com/JohnCGriffin/overflow v0.0.0-20211019200055-46fa312c352c // 
indirect
-       github.com/andybalholm/brotli v1.1.0 // indirect
-       github.com/apache/thrift v0.19.0 // indirect
+       github.com/apache/arrow/go/v14 v14.0.2 // indirect
        github.com/aws/aws-sdk-go-v2 v1.24.1 // indirect
        github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.5.4 // indirect
        github.com/aws/aws-sdk-go-v2/credentials v1.16.16 // indirect
@@ -64,17 +63,13 @@ require (
        github.com/gabriel-vasile/mimetype v1.4.3 // indirect
        github.com/goccy/go-json v0.10.2 // indirect
        github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2 // indirect
-       github.com/golang/snappy v0.0.4 // indirect
        github.com/google/flatbuffers v23.5.26+incompatible // indirect
        github.com/gsterjov/go-libsecret v0.0.0-20161001094733-a6f4afe4910c // 
indirect
        github.com/jmespath/go-jmespath v0.4.0 // indirect
        github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51 // 
indirect
-       github.com/klauspost/asmfmt v1.3.2 // indirect
        github.com/klauspost/compress v1.17.4 // indirect
        github.com/klauspost/cpuid/v2 v2.2.6 // indirect
        github.com/mattn/go-isatty v0.0.19 // indirect
-       github.com/minio/asm2plan9s v0.0.0-20200509001527-cdd76441f9d8 // 
indirect
-       github.com/minio/c2goasm v0.0.0-20190812172519-36a3d3bbc4f3 // indirect
        github.com/mtibben/percent v0.2.1 // indirect
        github.com/pierrec/lz4/v4 v4.1.21 // indirect
        github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c // indirect
diff --git a/go/adbc/go.sum b/go/adbc/go.sum
index e7de2181..679e46fe 100644
--- a/go/adbc/go.sum
+++ b/go/adbc/go.sum
@@ -13,12 +13,10 @@ github.com/Azure/azure-sdk-for-go/sdk/storage/azblob 
v1.2.1/go.mod h1:uwfk06ZBcv
 github.com/AzureAD/microsoft-authentication-library-for-go v1.1.1 
h1:WpB/QDNLpMw72xHJc34BNNykqSOeEJDAWkhf0u12/Jk=
 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.1.0 
h1:eLKJA0d02Lf0mVpIDgYnqXcUn0GqVmEFny3VuID1U3M=
-github.com/andybalholm/brotli v1.1.0/go.mod 
h1:sms7XGricyQI9K10gOSf56VKKWS4oLer58Q+mhRPtnY=
 github.com/apache/arrow/go/v14 v14.0.2 
h1:N8OkaJEOfI3mEZt07BIkvo4sC6XDbL+48MBPWO5IONw=
 github.com/apache/arrow/go/v14 v14.0.2/go.mod 
h1:u3fgh3EdgN/YQ8cVQRguVW3R+seMybFg8QBQ5LU+eBY=
-github.com/apache/thrift v0.19.0 
h1:sOqkWPzMj7w6XaYbJQG7m4sGqVolaW/0D28Ln7yPzMk=
-github.com/apache/thrift v0.19.0/go.mod 
h1:SUALL216IiaOw2Oy+5Vs9lboJ/t9g40C+G07Dc0QC1I=
+github.com/apache/arrow/go/v15 v15.0.0-20240119162530-143a7da1038c 
h1:tGuAIZ7IXzDnfeuOcfFUufeVvXlRTWBGyyv2A8E5mnI=
+github.com/apache/arrow/go/v15 v15.0.0-20240119162530-143a7da1038c/go.mod 
h1:DGXsR3ajT524njufqf95822i+KTh+yea1jass9YXgjA=
 github.com/aws/aws-sdk-go-v2 v1.24.1 
h1:xAojnj+ktS95YZlDf0zxWBkbFtymPeDP+rvUQIH3uAU=
 github.com/aws/aws-sdk-go-v2 v1.24.1/go.mod 
h1:LNh45Br1YAkEKaAqvmE1m8FUx6a5b/V0oAKV7of29b4=
 github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.5.4 
h1:OCs21ST2LrepDfD3lwlQiOqIGp6JiEUqG84GzTDoyJs=
@@ -75,8 +73,6 @@ github.com/golang-jwt/jwt/v5 v5.0.0 
h1:1n1XNM9hk7O9mnQoNBGolZvzebBQ7p93ULHRc28XJ
 github.com/golang/protobuf v1.5.0/go.mod 
h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
 github.com/golang/protobuf v1.5.3 
h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg=
 github.com/golang/protobuf v1.5.3/go.mod 
h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
-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 v23.5.26+incompatible 
h1:M9dgRyhJemaM4Sw8+66GHBu8ioaQmyPLg1b8VwK5WJg=
 github.com/google/flatbuffers v23.5.26+incompatible/go.mod 
h1:1AeVuKshWv4vARoZatz6mlQ0JxURH0Kv5+zNeJKJCa8=
 github.com/google/go-cmp v0.5.5/go.mod 
h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
@@ -92,8 +88,6 @@ github.com/jmespath/go-jmespath/internal/testify v1.5.1 
h1:shLQSRRSCCPj3f2gpwzGw
 github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod 
h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U=
 github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51 
h1:Z9n2FFNUXsshfwJMBgNA0RU6/i7WVaAegv3PtuIHPMs=
 github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51/go.mod 
h1:CzGEWj7cYgsdH8dAjBGEr58BoE7ScuLd+fwFZ44+/x8=
-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.17.4 
h1:Ej5ixsIri7BrIjBkRZLTo6ghwrEtHFk7ijlczPW4fZ4=
 github.com/klauspost/compress v1.17.4/go.mod 
h1:/dCuZOvVtNoHsyb+cuJD3itjs3NbnF6KH9zAO4BDxPM=
 github.com/klauspost/cpuid/v2 v2.2.6 
h1:ndNyv040zDGIDh8thGkXYjnFtiN02M1PVVF+JE/48xc=
@@ -106,10 +100,6 @@ github.com/kylelemons/godebug v1.1.0 
h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0
 github.com/mattn/go-isatty v0.0.19 
h1:JITubQf0MOLdlGRuRq+jtsDlekdYPia9ZFsB8h/APPA=
 github.com/mattn/go-isatty v0.0.19/go.mod 
h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
 github.com/mattn/go-sqlite3 v1.14.16 
h1:yOQRA0RpS5PFz/oikGwBEqvAWhWg5ufRz4ETLjwpU1Y=
-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/mtibben/percent v0.2.1 
h1:5gssi8Nqo8QU/r2pynCm+hBQHpkB/uNK7BJCFogWdzs=
 github.com/mtibben/percent v0.2.1/go.mod 
h1:KG9uO+SZkUp+VkRHsCdYQV3XSZrrSpR3O9ibNBTZrns=
 github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod 
h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno=
diff --git a/go/adbc/pkg/_tmpl/driver.go.tmpl b/go/adbc/pkg/_tmpl/driver.go.tmpl
index 901d164e..b712d762 100644
--- a/go/adbc/pkg/_tmpl/driver.go.tmpl
+++ b/go/adbc/pkg/_tmpl/driver.go.tmpl
@@ -58,10 +58,10 @@ import (
        "unsafe"
 
        "github.com/apache/arrow-adbc/go/adbc"
-       "github.com/apache/arrow/go/v14/arrow/array"
-       "github.com/apache/arrow/go/v14/arrow/cdata"
-       "github.com/apache/arrow/go/v14/arrow/memory"
-       "github.com/apache/arrow/go/v14/arrow/memory/mallocator"
+       "github.com/apache/arrow/go/v15/arrow/array"
+       "github.com/apache/arrow/go/v15/arrow/cdata"
+       "github.com/apache/arrow/go/v15/arrow/memory"
+       "github.com/apache/arrow/go/v15/arrow/memory/mallocator"
        "golang.org/x/exp/slog"
 )
 
diff --git a/go/adbc/pkg/flightsql/driver.go b/go/adbc/pkg/flightsql/driver.go
index d57a91b7..8699a1bc 100644
--- a/go/adbc/pkg/flightsql/driver.go
+++ b/go/adbc/pkg/flightsql/driver.go
@@ -61,10 +61,10 @@ import (
 
        "github.com/apache/arrow-adbc/go/adbc"
        "github.com/apache/arrow-adbc/go/adbc/driver/flightsql"
-       "github.com/apache/arrow/go/v14/arrow/array"
-       "github.com/apache/arrow/go/v14/arrow/cdata"
-       "github.com/apache/arrow/go/v14/arrow/memory"
-       "github.com/apache/arrow/go/v14/arrow/memory/mallocator"
+       "github.com/apache/arrow/go/v15/arrow/array"
+       "github.com/apache/arrow/go/v15/arrow/cdata"
+       "github.com/apache/arrow/go/v15/arrow/memory"
+       "github.com/apache/arrow/go/v15/arrow/memory/mallocator"
        "golang.org/x/exp/slog"
 )
 
diff --git a/go/adbc/pkg/panicdummy/driver.go b/go/adbc/pkg/panicdummy/driver.go
index fbaa5204..d855e915 100644
--- a/go/adbc/pkg/panicdummy/driver.go
+++ b/go/adbc/pkg/panicdummy/driver.go
@@ -61,10 +61,10 @@ import (
 
        "github.com/apache/arrow-adbc/go/adbc"
        "github.com/apache/arrow-adbc/go/adbc/driver/panicdummy"
-       "github.com/apache/arrow/go/v14/arrow/array"
-       "github.com/apache/arrow/go/v14/arrow/cdata"
-       "github.com/apache/arrow/go/v14/arrow/memory"
-       "github.com/apache/arrow/go/v14/arrow/memory/mallocator"
+       "github.com/apache/arrow/go/v15/arrow/array"
+       "github.com/apache/arrow/go/v15/arrow/cdata"
+       "github.com/apache/arrow/go/v15/arrow/memory"
+       "github.com/apache/arrow/go/v15/arrow/memory/mallocator"
        "golang.org/x/exp/slog"
 )
 
diff --git a/go/adbc/pkg/snowflake/driver.go b/go/adbc/pkg/snowflake/driver.go
index 6e2d3bac..c4e38c27 100644
--- a/go/adbc/pkg/snowflake/driver.go
+++ b/go/adbc/pkg/snowflake/driver.go
@@ -61,10 +61,10 @@ import (
 
        "github.com/apache/arrow-adbc/go/adbc"
        "github.com/apache/arrow-adbc/go/adbc/driver/snowflake"
-       "github.com/apache/arrow/go/v14/arrow/array"
-       "github.com/apache/arrow/go/v14/arrow/cdata"
-       "github.com/apache/arrow/go/v14/arrow/memory"
-       "github.com/apache/arrow/go/v14/arrow/memory/mallocator"
+       "github.com/apache/arrow/go/v15/arrow/array"
+       "github.com/apache/arrow/go/v15/arrow/cdata"
+       "github.com/apache/arrow/go/v15/arrow/memory"
+       "github.com/apache/arrow/go/v15/arrow/memory/mallocator"
        "golang.org/x/exp/slog"
 )
 
diff --git a/go/adbc/sqldriver/driver.go b/go/adbc/sqldriver/driver.go
index 775f3f78..abc84041 100644
--- a/go/adbc/sqldriver/driver.go
+++ b/go/adbc/sqldriver/driver.go
@@ -31,11 +31,11 @@ import (
        "unsafe"
 
        "github.com/apache/arrow-adbc/go/adbc"
-       "github.com/apache/arrow/go/v14/arrow"
-       "github.com/apache/arrow/go/v14/arrow/array"
-       "github.com/apache/arrow/go/v14/arrow/decimal128"
-       "github.com/apache/arrow/go/v14/arrow/decimal256"
-       "github.com/apache/arrow/go/v14/arrow/memory"
+       "github.com/apache/arrow/go/v15/arrow"
+       "github.com/apache/arrow/go/v15/arrow/array"
+       "github.com/apache/arrow/go/v15/arrow/decimal128"
+       "github.com/apache/arrow/go/v15/arrow/decimal256"
+       "github.com/apache/arrow/go/v15/arrow/memory"
 )
 
 func getIsolationlevel(lvl sql.IsolationLevel) adbc.OptionIsolationLevel {
diff --git a/go/adbc/sqldriver/driver_internals_test.go 
b/go/adbc/sqldriver/driver_internals_test.go
index 9981a40d..c7418b69 100644
--- a/go/adbc/sqldriver/driver_internals_test.go
+++ b/go/adbc/sqldriver/driver_internals_test.go
@@ -26,11 +26,11 @@ import (
        "time"
 
        "github.com/apache/arrow-adbc/go/adbc"
-       "github.com/apache/arrow/go/v14/arrow"
-       "github.com/apache/arrow/go/v14/arrow/array"
-       "github.com/apache/arrow/go/v14/arrow/decimal128"
-       "github.com/apache/arrow/go/v14/arrow/decimal256"
-       "github.com/apache/arrow/go/v14/arrow/memory"
+       "github.com/apache/arrow/go/v15/arrow"
+       "github.com/apache/arrow/go/v15/arrow/array"
+       "github.com/apache/arrow/go/v15/arrow/decimal128"
+       "github.com/apache/arrow/go/v15/arrow/decimal256"
+       "github.com/apache/arrow/go/v15/arrow/memory"
        "github.com/stretchr/testify/assert"
        "github.com/stretchr/testify/require"
 )
diff --git a/go/adbc/sqldriver/flightsql/flightsql.go 
b/go/adbc/sqldriver/flightsql/flightsql.go
index 6ad00e9c..23425fbe 100644
--- a/go/adbc/sqldriver/flightsql/flightsql.go
+++ b/go/adbc/sqldriver/flightsql/flightsql.go
@@ -22,7 +22,7 @@ import (
 
        "github.com/apache/arrow-adbc/go/adbc/driver/flightsql"
        "github.com/apache/arrow-adbc/go/adbc/sqldriver"
-       "github.com/apache/arrow/go/v14/arrow/memory"
+       "github.com/apache/arrow/go/v15/arrow/memory"
 )
 
 func init() {
diff --git a/go/adbc/sqldriver/flightsql/flightsql_test.go 
b/go/adbc/sqldriver/flightsql/flightsql_test.go
index 7d0b86b2..4c0b7f68 100644
--- a/go/adbc/sqldriver/flightsql/flightsql_test.go
+++ b/go/adbc/sqldriver/flightsql/flightsql_test.go
@@ -23,10 +23,10 @@ import (
        "testing"
 
        _ "github.com/apache/arrow-adbc/go/adbc/sqldriver/flightsql"
-       "github.com/apache/arrow/go/v14/arrow/flight"
-       "github.com/apache/arrow/go/v14/arrow/flight/flightsql"
-       "github.com/apache/arrow/go/v14/arrow/flight/flightsql/example"
-       "github.com/apache/arrow/go/v14/arrow/memory"
+       "github.com/apache/arrow/go/v15/arrow/flight"
+       "github.com/apache/arrow/go/v15/arrow/flight/flightsql"
+       "github.com/apache/arrow/go/v15/arrow/flight/flightsql/example"
+       "github.com/apache/arrow/go/v15/arrow/memory"
        "github.com/stretchr/testify/suite"
        "google.golang.org/grpc"
 )
diff --git a/go/adbc/standard_schemas.go b/go/adbc/standard_schemas.go
index 264f7614..a441ae0f 100644
--- a/go/adbc/standard_schemas.go
+++ b/go/adbc/standard_schemas.go
@@ -17,7 +17,7 @@
 
 package adbc
 
-import "github.com/apache/arrow/go/v14/arrow"
+import "github.com/apache/arrow/go/v15/arrow"
 
 var (
        GetInfoSchema = arrow.NewSchema([]arrow.Field{
diff --git a/go/adbc/utils/utils.go b/go/adbc/utils/utils.go
index e1c372c3..4dd69216 100644
--- a/go/adbc/utils/utils.go
+++ b/go/adbc/utils/utils.go
@@ -17,7 +17,7 @@
 
 package utils
 
-import "github.com/apache/arrow/go/v14/arrow"
+import "github.com/apache/arrow/go/v15/arrow"
 
 func RemoveSchemaMetadata(schema *arrow.Schema) *arrow.Schema {
        fields := make([]arrow.Field, len(schema.Fields()))
diff --git a/go/adbc/validation/validation.go b/go/adbc/validation/validation.go
index 19222807..c67f8a0d 100644
--- a/go/adbc/validation/validation.go
+++ b/go/adbc/validation/validation.go
@@ -28,9 +28,9 @@ import (
 
        "github.com/apache/arrow-adbc/go/adbc"
        "github.com/apache/arrow-adbc/go/adbc/utils"
-       "github.com/apache/arrow/go/v14/arrow"
-       "github.com/apache/arrow/go/v14/arrow/array"
-       "github.com/apache/arrow/go/v14/arrow/memory"
+       "github.com/apache/arrow/go/v15/arrow"
+       "github.com/apache/arrow/go/v15/arrow/array"
+       "github.com/apache/arrow/go/v15/arrow/memory"
        "github.com/stretchr/testify/suite"
 )
 
diff --git a/r/adbcsnowflake/tools/create-go-vendor-archive.R 
b/r/adbcsnowflake/tools/create-go-vendor-archive.R
index a9045b05..aa8ba795 100644
--- a/r/adbcsnowflake/tools/create-go-vendor-archive.R
+++ b/r/adbcsnowflake/tools/create-go-vendor-archive.R
@@ -41,7 +41,7 @@ withr::with_dir("src/go/adbc", {
       "arrow-go-v14.0.2/go/arrow/cdata/arrow"
     )
 
-    dst_go_arrow_cdata_dir <- 
"vendor/github.com/apache/arrow/go/v14/arrow/cdata/"
+    dst_go_arrow_cdata_dir <- 
"vendor/github.com/apache/arrow/go/v15/arrow/cdata/"
     stopifnot(file.copy(src_go_arrow_cdata_arrow_dir, dst_go_arrow_cdata_dir, 
recursive = TRUE))
   })
 

Reply via email to