func readArrowRecordColumn()

in client/sql/dataframe.go [367:446]


func readArrowRecordColumn(record arrow.Record, columnIndex int, values [][]any) error {
	numRows := int(record.NumRows())
	columnData := record.Column(columnIndex).Data()
	dataTypeId := columnData.DataType().ID()
	switch dataTypeId {
	case arrow.BOOL:
		vector := array.NewBooleanData(columnData)
		for rowIndex := 0; rowIndex < numRows; rowIndex++ {
			values[rowIndex][columnIndex] = vector.Value(rowIndex)
		}
	case arrow.INT8:
		vector := array.NewInt8Data(columnData)
		for rowIndex := 0; rowIndex < numRows; rowIndex++ {
			values[rowIndex][columnIndex] = vector.Value(rowIndex)
		}
	case arrow.INT16:
		vector := array.NewInt16Data(columnData)
		for rowIndex := 0; rowIndex < numRows; rowIndex++ {
			values[rowIndex][columnIndex] = vector.Value(rowIndex)
		}
	case arrow.INT32:
		vector := array.NewInt32Data(columnData)
		for rowIndex := 0; rowIndex < numRows; rowIndex++ {
			values[rowIndex][columnIndex] = vector.Value(rowIndex)
		}
	case arrow.INT64:
		vector := array.NewInt64Data(columnData)
		for rowIndex := 0; rowIndex < numRows; rowIndex++ {
			values[rowIndex][columnIndex] = vector.Value(rowIndex)
		}
	case arrow.FLOAT16:
		vector := array.NewFloat16Data(columnData)
		for rowIndex := 0; rowIndex < numRows; rowIndex++ {
			values[rowIndex][columnIndex] = vector.Value(rowIndex)
		}
	case arrow.FLOAT32:
		vector := array.NewFloat32Data(columnData)
		for rowIndex := 0; rowIndex < numRows; rowIndex++ {
			values[rowIndex][columnIndex] = vector.Value(rowIndex)
		}
	case arrow.FLOAT64:
		vector := array.NewFloat64Data(columnData)
		for rowIndex := 0; rowIndex < numRows; rowIndex++ {
			values[rowIndex][columnIndex] = vector.Value(rowIndex)
		}
	case arrow.DECIMAL | arrow.DECIMAL128:
		vector := array.NewDecimal128Data(columnData)
		for rowIndex := 0; rowIndex < numRows; rowIndex++ {
			values[rowIndex][columnIndex] = vector.Value(rowIndex)
		}
	case arrow.DECIMAL256:
		vector := array.NewDecimal256Data(columnData)
		for rowIndex := 0; rowIndex < numRows; rowIndex++ {
			values[rowIndex][columnIndex] = vector.Value(rowIndex)
		}
	case arrow.STRING:
		vector := array.NewStringData(columnData)
		for rowIndex := 0; rowIndex < numRows; rowIndex++ {
			values[rowIndex][columnIndex] = vector.Value(rowIndex)
		}
	case arrow.BINARY:
		vector := array.NewBinaryData(columnData)
		for rowIndex := 0; rowIndex < numRows; rowIndex++ {
			values[rowIndex][columnIndex] = vector.Value(rowIndex)
		}
	case arrow.TIMESTAMP:
		vector := array.NewTimestampData(columnData)
		for rowIndex := 0; rowIndex < numRows; rowIndex++ {
			values[rowIndex][columnIndex] = vector.Value(rowIndex)
		}
	case arrow.DATE64:
		vector := array.NewDate64Data(columnData)
		for rowIndex := 0; rowIndex < numRows; rowIndex++ {
			values[rowIndex][columnIndex] = vector.Value(rowIndex)
		}
	default:
		return fmt.Errorf("unsupported arrow data type %s in column %d", dataTypeId.String(), columnIndex)
	}
	return nil
}