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 60ed12a  fix(go/adbc/driver/flightsql): bind ExecuteUpdate, BindStream 
(#367)
60ed12a is described below

commit 60ed12aa69122c46b4cd8bc9244aa5a31da11e95
Author: David Li <[email protected]>
AuthorDate: Mon Jan 23 08:35:59 2023 -0500

    fix(go/adbc/driver/flightsql): bind ExecuteUpdate, BindStream (#367)
---
 go/adbc/driver/flightsql/flightsql_statement.go | 10 ++++++---
 go/adbc/driver/flightsql/utils.go               |  2 ++
 go/adbc/go.mod                                  |  2 +-
 go/adbc/go.sum                                  |  2 ++
 go/adbc/pkg/_tmpl/driver.go.tmpl                | 29 +++++++++++++++++--------
 go/adbc/pkg/flightsql/driver.go                 | 29 +++++++++++++++++--------
 6 files changed, 52 insertions(+), 22 deletions(-)

diff --git a/go/adbc/driver/flightsql/flightsql_statement.go 
b/go/adbc/driver/flightsql/flightsql_statement.go
index 94486f2..8d26df2 100644
--- a/go/adbc/driver/flightsql/flightsql_statement.go
+++ b/go/adbc/driver/flightsql/flightsql_statement.go
@@ -194,10 +194,14 @@ func (s *statement) Bind(_ context.Context, values 
arrow.Record) error {
 // The driver will call Release on the record reader, but may not do this
 // until Close is called.
 func (s *statement) BindStream(ctx context.Context, stream array.RecordReader) 
error {
-       return adbc.Error{
-               Msg:  "[Flight SQL Statement] BindStream not yet implemented",
-               Code: adbc.StatusNotImplemented,
+       if s.prepared == nil {
+               return adbc.Error{
+                       Msg:  "[Flight SQL Statement] must call Prepare before 
calling Bind",
+                       Code: adbc.StatusInvalidState}
        }
+
+       s.prepared.SetRecordReader(stream)
+       return nil
 }
 
 // GetParameterSchema returns an Arrow schema representation of
diff --git a/go/adbc/driver/flightsql/utils.go 
b/go/adbc/driver/flightsql/utils.go
index d855fe5..a8b5eeb 100644
--- a/go/adbc/driver/flightsql/utils.go
+++ b/go/adbc/driver/flightsql/utils.go
@@ -44,6 +44,8 @@ func adbcFromFlightStatus(err error) error {
                adbcCode = adbc.StatusUnauthenticated
        case codes.Unavailable:
                adbcCode = adbc.StatusIO
+       case codes.Unimplemented:
+               adbcCode = adbc.StatusNotImplemented
        case codes.PermissionDenied:
                adbcCode = adbc.StatusUnauthorized
        default:
diff --git a/go/adbc/go.mod b/go/adbc/go.mod
index 751c652..094db7b 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.18
 
 require (
-       github.com/apache/arrow/go/v11 v11.0.0-20230119180814-bf8780d0ff79
+       github.com/apache/arrow/go/v11 v11.0.0-20230120215317-f7aa50dbeccd
        github.com/bluele/gcache v0.0.2
        github.com/stretchr/testify v1.8.0
        golang.org/x/exp v0.0.0-20220827204233-334a2380cb91
diff --git a/go/adbc/go.sum b/go/adbc/go.sum
index db9c49b..f462d2c 100644
--- a/go/adbc/go.sum
+++ b/go/adbc/go.sum
@@ -5,6 +5,8 @@ github.com/andybalholm/brotli v1.0.4 
h1:V7DdXeJtZscaqfNuAdSRuRFzuiKlHSC/Zh3zl9qY
 github.com/andybalholm/brotli v1.0.4/go.mod 
h1:fO7iG3H7G2nSZ7m0zPUDn85XEX2GTukHGRSepvi9Eig=
 github.com/apache/arrow/go/v11 v11.0.0-20230119180814-bf8780d0ff79 
h1:KGZHC3moCZssyuDkcY02ldssfWNMdbomjNYOCxKwY/Y=
 github.com/apache/arrow/go/v11 v11.0.0-20230119180814-bf8780d0ff79/go.mod 
h1:Eg5OsL5H+e299f7u5ssuXsuHQVEGC4xei5aX110hRiI=
+github.com/apache/arrow/go/v11 v11.0.0-20230120215317-f7aa50dbeccd 
h1:r8ofoR0ijMZ44ATCWSkkX7W/L7dn+oIe015O0x3VaEA=
+github.com/apache/arrow/go/v11 v11.0.0-20230120215317-f7aa50dbeccd/go.mod 
h1:Eg5OsL5H+e299f7u5ssuXsuHQVEGC4xei5aX110hRiI=
 github.com/apache/thrift v0.16.0 
h1:qEy6UW60iVOlUy+b9ZR0d5WzUWYGOo4HfopoyBaNmoY=
 github.com/apache/thrift v0.16.0/go.mod 
h1:PHK3hniurgQaNMZYaCLEqXKsYK8upmhPbmdP2FXSqgU=
 github.com/bluele/gcache v0.0.2 h1:WcbfdXICg7G/DGBh1PFfcirkWOQV+v077yF1pSy3DGw=
diff --git a/go/adbc/pkg/_tmpl/driver.go.tmpl b/go/adbc/pkg/_tmpl/driver.go.tmpl
index 67e592c..c751edc 100644
--- a/go/adbc/pkg/_tmpl/driver.go.tmpl
+++ b/go/adbc/pkg/_tmpl/driver.go.tmpl
@@ -495,16 +495,27 @@ func {{.Prefix}}StatementExecuteQuery(stmt 
*C.struct_AdbcStatement, out *C.struc
                return C.ADBC_STATUS_INVALID_STATE
        }
 
-       rdr, n, e := st.ExecuteQuery(context.Background())
-       if e != nil {
-               return C.AdbcStatusCode(errToAdbcErr(err, e))
-       }
-
-       if affected != nil {
-               *affected = C.int64_t(n)
+       if out == nil {
+               n, e := st.ExecuteUpdate(context.Background())
+               if e != nil {
+                       return C.AdbcStatusCode(errToAdbcErr(err, e))
+               }
+
+               if affected != nil {
+                       *affected = C.int64_t(n)
+               }
+       } else {
+               rdr, n, e := st.ExecuteQuery(context.Background())
+               if e != nil {
+                       return C.AdbcStatusCode(errToAdbcErr(err, e))
+               }
+
+               if affected != nil {
+                       *affected = C.int64_t(n)
+               }
+
+               cdata.ExportRecordReader(rdr, toCdataStream(out))
        }
-
-       cdata.ExportRecordReader(rdr, toCdataStream(out))
        return C.ADBC_STATUS_OK
 }
 
diff --git a/go/adbc/pkg/flightsql/driver.go b/go/adbc/pkg/flightsql/driver.go
index ac5b399..631b434 100644
--- a/go/adbc/pkg/flightsql/driver.go
+++ b/go/adbc/pkg/flightsql/driver.go
@@ -498,16 +498,27 @@ func FlightSQLStatementExecuteQuery(stmt 
*C.struct_AdbcStatement, out *C.struct_
                return C.ADBC_STATUS_INVALID_STATE
        }
 
-       rdr, n, e := st.ExecuteQuery(context.Background())
-       if e != nil {
-               return C.AdbcStatusCode(errToAdbcErr(err, e))
-       }
-
-       if affected != nil {
-               *affected = C.int64_t(n)
+       if out == nil {
+               n, e := st.ExecuteUpdate(context.Background())
+               if e != nil {
+                       return C.AdbcStatusCode(errToAdbcErr(err, e))
+               }
+
+               if affected != nil {
+                       *affected = C.int64_t(n)
+               }
+       } else {
+               rdr, n, e := st.ExecuteQuery(context.Background())
+               if e != nil {
+                       return C.AdbcStatusCode(errToAdbcErr(err, e))
+               }
+
+               if affected != nil {
+                       *affected = C.int64_t(n)
+               }
+
+               cdata.ExportRecordReader(rdr, toCdataStream(out))
        }
-
-       cdata.ExportRecordReader(rdr, toCdataStream(out))
        return C.ADBC_STATUS_OK
 }
 

Reply via email to