Fix ScalarStructBuilder::build() for an empty struct #16205
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Which issue does this PR close?
Rationale for this change
The bump to Arrow 55.1 brings with it apache/arrow-rs#7247. That causes runtime errors using
ScalarStructBuilderif the struct is empty.What changes are included in this PR?
Use
try_new_with_lengthinstead oftry_newto allow empty struct. Our length is always 1 as we're building a scalar.The
try_new_with_lengthalso does validation on the provided length against the arrays, so we can remove our validation.Are these changes tested?
Existing tests for non-empty structs + a new unit test for empty struct.
Are there any user-facing changes?
The error thrown for a wrong-sized array is now different, as it comes from Arrow instead of being a DF InternalError. The Arrow error has some benefits, e.g. it mentions the field name, and also some downsides (I think Arrow doesn't include backtraces, tho I might be wrong):