pitrou commented on code in PR #35036: URL: https://github.com/apache/arrow/pull/35036#discussion_r1211879748
########## cpp/src/arrow/compute/kernels/scalar_validity.cc: ########## @@ -82,6 +84,72 @@ static void SetNanBits(const ArraySpan& arr, uint8_t* out_bitmap, int64_t out_of } } +static void SetSparseUnionLogicalNullBits(const ArraySpan& span, uint8_t* out_bitmap, + int64_t out_offset) { + const auto* sparse_union_type = + ::arrow::internal::checked_cast<const SparseUnionType*>(span.type); + DCHECK_LE(span.child_data.size(), 128); + + const int8_t* types = span.GetValues<int8_t>(1); // NOLINT + for (int64_t i = 0; i < span.length; i++) { + const int8_t child_id = sparse_union_type->child_ids()[types[i]]; + if (span.child_data[child_id].IsNull(i + span.offset)) { + bit_util::SetBit(out_bitmap, i + out_offset); + } + } +} + +static void SetDenseUnionLogicalNullBits(const ArraySpan& span, uint8_t* out_bitmap, + int64_t out_offset) { + const auto* dense_union_type = + ::arrow::internal::checked_cast<const DenseUnionType*>(span.type); + DCHECK_LE(span.child_data.size(), 128); + + const int8_t* types = span.GetValues<int8_t>(1); // NOLINT + const int32_t* offsets = span.GetValues<int32_t>(2); // NOLINT + for (int64_t i = 0; i < span.length; i++) { + const int8_t child_id = dense_union_type->child_ids()[types[i]]; + const int32_t offset = offsets[i]; + if (span.child_data[child_id].IsNull(offset)) { + bit_util::SetBit(out_bitmap, i + out_offset); + } + } +} + +template <typename RunEndCType> +void SetREELogicalNullBits(const ArraySpan& span, uint8_t* out_bitmap, + int64_t out_offset) { + const auto& values = arrow::ree_util::ValuesArray(span); + DCHECK(!is_nested(values.type->id())); Review Comment: No idea, but the proposal here is to make things correct first ;-) It's also possible that run-end-decoding could be optimized... -- 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: github-unsubscr...@arrow.apache.org For queries about this service, please contact Infrastructure at: us...@infra.apache.org