in Sources/SparkConnect/ArrowWriterHelper.swift [51:119]
func toFBType( // swiftlint:disable:this cyclomatic_complexity
_ fbb: inout FlatBufferBuilder,
arrowType: ArrowType
) -> Result<Offset, ArrowError> {
let infoType = arrowType.info
if infoType == ArrowType.ArrowInt8 || infoType == ArrowType.ArrowUInt8 {
return .success(
org_apache_arrow_flatbuf_Int.createInt(
&fbb, bitWidth: 8, isSigned: infoType == ArrowType.ArrowInt8))
} else if infoType == ArrowType.ArrowInt16 || infoType == ArrowType.ArrowUInt16 {
return .success(
org_apache_arrow_flatbuf_Int.createInt(
&fbb, bitWidth: 16, isSigned: infoType == ArrowType.ArrowInt16))
} else if infoType == ArrowType.ArrowInt32 || infoType == ArrowType.ArrowUInt32 {
return .success(
org_apache_arrow_flatbuf_Int.createInt(
&fbb, bitWidth: 32, isSigned: infoType == ArrowType.ArrowInt32))
} else if infoType == ArrowType.ArrowInt64 || infoType == ArrowType.ArrowUInt64 {
return .success(
org_apache_arrow_flatbuf_Int.createInt(
&fbb, bitWidth: 64, isSigned: infoType == ArrowType.ArrowInt64))
} else if infoType == ArrowType.ArrowFloat {
return .success(
org_apache_arrow_flatbuf_FloatingPoint.createFloatingPoint(&fbb, precision: .single))
} else if infoType == ArrowType.ArrowDouble {
return .success(
org_apache_arrow_flatbuf_FloatingPoint.createFloatingPoint(&fbb, precision: .double))
} else if infoType == ArrowType.ArrowString {
return .success(
org_apache_arrow_flatbuf_Utf8.endUtf8(
&fbb, start: org_apache_arrow_flatbuf_Utf8.startUtf8(&fbb)))
} else if infoType == ArrowType.ArrowBinary {
return .success(
org_apache_arrow_flatbuf_Binary.endBinary(
&fbb, start: org_apache_arrow_flatbuf_Binary.startBinary(&fbb)))
} else if infoType == ArrowType.ArrowBool {
return .success(
org_apache_arrow_flatbuf_Bool.endBool(
&fbb, start: org_apache_arrow_flatbuf_Bool.startBool(&fbb)))
} else if infoType == ArrowType.ArrowDate32 {
let startOffset = org_apache_arrow_flatbuf_Date.startDate(&fbb)
org_apache_arrow_flatbuf_Date.add(unit: .day, &fbb)
return .success(org_apache_arrow_flatbuf_Date.endDate(&fbb, start: startOffset))
} else if infoType == ArrowType.ArrowDate64 {
let startOffset = org_apache_arrow_flatbuf_Date.startDate(&fbb)
org_apache_arrow_flatbuf_Date.add(unit: .millisecond, &fbb)
return .success(org_apache_arrow_flatbuf_Date.endDate(&fbb, start: startOffset))
} else if infoType == ArrowType.ArrowTime32 {
let startOffset = org_apache_arrow_flatbuf_Time.startTime(&fbb)
if let timeType = arrowType as? ArrowTypeTime32 {
org_apache_arrow_flatbuf_Time.add(
unit: timeType.unit == .seconds ? .second : .millisecond, &fbb)
return .success(org_apache_arrow_flatbuf_Time.endTime(&fbb, start: startOffset))
}
return .failure(.invalid("Unable to case to Time32"))
} else if infoType == ArrowType.ArrowTime64 {
let startOffset = org_apache_arrow_flatbuf_Time.startTime(&fbb)
if let timeType = arrowType as? ArrowTypeTime64 {
org_apache_arrow_flatbuf_Time.add(
unit: timeType.unit == .microseconds ? .microsecond : .nanosecond, &fbb)
return .success(org_apache_arrow_flatbuf_Time.endTime(&fbb, start: startOffset))
}
return .failure(.invalid("Unable to case to Time64"))
}
return .failure(.unknownType("Unable to add flatbuf type for Arrow type: \(infoType)"))
}