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
}