func readArrowBatchData()

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
}