in go/adbc/driver/flightsql/flightsql_adbc.go [1125:1201]
func (c *cnxn) getObjectsTables(ctx context.Context, depth adbc.ObjectDepth, catalog *string, dbSchema *string, tableName *string, columnName *string, tableType []string) (result internal.SchemaToTableInfo, err error) {
if depth == adbc.ObjectDepthCatalogs || depth == adbc.ObjectDepthDBSchemas {
return
}
result = make(map[internal.CatalogAndSchema][]internal.TableInfo)
// Pre-populate the map of which schemas are in which catalogs
includeSchema := depth == adbc.ObjectDepthAll || depth == adbc.ObjectDepthColumns
info, err := c.cl.GetTables(ctx, &flightsql.GetTablesOpts{
DbSchemaFilterPattern: dbSchema,
TableNameFilterPattern: tableName,
TableTypes: tableType,
IncludeSchema: includeSchema,
})
if err != nil {
return nil, adbcFromFlightStatus(err, "GetObjects(GetTables)")
}
expectedSchema := schema_ref.Tables
if includeSchema {
expectedSchema = schema_ref.TablesWithIncludedSchema
}
rdr, err := c.readInfo(ctx, expectedSchema, info)
if err != nil {
return nil, adbcFromFlightStatus(err, "GetObjects(GetTables)")
}
defer rdr.Release()
for rdr.Next() {
// Nullable
catalog := rdr.Record().Column(0).(*array.String)
dbSchema := rdr.Record().Column(1).(*array.String)
// Non-nullable
tableName := rdr.Record().Column(2).(*array.String)
tableType := rdr.Record().Column(3).(*array.String)
for i := 0; i < catalog.Len(); i++ {
catalogName := ""
dbSchemaName := ""
if !catalog.IsNull(i) {
catalogName = string([]byte(catalog.Value(i)))
}
if !dbSchema.IsNull(i) {
dbSchemaName = string([]byte(dbSchema.Value(i)))
}
key := internal.CatalogAndSchema{
Catalog: catalogName,
Schema: dbSchemaName,
}
var schema *arrow.Schema
if includeSchema {
reader, err := ipc.NewReader(bytes.NewReader(rdr.Record().Column(4).(*array.Binary).Value(i)))
if err != nil {
return nil, adbc.Error{
Msg: err.Error(),
Code: adbc.StatusInternal,
}
}
schema = reader.Schema()
reader.Release()
}
result[key] = append(result[key], internal.TableInfo{
Name: string([]byte(tableName.Value(i))),
TableType: string([]byte(tableType.Value(i))),
Schema: schema,
})
}
}
if rdr.Err() != nil {
result = nil
err = adbcFromFlightStatus(rdr.Err(), "GetObjects(GetTables)")
}
return
}