kou commented on PR #39520: URL: https://github.com/apache/arrow/pull/39520#issuecomment-1883805412
This approach passes `nullCount` from Apache Arrow data (`.arrow`/`.arrows` data) to `ArrowArray` via `ArrowNullBuffer`, right? The C++ implementation passes it to `arrow::Array` (`arrow::ArrayData`) directly: https://github.com/apache/arrow/blob/1e74acef7ca6b1f9ae6c7ee4f64d0eb4c01e706f/cpp/src/arrow/ipc/reader.cc#L275 If we use this approach in Swift too, we will use API something like the following: ```diff diff --git a/swift/Arrow/Sources/Arrow/ArrowReader.swift b/swift/Arrow/Sources/Arrow/ArrowReader.swift index d9dc1bdb47..c985b37ca6 100644 --- a/swift/Arrow/Sources/Arrow/ArrowReader.swift +++ b/swift/Arrow/Sources/Arrow/ArrowReader.swift @@ -88,7 +88,7 @@ public class ArrowReader { let valueBuffer = loadInfo.recordBatch.buffers(at: loadInfo.bufferIndex + 2)! let arrowValueBuffer = makeBuffer(valueBuffer, fileData: loadInfo.fileData, length: UInt(node.length), messageOffset: loadInfo.messageOffset) - return makeArrayHolder(loadInfo.field, buffers: [arrowNullBuffer, arrowOffsetBuffer, arrowValueBuffer]) + return makeArrayHolder(loadInfo.field, buffers: [arrowNullBuffer, arrowOffsetBuffer, arrowValueBuffer], UInt(node.nullCount)) } catch let error as ArrowError { return .failure(error) } catch { diff --git a/swift/Arrow/Sources/Arrow/ArrowReaderHelper.swift b/swift/Arrow/Sources/Arrow/ArrowReaderHelper.swift index fa52160478..13d6209dee 100644 --- a/swift/Arrow/Sources/Arrow/ArrowReaderHelper.swift +++ b/swift/Arrow/Sources/Arrow/ArrowReaderHelper.swift @@ -126,7 +126,8 @@ private func makeFixedHolder<T>( func makeArrayHolder( // swiftlint:disable:this cyclomatic_complexity _ field: org_apache_arrow_flatbuf_Field, - buffers: [ArrowBuffer] + buffers: [ArrowBuffer], + nullCount: UInt ) -> Result<ArrowArrayHolder, ArrowError> { let type = field.typeType switch type { ``` What do you think this approach? -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: [email protected] For queries about this service, please contact Infrastructure at: [email protected]
