in arrow/cdata/cdata_exports.go [120:226]
func (exp *schemaExporter) exportFormat(dt arrow.DataType) string {
switch dt := dt.(type) {
case *arrow.NullType:
return "n"
case *arrow.BooleanType:
return "b"
case *arrow.Int8Type:
return "c"
case *arrow.Uint8Type:
return "C"
case *arrow.Int16Type:
return "s"
case *arrow.Uint16Type:
return "S"
case *arrow.Int32Type:
return "i"
case *arrow.Uint32Type:
return "I"
case *arrow.Int64Type:
return "l"
case *arrow.Uint64Type:
return "L"
case *arrow.Float16Type:
return "e"
case *arrow.Float32Type:
return "f"
case *arrow.Float64Type:
return "g"
case *arrow.FixedSizeBinaryType:
return fmt.Sprintf("w:%d", dt.ByteWidth)
case *arrow.Decimal128Type:
return fmt.Sprintf("d:%d,%d", dt.Precision, dt.Scale)
case *arrow.BinaryType:
return "z"
case *arrow.StringType:
return "u"
case *arrow.Date32Type:
return "tdD"
case *arrow.Date64Type:
return "tdm"
case *arrow.Time32Type:
switch dt.Unit {
case arrow.Second:
return "tts"
case arrow.Millisecond:
return "ttm"
default:
panic(fmt.Sprintf("invalid time unit for time32: %s", dt.Unit))
}
case *arrow.Time64Type:
switch dt.Unit {
case arrow.Microsecond:
return "ttu"
case arrow.Nanosecond:
return "ttn"
default:
panic(fmt.Sprintf("invalid time unit for time64: %s", dt.Unit))
}
case *arrow.TimestampType:
var b strings.Builder
switch dt.Unit {
case arrow.Second:
b.WriteString("tss:")
case arrow.Millisecond:
b.WriteString("tsm:")
case arrow.Microsecond:
b.WriteString("tsu:")
case arrow.Nanosecond:
b.WriteString("tsn:")
default:
panic(fmt.Sprintf("invalid time unit for timestamp: %s", dt.Unit))
}
b.WriteString(dt.TimeZone)
return b.String()
case *arrow.DurationType:
switch dt.Unit {
case arrow.Second:
return "tDs"
case arrow.Millisecond:
return "tDm"
case arrow.Microsecond:
return "tDu"
case arrow.Nanosecond:
return "tDn"
default:
panic(fmt.Sprintf("invalid time unit for duration: %s", dt.Unit))
}
case *arrow.MonthIntervalType:
return "tiM"
case *arrow.DayTimeIntervalType:
return "tiD"
case *arrow.MonthDayNanoIntervalType:
return "tin"
case *arrow.ListType:
return "+l"
case *arrow.FixedSizeListType:
return fmt.Sprintf("+w:%d", dt.Len())
case *arrow.StructType:
return "+s"
case *arrow.MapType:
if dt.KeysSorted {
exp.flags |= C.ARROW_FLAG_MAP_KEYS_SORTED
}
return "+m"
}
panic("unsupported data type for export")
}