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]

Reply via email to