Skip to content

Commit aba5551

Browse files
committed
go/arrow/array: implement Stringer for Binary array
1 parent 7cdc3c0 commit aba5551

2 files changed

Lines changed: 43 additions & 0 deletions

File tree

go/arrow/array/binary.go

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@
1717
package array
1818

1919
import (
20+
"fmt"
21+
"strings"
2022
"unsafe"
2123

2224
"github.com/apache/arrow/go/arrow"
@@ -80,6 +82,24 @@ func (a *Binary) ValueBytes() []byte {
8082
return a.valueBytes[a.valueOffsets[beg]:a.valueOffsets[end]]
8183
}
8284

85+
func (a *Binary) String() string {
86+
o := new(strings.Builder)
87+
o.WriteString("[")
88+
for i := 0; i < a.Len(); i++ {
89+
if i > 0 {
90+
o.WriteString(" ")
91+
}
92+
switch {
93+
case a.IsNull(i):
94+
o.WriteString("(null)")
95+
default:
96+
fmt.Fprintf(o, "%q", a.ValueString(i))
97+
}
98+
}
99+
o.WriteString("]")
100+
return o.String()
101+
}
102+
83103
func (a *Binary) setData(data *Data) {
84104
if len(data.buffers) != 3 {
85105
panic("len(data.buffers) != 3")

go/arrow/array/binary_test.go

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -405,3 +405,26 @@ func TestBinaryValueBytes(t *testing.T) {
405405

406406
assert.Equal(t, []byte{'h', 'i', 'j', 'k', 'l', 'm', 'o', 'p', 'q'}, slice.ValueBytes())
407407
}
408+
409+
func TestBinaryStringer(t *testing.T) {
410+
mem := memory.NewCheckedAllocator(memory.NewGoAllocator())
411+
defer mem.AssertSize(t, 0)
412+
413+
values := []string{"a", "bc", "", "é", "", "hijk", "lm", "", "opq", "", "tu"}
414+
valids := []bool{true, true, false, true, false, true, true, true, true, false, true}
415+
416+
b := NewBinaryBuilder(mem, arrow.BinaryTypes.Binary)
417+
defer b.Release()
418+
419+
b.AppendStringValues(values, valids)
420+
421+
arr := b.NewArray().(*Binary)
422+
defer arr.Release()
423+
424+
got := arr.String()
425+
want := `["a" "bc" (null) "é" (null) "hijk" "lm" "" "opq" (null) "tu"]`
426+
427+
if got != want {
428+
t.Fatalf("invalid stringer:\ngot= %s\nwant=%s\n", got, want)
429+
}
430+
}

0 commit comments

Comments
 (0)