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 8015c993d7 feat(go/adbc/drivermgr): support ExecuteSchema (#4975)
8015c993d7 is described below

commit 8015c993d7c951b65f1ec0edef1b07bddeb54b2d
Author: Matt Topol <[email protected]>
AuthorDate: Wed Oct 28 23:20:26 2026 +0000

    feat(go/adbc/drivermgr): support ExecuteSchema (#4975)
    
    Implement `adbc.StatementExecuteSchema` in the Go driver manager
    wrapper. A driver that doesn't support it returns
    `StatusNotImplemented`.
---
 go/adbc/drivermgr/wrapper.go             | 16 ++++++++++++++++
 go/adbc/drivermgr/wrapper_sqlite_test.go | 15 +++++++++++++++
 2 files changed, 31 insertions(+)

diff --git a/go/adbc/drivermgr/wrapper.go b/go/adbc/drivermgr/wrapper.go
index 596439d246..2bbe1eaba7 100644
--- a/go/adbc/drivermgr/wrapper.go
+++ b/go/adbc/drivermgr/wrapper.go
@@ -501,6 +501,8 @@ type stmt struct {
        st *C.struct_AdbcStatement
 }
 
+var _ adbc.StatementExecuteSchema = (*stmt)(nil)
+
 func (s *stmt) Close() error {
        var err C.struct_AdbcError
        if code := adbc.Status(C.AdbcStatementRelease(s.st, &err)); code != 
adbc.StatusOK {
@@ -561,6 +563,20 @@ func (s *stmt) ExecuteUpdate(context.Context) (int64, 
error) {
        return int64(nrows), nil
 }
 
+func (s *stmt) ExecuteSchema(_ context.Context) (*arrow.Schema, error) {
+       var (
+               schema C.struct_ArrowSchema
+               err    C.struct_AdbcError
+       )
+       if code := adbc.Status(C.AdbcStatementExecuteSchema(s.st, &schema, 
&err)); code != adbc.StatusOK {
+               if schema.release != nil {
+                       
cdata.ReleaseCArrowSchema((*cdata.CArrowSchema)(unsafe.Pointer(&schema)))
+               }
+               return nil, toAdbcError(code, &err)
+       }
+       return getSchema(&schema)
+}
+
 func (s *stmt) Prepare(context.Context) error {
        var err C.struct_AdbcError
        if code := adbc.Status(C.AdbcStatementPrepare(s.st, &err)); code != 
adbc.StatusOK {
diff --git a/go/adbc/drivermgr/wrapper_sqlite_test.go 
b/go/adbc/drivermgr/wrapper_sqlite_test.go
index 253de89cee..5f926fb8ff 100644
--- a/go/adbc/drivermgr/wrapper_sqlite_test.go
+++ b/go/adbc/drivermgr/wrapper_sqlite_test.go
@@ -477,6 +477,21 @@ func (dm *DriverMgrSuite) TestSqlExecute() {
        dm.False(rdr.Next())
 }
 
+func (dm *DriverMgrSuite) TestSqlExecuteSchemaNotImplemented() {
+       st, err := dm.conn.NewStatement()
+       dm.Require().NoError(err)
+       defer validation.CheckedClose(dm.T(), st)
+       dm.Require().NoError(st.SetSqlQuery("SELECT 1"))
+
+       executor, ok := st.(adbc.StatementExecuteSchema)
+       dm.Require().True(ok)
+       schema, err := executor.ExecuteSchema(dm.ctx)
+       dm.Nil(schema)
+       var adbcErr adbc.Error
+       dm.Require().ErrorAs(err, &adbcErr)
+       dm.Equal(adbc.StatusNotImplemented, adbcErr.Code)
+}
+
 func (dm *DriverMgrSuite) TestSqlExecuteInvalid() {
        query := "INVALID"
        st, err := dm.conn.NewStatement()

Reply via email to