diff --git a/.gitattributes b/.gitattributes index c4d02d4c4f..f1efc73113 100644 --- a/.gitattributes +++ b/.gitattributes @@ -18,6 +18,9 @@ c/vendor/* linguist-vendored go/adbc/drivermgr/adbc.h linguist-vendored go/adbc/drivermgr/adbc_driver_manager.cc linguist-vendored +go/adbc/pkg/flightsql/* linguist-generated +go/adbc/pkg/panicdummy/* linguist-generated +go/adbc/pkg/snowflake/* linguist-generated python/adbc_driver_flightsql/adbc_driver_flightsql/_static_version.py export-subst python/adbc_driver_manager/adbc_driver_manager/_static_version.py export-subst python/adbc_driver_postgresql/adbc_driver_postgresql/_static_version.py export-subst diff --git a/.github/workflows/native-unix.yml b/.github/workflows/native-unix.yml index 62498bafce..2582cb1ca7 100644 --- a/.github/workflows/native-unix.yml +++ b/.github/workflows/native-unix.yml @@ -302,7 +302,7 @@ jobs: persist-credentials: false - uses: actions/setup-go@v3 with: - go-version-file: 'go/adbc/go.mod' + go-version: 1.20.7 check-latest: true cache: true cache-dependency-path: go/adbc/go.sum diff --git a/c/driver_manager/adbc_driver_manager.cc b/c/driver_manager/adbc_driver_manager.cc index 0007b1df05..0840224e81 100644 --- a/c/driver_manager/adbc_driver_manager.cc +++ b/c/driver_manager/adbc_driver_manager.cc @@ -20,6 +20,7 @@ #include #include +#include #include #include #include @@ -600,7 +601,7 @@ std::string AdbcDriverManagerDefaultEntrypoint(const std::string& driver) { // if pos == npos this is the entire filename std::string token = filename.substr(prev, pos - prev); // capitalize first letter - token[0] = std::toupper(token[0]); + token[0] = std::toupper(static_cast(token[0])); entrypoint += token; diff --git a/ci/scripts/python_wheel_unix_build.sh b/ci/scripts/python_wheel_unix_build.sh index 3eea17f5c5..fa614bfded 100755 --- a/ci/scripts/python_wheel_unix_build.sh +++ b/ci/scripts/python_wheel_unix_build.sh @@ -35,7 +35,7 @@ function check_visibility { # Filter out Arrow symbols and see if anything remains. # '_init' and '_fini' symbols may or not be present, we don't care. # (note we must ignore the grep exit status when no match is found) - grep ' T ' nm_arrow.log | grep -v -E '(Adbc|\b_init\b|\b_fini\b)' | cat - > visible_symbols.log + grep ' T ' nm_arrow.log | grep -v -E '(Adbc|DriverInit|\b_init\b|\b_fini\b)' | cat - > visible_symbols.log if [[ -f visible_symbols.log && `cat visible_symbols.log | wc -l` -eq 0 ]]; then return 0 diff --git a/go/adbc/driver/flightsql/flightsql_adbc.go b/go/adbc/driver/flightsql/flightsql_adbc.go index 03d24e2f1d..f527573987 100644 --- a/go/adbc/driver/flightsql/flightsql_adbc.go +++ b/go/adbc/driver/flightsql/flightsql_adbc.go @@ -1162,10 +1162,8 @@ func (c *cnxn) GetInfo(ctx context.Context, infoCodes []adbc.InfoCode) (array.Re } } - if rdr.Err() != nil { - return nil, adbcFromFlightStatusWithDetails(rdr.Err(), header, trailer, "GetInfo(DoGet): endpoint %d: %s", i, endpoint.Location) - } else if ctx.Err() != nil { - return nil, adbcFromFlightStatusWithDetails(context.Cause(ctx), header, trailer, "GetInfo(DoGet): endpoint %d: %s", i, endpoint.Location) + if err := checkContext(rdr.Err(), ctx); err != nil { + return nil, adbcFromFlightStatusWithDetails(err, header, trailer, "GetInfo(DoGet): endpoint %d: %s", i, endpoint.Location) } } } else if grpcstatus.Code(err) != grpccodes.Unimplemented { @@ -1303,12 +1301,9 @@ func (c *cnxn) GetObjects(ctx context.Context, depth adbc.ObjectDepth, catalog * g.AppendCatalog("") } - if err = rdr.Err(); err != nil { + if err := checkContext(rdr.Err(), ctx); err != nil { return nil, adbcFromFlightStatusWithDetails(err, header, trailer, "GetObjects(GetCatalogs)") - } else if ctx.Err() != nil { - return nil, adbcFromFlightStatusWithDetails(context.Cause(ctx), header, trailer, "GetObjects(GetCatalogs)") } - return g.Finish() } @@ -1366,11 +1361,8 @@ func (c *cnxn) getObjectsDbSchemas(ctx context.Context, depth adbc.ObjectDepth, } } - if rdr.Err() != nil { - result = nil - err = adbcFromFlightStatusWithDetails(rdr.Err(), header, trailer, "GetObjects(GetDBSchemas)") - } else if ctx.Err() != nil { - return nil, adbcFromFlightStatusWithDetails(context.Cause(ctx), header, trailer, "GetObjects(GetCatalogs)") + if err := checkContext(rdr.Err(), ctx); err != nil { + return nil, adbcFromFlightStatusWithDetails(err, header, trailer, "GetObjects(GetCatalogs)") } return } @@ -1449,12 +1441,8 @@ func (c *cnxn) getObjectsTables(ctx context.Context, depth adbc.ObjectDepth, cat } } - if rdr.Err() != nil { - result = nil - err = adbcFromFlightStatusWithDetails(rdr.Err(), header, trailer, "GetObjects(GetTables)") - } else if ctx.Err() != nil { - result = nil - err = adbcFromFlightStatusWithDetails(context.Cause(ctx), header, trailer, "GetObjects(GetTables)") + if err := checkContext(rdr.Err(), ctx); err != nil { + return nil, adbcFromFlightStatusWithDetails(err, header, trailer, "GetObjects(GetTables)") } return } diff --git a/go/adbc/driver/flightsql/record_reader.go b/go/adbc/driver/flightsql/record_reader.go index 9014be75c9..e505895c42 100644 --- a/go/adbc/driver/flightsql/record_reader.go +++ b/go/adbc/driver/flightsql/record_reader.go @@ -108,10 +108,8 @@ func newRecordReader(ctx context.Context, alloc memory.Allocator, cl *flightsql. rec.Retain() ch <- rec } - if rdr.Err() != nil { - return adbcFromFlightStatusWithDetails(rdr.Err(), header, trailer, "DoGet: endpoint 0: remote: %s", firstEndpoint.Location) - } else if ctx.Err() != nil { - return adbcFromFlightStatusWithDetails(context.Cause(ctx), header, trailer, "DoGet: endpoint 0: remote: %s", firstEndpoint.Location) + if err := checkContext(rdr.Err(), ctx); err != nil { + return adbcFromFlightStatusWithDetails(err, header, trailer, "DoGet: endpoint 0: remote: %s", firstEndpoint.Location) } return nil }) @@ -159,10 +157,8 @@ func newRecordReader(ctx context.Context, alloc memory.Allocator, cl *flightsql. chs[endpointIndex] <- rec } - if rdr.Err() != nil { - return adbcFromFlightStatusWithDetails(rdr.Err(), header, trailer, "DoGet: endpoint %d: %s", endpointIndex, endpoint.Location) - } else if ctx.Err() != nil { - return adbcFromFlightStatusWithDetails(context.Cause(ctx), header, trailer, "DoGet: endpoint %d: %s", endpointIndex, endpoint.Location) + if err := checkContext(rdr.Err(), ctx); err != nil { + return adbcFromFlightStatusWithDetails(err, header, trailer, "DoGet: endpoint %d: %s", endpointIndex, endpoint.Location) } return nil }) diff --git a/go/adbc/driver/flightsql/utils.go b/go/adbc/driver/flightsql/utils.go index 62d0b4ce3c..d0d1af850c 100644 --- a/go/adbc/driver/flightsql/utils.go +++ b/go/adbc/driver/flightsql/utils.go @@ -18,6 +18,7 @@ package flightsql import ( + "context" "fmt" "github.com/apache/arrow-adbc/go/adbc" @@ -123,3 +124,14 @@ func adbcFromFlightStatusWithDetails(err error, header, trailer metadata.MD, con Details: details, } } + +func checkContext(maybeErr error, ctx context.Context) error { + if maybeErr != nil { + return maybeErr + } else if ctx.Err() == context.Canceled { + return adbc.Error{Msg: "Cancelled by request", Code: adbc.StatusCancelled} + } else if ctx.Err() == context.DeadlineExceeded { + return adbc.Error{Msg: "Deadline exceeded", Code: adbc.StatusTimeout} + } + return ctx.Err() +} diff --git a/go/adbc/drivermgr/adbc_driver_manager.cc b/go/adbc/drivermgr/adbc_driver_manager.cc index 0007b1df05..0840224e81 100644 --- a/go/adbc/drivermgr/adbc_driver_manager.cc +++ b/go/adbc/drivermgr/adbc_driver_manager.cc @@ -20,6 +20,7 @@ #include #include +#include #include #include #include @@ -600,7 +601,7 @@ std::string AdbcDriverManagerDefaultEntrypoint(const std::string& driver) { // if pos == npos this is the entire filename std::string token = filename.substr(prev, pos - prev); // capitalize first letter - token[0] = std::toupper(token[0]); + token[0] = std::toupper(static_cast(token[0])); entrypoint += token; diff --git a/go/adbc/go.mod b/go/adbc/go.mod index d46fe8b91b..f3d5ce0620 100644 --- a/go/adbc/go.mod +++ b/go/adbc/go.mod @@ -17,7 +17,7 @@ module github.com/apache/arrow-adbc/go/adbc -go 1.20 +go 1.18 require ( github.com/apache/arrow/go/v13 v13.0.0-20230713180941-b97597765355 diff --git a/go/adbc/pkg/_tmpl/driver.go.tmpl b/go/adbc/pkg/_tmpl/driver.go.tmpl index 879f01d5a6..b849a0faa8 100644 --- a/go/adbc/pkg/_tmpl/driver.go.tmpl +++ b/go/adbc/pkg/_tmpl/driver.go.tmpl @@ -201,18 +201,18 @@ func exportBytesOption(val []byte, out *C.uint8_t, length *C.size_t) C.AdbcStatu type cancellableContext struct { ctx context.Context - cancel context.CancelCauseFunc + cancel context.CancelFunc } func (c *cancellableContext) newContext() context.Context { c.cancelContext() - c.ctx, c.cancel = context.WithCancelCause(context.Background()) + c.ctx, c.cancel = context.WithCancel(context.Background()) return c.ctx } func (c *cancellableContext) cancelContext() { if c.cancel != nil { - c.cancel(adbc.Error{Msg: "Cancelled by request", Code: adbc.StatusCancelled}) + c.cancel() } c.ctx = nil c.cancel = nil diff --git a/go/adbc/pkg/flightsql/driver.go b/go/adbc/pkg/flightsql/driver.go index ba2bb6ec12..b11393cf69 100644 --- a/go/adbc/pkg/flightsql/driver.go +++ b/go/adbc/pkg/flightsql/driver.go @@ -205,18 +205,18 @@ func exportBytesOption(val []byte, out *C.uint8_t, length *C.size_t) C.AdbcStatu type cancellableContext struct { ctx context.Context - cancel context.CancelCauseFunc + cancel context.CancelFunc } func (c *cancellableContext) newContext() context.Context { c.cancelContext() - c.ctx, c.cancel = context.WithCancelCause(context.Background()) + c.ctx, c.cancel = context.WithCancel(context.Background()) return c.ctx } func (c *cancellableContext) cancelContext() { if c.cancel != nil { - c.cancel(adbc.Error{Msg: "Cancelled by request", Code: adbc.StatusCancelled}) + c.cancel() } c.ctx = nil c.cancel = nil diff --git a/go/adbc/pkg/panicdummy/driver.go b/go/adbc/pkg/panicdummy/driver.go index dc3c4c3076..b8c3959644 100644 --- a/go/adbc/pkg/panicdummy/driver.go +++ b/go/adbc/pkg/panicdummy/driver.go @@ -205,18 +205,18 @@ func exportBytesOption(val []byte, out *C.uint8_t, length *C.size_t) C.AdbcStatu type cancellableContext struct { ctx context.Context - cancel context.CancelCauseFunc + cancel context.CancelFunc } func (c *cancellableContext) newContext() context.Context { c.cancelContext() - c.ctx, c.cancel = context.WithCancelCause(context.Background()) + c.ctx, c.cancel = context.WithCancel(context.Background()) return c.ctx } func (c *cancellableContext) cancelContext() { if c.cancel != nil { - c.cancel(adbc.Error{Msg: "Cancelled by request", Code: adbc.StatusCancelled}) + c.cancel() } c.ctx = nil c.cancel = nil diff --git a/go/adbc/pkg/snowflake/driver.go b/go/adbc/pkg/snowflake/driver.go index 11ba205c6e..8226d93134 100644 --- a/go/adbc/pkg/snowflake/driver.go +++ b/go/adbc/pkg/snowflake/driver.go @@ -205,18 +205,18 @@ func exportBytesOption(val []byte, out *C.uint8_t, length *C.size_t) C.AdbcStatu type cancellableContext struct { ctx context.Context - cancel context.CancelCauseFunc + cancel context.CancelFunc } func (c *cancellableContext) newContext() context.Context { c.cancelContext() - c.ctx, c.cancel = context.WithCancelCause(context.Background()) + c.ctx, c.cancel = context.WithCancel(context.Background()) return c.ctx } func (c *cancellableContext) cancelContext() { if c.cancel != nil { - c.cancel(adbc.Error{Msg: "Cancelled by request", Code: adbc.StatusCancelled}) + c.cancel() } c.ctx = nil c.cancel = nil diff --git a/python/adbc_driver_manager/MANIFEST.in b/python/adbc_driver_manager/MANIFEST.in index fe98528271..306c31144f 100644 --- a/python/adbc_driver_manager/MANIFEST.in +++ b/python/adbc_driver_manager/MANIFEST.in @@ -22,4 +22,7 @@ include NOTICE.txt include adbc_driver_manager/adbc.h include adbc_driver_manager/adbc_driver_manager.cc include adbc_driver_manager/adbc_driver_manager.h +include adbc_driver_manager/_lib.pxd +include adbc_driver_manager/_lib.pyi +include adbc_driver_manager/_reader.pyi include adbc_driver_manager/py.typed