in arrow/internal/arrdata/arrdata.go [919:1210]
func arrayOf(mem memory.Allocator, a interface{}, valids []bool) array.Interface {
if mem == nil {
mem = memory.NewGoAllocator()
}
switch a := a.(type) {
case []nullT:
return array.NewNull(len(a))
case []bool:
bldr := array.NewBooleanBuilder(mem)
defer bldr.Release()
bldr.AppendValues(a, valids)
return bldr.NewBooleanArray()
case []int8:
bldr := array.NewInt8Builder(mem)
defer bldr.Release()
bldr.AppendValues(a, valids)
return bldr.NewInt8Array()
case []int16:
bldr := array.NewInt16Builder(mem)
defer bldr.Release()
bldr.AppendValues(a, valids)
return bldr.NewInt16Array()
case []int32:
bldr := array.NewInt32Builder(mem)
defer bldr.Release()
bldr.AppendValues(a, valids)
return bldr.NewInt32Array()
case []int64:
bldr := array.NewInt64Builder(mem)
defer bldr.Release()
bldr.AppendValues(a, valids)
return bldr.NewInt64Array()
case []uint8:
bldr := array.NewUint8Builder(mem)
defer bldr.Release()
bldr.AppendValues(a, valids)
return bldr.NewUint8Array()
case []uint16:
bldr := array.NewUint16Builder(mem)
defer bldr.Release()
bldr.AppendValues(a, valids)
return bldr.NewUint16Array()
case []uint32:
bldr := array.NewUint32Builder(mem)
defer bldr.Release()
bldr.AppendValues(a, valids)
return bldr.NewUint32Array()
case []uint64:
bldr := array.NewUint64Builder(mem)
defer bldr.Release()
bldr.AppendValues(a, valids)
return bldr.NewUint64Array()
case []float16.Num:
bldr := array.NewFloat16Builder(mem)
defer bldr.Release()
bldr.AppendValues(a, valids)
return bldr.NewFloat16Array()
case []float32:
bldr := array.NewFloat32Builder(mem)
defer bldr.Release()
bldr.AppendValues(a, valids)
return bldr.NewFloat32Array()
case []float64:
bldr := array.NewFloat64Builder(mem)
defer bldr.Release()
bldr.AppendValues(a, valids)
return bldr.NewFloat64Array()
case []decimal128.Num:
bldr := array.NewDecimal128Builder(mem, decimal128Type)
defer bldr.Release()
bldr.AppendValues(a, valids)
aa := bldr.NewDecimal128Array()
return aa
case []string:
bldr := array.NewStringBuilder(mem)
defer bldr.Release()
bldr.AppendValues(a, valids)
return bldr.NewStringArray()
case [][]byte:
bldr := array.NewBinaryBuilder(mem, arrow.BinaryTypes.Binary)
defer bldr.Release()
bldr.AppendValues(a, valids)
return bldr.NewBinaryArray()
case []time32s:
bldr := array.NewTime32Builder(mem, arrow.FixedWidthTypes.Time32s.(*arrow.Time32Type))
defer bldr.Release()
vs := make([]arrow.Time32, len(a))
for i, v := range a {
vs[i] = arrow.Time32(v)
}
bldr.AppendValues(vs, valids)
return bldr.NewArray()
case []time32ms:
bldr := array.NewTime32Builder(mem, arrow.FixedWidthTypes.Time32ms.(*arrow.Time32Type))
defer bldr.Release()
vs := make([]arrow.Time32, len(a))
for i, v := range a {
vs[i] = arrow.Time32(v)
}
bldr.AppendValues(vs, valids)
return bldr.NewArray()
case []time64ns:
bldr := array.NewTime64Builder(mem, arrow.FixedWidthTypes.Time64ns.(*arrow.Time64Type))
defer bldr.Release()
vs := make([]arrow.Time64, len(a))
for i, v := range a {
vs[i] = arrow.Time64(v)
}
bldr.AppendValues(vs, valids)
return bldr.NewArray()
case []time64us:
bldr := array.NewTime64Builder(mem, arrow.FixedWidthTypes.Time64us.(*arrow.Time64Type))
defer bldr.Release()
vs := make([]arrow.Time64, len(a))
for i, v := range a {
vs[i] = arrow.Time64(v)
}
bldr.AppendValues(vs, valids)
return bldr.NewArray()
case []timestamp_s:
bldr := array.NewTimestampBuilder(mem, arrow.FixedWidthTypes.Timestamp_s.(*arrow.TimestampType))
defer bldr.Release()
vs := make([]arrow.Timestamp, len(a))
for i, v := range a {
vs[i] = arrow.Timestamp(v)
}
bldr.AppendValues(vs, valids)
return bldr.NewArray()
case []timestamp_ms:
bldr := array.NewTimestampBuilder(mem, arrow.FixedWidthTypes.Timestamp_ms.(*arrow.TimestampType))
defer bldr.Release()
vs := make([]arrow.Timestamp, len(a))
for i, v := range a {
vs[i] = arrow.Timestamp(v)
}
bldr.AppendValues(vs, valids)
return bldr.NewArray()
case []timestamp_us:
bldr := array.NewTimestampBuilder(mem, arrow.FixedWidthTypes.Timestamp_us.(*arrow.TimestampType))
defer bldr.Release()
vs := make([]arrow.Timestamp, len(a))
for i, v := range a {
vs[i] = arrow.Timestamp(v)
}
bldr.AppendValues(vs, valids)
return bldr.NewArray()
case []timestamp_ns:
bldr := array.NewTimestampBuilder(mem, arrow.FixedWidthTypes.Timestamp_ns.(*arrow.TimestampType))
defer bldr.Release()
vs := make([]arrow.Timestamp, len(a))
for i, v := range a {
vs[i] = arrow.Timestamp(v)
}
bldr.AppendValues(vs, valids)
return bldr.NewArray()
case []arrow.Date32:
bldr := array.NewDate32Builder(mem)
defer bldr.Release()
bldr.AppendValues(a, valids)
return bldr.NewArray()
case []arrow.Date64:
bldr := array.NewDate64Builder(mem)
defer bldr.Release()
bldr.AppendValues(a, valids)
return bldr.NewArray()
case []fsb3:
bldr := array.NewFixedSizeBinaryBuilder(mem, &arrow.FixedSizeBinaryType{ByteWidth: 3})
defer bldr.Release()
vs := make([][]byte, len(a))
for i, v := range a {
vs[i] = []byte(v)
}
bldr.AppendValues(vs, valids)
return bldr.NewArray()
case []arrow.MonthInterval:
bldr := array.NewMonthIntervalBuilder(mem)
defer bldr.Release()
bldr.AppendValues(a, valids)
return bldr.NewArray()
case []arrow.DayTimeInterval:
bldr := array.NewDayTimeIntervalBuilder(mem)
defer bldr.Release()
bldr.AppendValues(a, valids)
return bldr.NewArray()
case []arrow.MonthDayNanoInterval:
bldr := array.NewMonthDayNanoIntervalBuilder(mem)
defer bldr.Release()
bldr.AppendValues(a, valids)
return bldr.NewArray()
case []duration_s:
bldr := array.NewDurationBuilder(mem, &arrow.DurationType{Unit: arrow.Second})
defer bldr.Release()
vs := make([]arrow.Duration, len(a))
for i, v := range a {
vs[i] = arrow.Duration(v)
}
bldr.AppendValues(vs, valids)
return bldr.NewArray()
case []duration_ms:
bldr := array.NewDurationBuilder(mem, &arrow.DurationType{Unit: arrow.Millisecond})
defer bldr.Release()
vs := make([]arrow.Duration, len(a))
for i, v := range a {
vs[i] = arrow.Duration(v)
}
bldr.AppendValues(vs, valids)
return bldr.NewArray()
case []duration_us:
bldr := array.NewDurationBuilder(mem, &arrow.DurationType{Unit: arrow.Microsecond})
defer bldr.Release()
vs := make([]arrow.Duration, len(a))
for i, v := range a {
vs[i] = arrow.Duration(v)
}
bldr.AppendValues(vs, valids)
return bldr.NewArray()
case []duration_ns:
bldr := array.NewDurationBuilder(mem, &arrow.DurationType{Unit: arrow.Nanosecond})
defer bldr.Release()
vs := make([]arrow.Duration, len(a))
for i, v := range a {
vs[i] = arrow.Duration(v)
}
bldr.AppendValues(vs, valids)
return bldr.NewArray()
default:
panic(fmt.Errorf("arrdata: invalid data slice type %T", a))
}
}