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
}