This is an automated email from the ASF dual-hosted git repository.
zeroshade pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/arrow.git
The following commit(s) were added to refs/heads/main by this push:
new 77e572b06c MINOR: [Go] check nil buffer in SizeInBytes (#42227)
77e572b06c is described below
commit 77e572b06c62fedd582bc7121f081fad90e5afb6
Author: Yifeng-Sigma <[email protected]>
AuthorDate: Fri Jun 21 14:04:21 2024 -0700
MINOR: [Go] check nil buffer in SizeInBytes (#42227)
<!--
Thanks for opening a pull request!
If this is your first pull request you can find detailed information on
how
to contribute here:
* [New Contributor's
Guide](https://arrow.apache.org/docs/dev/developers/guide/step_by_step/pr_lifecycle.html#reviews-and-merge-of-the-pull-request)
* [Contributing
Overview](https://arrow.apache.org/docs/dev/developers/overview.html)
If this is not a [minor
PR](https://github.com/apache/arrow/blob/main/CONTRIBUTING.md#Minor-Fixes).
Could you open an issue for this pull request on GitHub?
https://github.com/apache/arrow/issues/new/choose
Opening GitHub issues ahead of time contributes to the
[Openness](http://theapacheway.com/open/#:~:text=Openness%20allows%20new%20users%20the,must%20happen%20in%20the%20open.)
of the Apache Arrow project.
Then could you also rename the pull request title in the following
format?
GH-${GITHUB_ISSUE_ID}: [${COMPONENT}] ${SUMMARY}
or
MINOR: [${COMPONENT}] ${SUMMARY}
In the case of PARQUET issues on JIRA the title also supports:
PARQUET-${JIRA_ISSUE_ID}: [${COMPONENT}] ${SUMMARY}
-->
### Rationale for this change

Saw a nil error. Unclear to me how this nil buffer got constructed,
because when building the arrow data we seem to already check it. But we
should do a nil check here anyway
### What changes are included in this PR?
Added a nil check.
### Are these changes tested?
<!--
We typically require tests for all PRs in order to:
1. Prevent the code from being accidentally broken by subsequent changes
2. Serve as another way to document the expected behavior of the code
If tests are not included in your PR, please explain why (for example,
are they covered by existing tests)?
-->
### Are there any user-facing changes?
No.
---------
Co-authored-by: Matt Topol <[email protected]>
---
go/arrow/array/data.go | 4 +++-
go/arrow/array/data_test.go | 12 ++++++++++++
2 files changed, 15 insertions(+), 1 deletion(-)
diff --git a/go/arrow/array/data.go b/go/arrow/array/data.go
index ad8081cbbe..40fad0dfd0 100644
--- a/go/arrow/array/data.go
+++ b/go/arrow/array/data.go
@@ -201,7 +201,9 @@ func (d *Data) SizeInBytes() uint64 {
}
for _, b := range d.Buffers() {
- size += uint64(b.Len())
+ if b != nil {
+ size += uint64(b.Len())
+ }
}
for _, c := range d.Children() {
size += c.SizeInBytes()
diff --git a/go/arrow/array/data_test.go b/go/arrow/array/data_test.go
index 85c9b1e0a1..68f2ada97b 100644
--- a/go/arrow/array/data_test.go
+++ b/go/arrow/array/data_test.go
@@ -17,6 +17,7 @@
package array
import (
+ "slices"
"testing"
"github.com/apache/arrow/go/v17/arrow"
@@ -60,6 +61,17 @@ func TestSizeInBytes(t *testing.T) {
var arrayData arrow.ArrayData = data
dataWithChild := NewData(&arrow.StringType{}, 10, buffers1,
[]arrow.ArrayData{arrayData}, 0, 0)
+ buffers2 := slices.Clone(buffers1)
+ buffers2[0] = nil
+ dataWithNilBuffer := NewData(&arrow.StringType{}, 10, buffers2, nil, 0,
0)
+
+ t.Run("nil buffers", func(t *testing.T) {
+ expectedSize := uint64(30)
+ if actualSize := dataWithNilBuffer.SizeInBytes(); actualSize !=
expectedSize {
+ t.Errorf("expected size %d, got %d", expectedSize,
actualSize)
+ }
+ })
+
t.Run("buffers only", func(t *testing.T) {
expectedSize := uint64(45)
if actualSize := data.SizeInBytes(); actualSize != expectedSize
{