singhpratech opened a new pull request, #1306:
URL: https://github.com/apache/arrow-go/pull/1306

   ### Rationale for this change
   
   `and_kleene` and `or_kleene` return `false` where the answer is null when 
`ExecCtx.ChunkSize` is
   below the input length (#1305). `ArraySpan.SetSlice` kept the cached null 
count for the new
   slice when it was `0` or equal to the old length. That is only right while 
the count describes the
   whole span. The executor reuses one span per argument across slices, and a 
kernel that calls
   `UpdateNullCount()` on it stores the slice's count, so the next `SetSlice` 
treats the following
   slice as all valid or all null.
   
   ### What changes are included in this PR?
   
   `SetSlice` resets the count to `UnknownNullCount` whenever a validity bitmap 
is present, as the C++
   `ArraySpan::SetSlice` does (`cpp/src/arrow/array/data.h`), and keeps it 
unknown when it was already
   non-zero without a bitmap. The null type still gets the slice length; a span 
with no bitmap and a
   zero count keeps zero. Two cases added to `TestArraySpan_SetSlice`, and a 
new test that runs both
   Kleene kernels at chunk sizes 1, 2, 3, 4 and 8 against the default result.
   
   Cost: a slice of an all-valid array with a bitmap now reports an unknown 
count, so a kernel that
   asks pays one popcount over the slice instead of reading the cache. That is 
the C++ behaviour.
   
   ### Are these changes tested?
   
   Yes. The new chunk-size test fails on main (four assertions, chunk sizes 1 
and 2 for both kernels)
   and passes with the change; `go test ./arrow/compute/...` passes.
   
   ### Are there any user-facing changes?
   
   Results of `and_kleene`/`or_kleene` no longer depend on `ExecCtx.ChunkSize`. 
`ArraySpan.Nulls` after
   `SetSlice` is `UnknownNullCount` in cases where it was previously `0` or the 
slice length; code that
   read it directly should call `UpdateNullCount()`, which is what the 
package's own kernels do.
   
   Closes #1305.
   


-- 
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