CurtHagenlocher opened a new pull request, #444: URL: https://github.com/apache/arrow-dotnet/pull/444
## What's Changed Fixes the three `ArrowArrayConcatenator` problems reported in #443, plus a related lifetime issue found while fixing them. - **Extension arrays are concatenated.** `ExtensionType.Accept` passes the visitor through to the storage type, so the storage visitor then rejected the `Extension` type ID. `ArrayDataConcatenator.Concatenate` now checks for an extension type first. It requires every input to have the same extension name and metadata, concatenates the storage arrays, and puts the extension type back on the result. This path also applies to child arrays, so e.g. a list of `GuidArray`s works too. - **View results own their data buffers.** `ConcatenateBinaryViewArrayData` now calls `Retain()` on each variadic data buffer it takes from an input. The result stays valid after the inputs (including `SliceShared` inputs) are disposed. - **Empty view inputs with data buffers no longer throw.** The loop that copies data buffers now skips zero-length inputs, just as `ConcatenateViewBuffer` already did when counting them. The buffer count and the view buffer indices now match. - **Other results that aliased an input now retain it.** The result used to share an input's memory without holding a reference in three cases: a single input to either `Concatenate` method, a nested child where only one input contributed values (for example, lists where only one has values), and the zero-length child or values array used when every input is empty. These now use `Retain()` / `SliceShared(0, 0)`. Note: a single-input `Concatenate` call now returns a new array that holds its own references, not the input object itself. The caller should dispose it like any other concatenation result. ### Tests Eight new tests in `ArrowArrayConcatenatorTests` cover extension arrays (plain, nested in a list, mismatched types), view results that outlive their inputs (plain and `SliceShared`), empty view inputs with data buffers, and results that outlive a single input, a list with one non-empty input, and a run-end encoded array with one non-empty input. All eight fail without the fix. The full `Apache.Arrow.Tests` suite passes on net8.0, net462 and net472. Closes #443. 🤖 Generated with [Claude Code](https://claude.com/claude-code) -- 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]
