in client/sql/dataframe.go [300:345]
func readArrowBatchData(data []byte, schema *StructType) ([]Row, error) {
reader := bytes.NewReader(data)
arrowReader, err := ipc.NewReader(reader)
if err != nil {
return nil, fmt.Errorf("failed to create arrow reader: %w", err)
}
defer arrowReader.Release()
var rows []Row
for {
record, err := arrowReader.Read()
if err != nil {
if errors.Is(err, io.EOF) {
return rows, nil
} else {
return nil, fmt.Errorf("failed to read arrow: %w", err)
}
}
values, err := readArrowRecord(record)
if err != nil {
return nil, err
}
numRows := int(record.NumRows())
if rows == nil {
rows = make([]Row, 0, numRows)
}
for _, v := range values {
row := &GenericRowWithSchema{
schema: schema,
values: v,
}
rows = append(rows, row)
}
hasNext := arrowReader.Next()
if !hasNext {
break
}
}
return rows, nil
}