Skip to content

Commit 6843412

Browse files
authored
GH-41: [Array] Make String and Binary consistent (#165)
Fixes #41 Makes the behavior of `ValueOffset` consistent between String and Binary arrays.
1 parent 8833a4b commit 6843412

File tree

4 files changed

+9
-11
lines changed

4 files changed

+9
-11
lines changed

arrow/array/string.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ func (a *String) ValueStr(i int) string {
6969

7070
// ValueOffset returns the offset of the value at index i.
7171
func (a *String) ValueOffset(i int) int {
72-
if i < 0 || i > a.array.data.length {
72+
if i < 0 || i >= a.array.data.length {
7373
panic("arrow/array: index out of range")
7474
}
7575
return int(a.offsets[i+a.array.data.offset])

arrow/array/string_test.go

-6
Original file line numberDiff line numberDiff line change
@@ -90,9 +90,6 @@ func TestStringArray(t *testing.T) {
9090
if got, want := arr.ValueOffset(i), int(offsets[i]); got != want {
9191
t.Fatalf("arr-offset-beg[%d]: got=%d, want=%d", i, got, want)
9292
}
93-
if got, want := arr.ValueOffset(i+1), int(offsets[i+1]); got != want {
94-
t.Fatalf("arr-offset-end[%d]: got=%d, want=%d", i+1, got, want)
95-
}
9693
}
9794

9895
if !reflect.DeepEqual(offsets, arr.ValueOffsets()) {
@@ -372,9 +369,6 @@ func TestLargeStringArray(t *testing.T) {
372369
if got, want := arr.ValueOffset(i), offsets[i]; got != want {
373370
t.Fatalf("arr-offset-beg[%d]: got=%d, want=%d", i, got, want)
374371
}
375-
if got, want := arr.ValueOffset(i+1), offsets[i+1]; got != want {
376-
t.Fatalf("arr-offset-end[%d]: got=%d, want=%d", i+1, got, want)
377-
}
378372
}
379373

380374
if !reflect.DeepEqual(offsets, arr.ValueOffsets()) {

arrow/ipc/writer.go

+6-2
Original file line numberDiff line numberDiff line change
@@ -627,9 +627,13 @@ func (w *recordEncoder) visit(p *Payload, arr arrow.Array) error {
627627
case needTruncate(int64(data.Offset()), values, totalDataBytes):
628628
// slice data buffer to include the range we need now.
629629
var (
630-
beg = arr.ValueOffset64(0)
631-
len = minI64(paddedLength(totalDataBytes, kArrowAlignment), int64(totalDataBytes))
630+
beg int64 = 0
631+
len = minI64(paddedLength(totalDataBytes, kArrowAlignment), int64(totalDataBytes))
632632
)
633+
if arr.Len() > 0 {
634+
beg = arr.ValueOffset64(0)
635+
}
636+
633637
values = memory.NewBufferBytes(data.Buffers()[2].Bytes()[beg : beg+len])
634638
default:
635639
if values != nil {

parquet/metadata/statistics_types.gen.go

+2-2
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)