in arrow/flight/flightsql/driver/utils.go [154:287]
func setFieldValue(builder array.Builder, arg interface{}) error {
switch b := builder.(type) {
case *array.BooleanBuilder:
switch v := arg.(type) {
case bool:
b.Append(v)
case []bool:
b.AppendValues(v, nil)
default:
return fmt.Errorf("invalid value type %T for builder %T", arg, builder)
}
case *array.Float32Builder:
switch v := arg.(type) {
case float32:
b.Append(v)
case []float32:
b.AppendValues(v, nil)
default:
return fmt.Errorf("invalid value type %T for builder %T", arg, builder)
}
case *array.Float64Builder:
switch v := arg.(type) {
case float64:
b.Append(v)
case []float64:
b.AppendValues(v, nil)
default:
return fmt.Errorf("invalid value type %T for builder %T", arg, builder)
}
case *array.Int8Builder:
switch v := arg.(type) {
case int8:
b.Append(v)
case []int8:
b.AppendValues(v, nil)
default:
return fmt.Errorf("invalid value type %T for builder %T", arg, builder)
}
case *array.Int16Builder:
switch v := arg.(type) {
case int16:
b.Append(v)
case []int16:
b.AppendValues(v, nil)
default:
return fmt.Errorf("invalid value type %T for builder %T", arg, builder)
}
case *array.Int32Builder:
switch v := arg.(type) {
case int32:
b.Append(v)
case []int32:
b.AppendValues(v, nil)
default:
return fmt.Errorf("invalid value type %T for builder %T", arg, builder)
}
case *array.Int64Builder:
switch v := arg.(type) {
case int64:
b.Append(v)
case []int64:
b.AppendValues(v, nil)
default:
return fmt.Errorf("invalid value type %T for builder %T", arg, builder)
}
case *array.Uint8Builder:
switch v := arg.(type) {
case uint8:
b.Append(v)
case []uint8:
b.AppendValues(v, nil)
default:
return fmt.Errorf("invalid value type %T for builder %T", arg, builder)
}
case *array.Uint16Builder:
switch v := arg.(type) {
case uint16:
b.Append(v)
case []uint16:
b.AppendValues(v, nil)
default:
return fmt.Errorf("invalid value type %T for builder %T", arg, builder)
}
case *array.Uint32Builder:
switch v := arg.(type) {
case uint32:
b.Append(v)
case []uint32:
b.AppendValues(v, nil)
default:
return fmt.Errorf("invalid value type %T for builder %T", arg, builder)
}
case *array.Uint64Builder:
switch v := arg.(type) {
case uint64:
b.Append(v)
case []uint64:
b.AppendValues(v, nil)
default:
return fmt.Errorf("invalid value type %T for builder %T", arg, builder)
}
case *array.StringBuilder:
switch v := arg.(type) {
case string:
b.Append(v)
case []string:
b.AppendValues(v, nil)
default:
return fmt.Errorf("invalid value type %T for builder %T", arg, builder)
}
case *array.Time64Builder:
switch v := arg.(type) {
case int64:
b.Append(arrow.Time64(v))
case []int64:
for _, x := range v {
b.Append(arrow.Time64(x))
}
case uint64:
b.Append(arrow.Time64(v))
case []uint64:
for _, x := range v {
b.Append(arrow.Time64(x))
}
case time.Time:
b.Append(arrow.Time64(v.Nanosecond()))
default:
return fmt.Errorf("invalid value type %T for builder %T", arg, builder)
}
default:
return fmt.Errorf("unknown builder type %T", builder)
}
return nil
}