diff --git a/arrow/array/binary_test.go b/arrow/array/binary_test.go index 0e27b9bb4..8e91860d9 100644 --- a/arrow/array/binary_test.go +++ b/arrow/array/binary_test.go @@ -732,6 +732,13 @@ func TestBinaryViewBuilderRejectsOversizedValues(t *testing.T) { }) } +func TestBinaryViewBuilderReserveData0DoesNotAllocate(t *testing.T) { + b := NewBinaryViewBuilder(binaryViewNoAllocAllocator{}) + defer b.Release() + + b.ReserveData(0) +} + func TestBinaryViewStringRoundTrip(t *testing.T) { mem := memory.NewCheckedAllocator(memory.DefaultAllocator) defer mem.AssertSize(t, 0) diff --git a/arrow/array/binarybuilder.go b/arrow/array/binarybuilder.go index 698e7c53d..07114df94 100644 --- a/arrow/array/binarybuilder.go +++ b/arrow/array/binarybuilder.go @@ -476,6 +476,9 @@ func checkBinaryViewValueSize(length int64) { func (b *BinaryViewBuilder) ReserveData(length int) { checkBinaryViewValueSize(int64(length)) + if length == 0 { + return + } b.blockBuilder.Reserve(int(length)) } diff --git a/arrow/internal/arrjson/arrjson_test.go b/arrow/internal/arrjson/arrjson_test.go index 7e2f386fc..232270b9d 100644 --- a/arrow/internal/arrjson/arrjson_test.go +++ b/arrow/internal/arrjson/arrjson_test.go @@ -6186,8 +6186,7 @@ func makeViewTypesWantJSONs() string { "SIZE": 1, "INLINED": "35" } - ], - "VARIADIC_DATA_BUFFERS": [""] + ] }, { "name": "string_view", @@ -6220,8 +6219,7 @@ func makeViewTypesWantJSONs() string { "SIZE": 1, "INLINED": "5" } - ], - "VARIADIC_DATA_BUFFERS": [""] + ] } ] }, @@ -6259,8 +6257,7 @@ func makeViewTypesWantJSONs() string { "SIZE": 4, "INLINED": "35353535" } - ], - "VARIADIC_DATA_BUFFERS": [""] + ] }, { "name": "string_view", @@ -6378,8 +6375,7 @@ func makeViewTypesWantJSONs() string { "SIZE": 2, "INLINED": "55" } - ], - "VARIADIC_DATA_BUFFERS": [""] + ] } ] }