Skip to content

Commit 11b0ba9

Browse files
authored
Add AppendEmptyValue to opt builders (#969)
1 parent 764bcf4 commit 11b0ba9

File tree

2 files changed

+94
-0
lines changed

2 files changed

+94
-0
lines changed

pqarrow/builder/optbuilders.go

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -151,6 +151,13 @@ func (b *OptBinaryBuilder) AppendNull() {
151151
b.builderBase.AppendNulls(1)
152152
}
153153

154+
// AppendEmptyValue adds a new empty byte slice to the array being built.
155+
func (b *OptBinaryBuilder) AppendEmptyValue() {
156+
b.offsets = append(b.offsets, uint32(len(b.data)))
157+
// Don't append any data, just close the offset for an empty slice
158+
b.appendValid(1)
159+
}
160+
154161
// AppendNulls appends n null values to the array being built. This is specific
155162
// to distinct optimizations in FrostDB.
156163
func (b *OptBinaryBuilder) AppendNulls(n int) {
@@ -322,6 +329,11 @@ func (b *OptInt64Builder) AppendNull() {
322329
b.AppendNulls(1)
323330
}
324331

332+
// AppendEmptyValue adds a new zero value (0) to the array being built.
333+
func (b *OptInt64Builder) AppendEmptyValue() {
334+
b.Append(0)
335+
}
336+
325337
func (b *OptInt64Builder) AppendNulls(n int) {
326338
b.resizeData(b.length + n)
327339
b.builderBase.AppendNulls(n)
@@ -435,6 +447,11 @@ func (b *OptBooleanBuilder) AppendNull() {
435447
b.AppendNulls(1)
436448
}
437449

450+
// AppendEmptyValue adds a new zero value (false) to the array being built.
451+
func (b *OptBooleanBuilder) AppendEmptyValue() {
452+
b.AppendSingle(false)
453+
}
454+
438455
func (b *OptBooleanBuilder) AppendNulls(n int) {
439456
v := b.length + n
440457
b.data = resizeBitmap(b.data, v)
@@ -566,6 +583,11 @@ func (b *OptInt32Builder) AppendNull() {
566583
b.AppendNulls(1)
567584
}
568585

586+
// AppendEmptyValue adds a new zero value (0) to the array being built.
587+
func (b *OptInt32Builder) AppendEmptyValue() {
588+
b.Append(0)
589+
}
590+
569591
func (b *OptInt32Builder) AppendNulls(n int) {
570592
b.resizeData(b.length + n)
571593
b.builderBase.AppendNulls(n)
@@ -702,6 +724,11 @@ func (b *OptFloat64Builder) AppendNull() {
702724
b.AppendNulls(1)
703725
}
704726

727+
// AppendEmptyValue adds a new zero value (0.0) to the array being built.
728+
func (b *OptFloat64Builder) AppendEmptyValue() {
729+
b.Append(0.0)
730+
}
731+
705732
func (b *OptFloat64Builder) AppendNulls(n int) {
706733
b.resizeData(b.length + n)
707734
b.builderBase.AppendNulls(n)

pqarrow/builder/optbuilders_test.go

Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -169,3 +169,70 @@ func TestOptBinaryBuilder_Value(t *testing.T) {
169169
require.Equal(t, value, string(b.Value(i)))
170170
}
171171
}
172+
173+
func TestAppendEmptyValue(t *testing.T) {
174+
t.Run("OptBinaryBuilder", func(t *testing.T) {
175+
b := builder.NewOptBinaryBuilder(arrow.BinaryTypes.Binary)
176+
b.AppendEmptyValue()
177+
require.Equal(t, 1, b.Len())
178+
require.True(t, b.IsValid(0))
179+
require.Len(t, b.Value(0), 0) // Empty value should have length 0
180+
181+
arr := b.NewArray().(*array.Binary)
182+
require.Equal(t, 1, arr.Len())
183+
require.False(t, arr.IsNull(0))
184+
require.Len(t, arr.Value(0), 0) // Empty value should have length 0
185+
})
186+
187+
t.Run("OptInt64Builder", func(t *testing.T) {
188+
b := builder.NewOptInt64Builder(arrow.PrimitiveTypes.Int64)
189+
b.AppendEmptyValue()
190+
require.Equal(t, 1, b.Len())
191+
require.True(t, b.IsValid(0))
192+
require.Equal(t, int64(0), b.Value(0))
193+
194+
arr := b.NewArray().(*array.Int64)
195+
require.Equal(t, 1, arr.Len())
196+
require.False(t, arr.IsNull(0))
197+
require.Equal(t, int64(0), arr.Value(0))
198+
})
199+
200+
t.Run("OptInt32Builder", func(t *testing.T) {
201+
b := builder.NewOptInt32Builder(arrow.PrimitiveTypes.Int32)
202+
b.AppendEmptyValue()
203+
require.Equal(t, 1, b.Len())
204+
require.True(t, b.IsValid(0))
205+
require.Equal(t, int32(0), b.Value(0))
206+
207+
arr := b.NewArray().(*array.Int32)
208+
require.Equal(t, 1, arr.Len())
209+
require.False(t, arr.IsNull(0))
210+
require.Equal(t, int32(0), arr.Value(0))
211+
})
212+
213+
t.Run("OptFloat64Builder", func(t *testing.T) {
214+
b := builder.NewOptFloat64Builder(arrow.PrimitiveTypes.Float64)
215+
b.AppendEmptyValue()
216+
require.Equal(t, 1, b.Len())
217+
require.True(t, b.IsValid(0))
218+
require.Equal(t, 0.0, b.Value(0))
219+
220+
arr := b.NewArray().(*array.Float64)
221+
require.Equal(t, 1, arr.Len())
222+
require.False(t, arr.IsNull(0))
223+
require.Equal(t, 0.0, arr.Value(0))
224+
})
225+
226+
t.Run("OptBooleanBuilder", func(t *testing.T) {
227+
b := builder.NewOptBooleanBuilder(arrow.FixedWidthTypes.Boolean)
228+
b.AppendEmptyValue()
229+
require.Equal(t, 1, b.Len())
230+
require.True(t, b.IsValid(0))
231+
require.Equal(t, false, b.Value(0))
232+
233+
arr := b.NewArray().(*array.Boolean)
234+
require.Equal(t, 1, arr.Len())
235+
require.False(t, arr.IsNull(0))
236+
require.Equal(t, false, arr.Value(0))
237+
})
238+
}

0 commit comments

Comments
 (0)