Skip to content

Commit f797801

Browse files
authored
apacheGH-49030: [Ruby] Add support for writing fixed size binary array (apache#49031)
### Rationale for this change It's a fixed size variant of binary array. ### What changes are included in this PR? * Add `ArrowFormat::FixedSizeBinaryType#to_flatbuffers` * Add `ArrowFormat::FixedSizeBinaryArray#each_buffer` ### Are these changes tested? Yes. ### Are there any user-facing changes? Yes. * GitHub Issue: apache#49030 Authored-by: Sutou Kouhei <[email protected]> Signed-off-by: Sutou Kouhei <[email protected]>
1 parent 5d3014a commit f797801

File tree

3 files changed

+32
-0
lines changed

3 files changed

+32
-0
lines changed

ruby/red-arrow-format/lib/arrow-format/array.rb

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -301,6 +301,13 @@ def initialize(type, size, validity_buffer, values_buffer)
301301
@values_buffer = values_buffer
302302
end
303303

304+
def each_buffer
305+
return to_enum(__method__) unless block_given?
306+
307+
yield(@validity_buffer)
308+
yield(@values_buffer)
309+
end
310+
304311
def to_a
305312
byte_width = @type.byte_width
306313
values = 0.step(@size * byte_width - 1, byte_width).collect do |offset|

ruby/red-arrow-format/lib/arrow-format/type.rb

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -611,6 +611,12 @@ def name
611611
def build_array(size, validity_buffer, values_buffer)
612612
FixedSizeBinaryArray.new(self, size, validity_buffer, values_buffer)
613613
end
614+
615+
def to_flatbuffers
616+
fb_type = FB::FixedSizeBinary::Data.new
617+
fb_type.byte_width = @byte_width
618+
fb_type
619+
end
614620
end
615621

616622
class DecimalType < FixedSizeBinaryType

ruby/red-arrow-format/test/test-writer.rb

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,8 @@ def convert_type(red_arrow_type)
6868
ArrowFormat::UTF8Type.singleton
6969
when Arrow::LargeStringDataType
7070
ArrowFormat::LargeUTF8Type.singleton
71+
when Arrow::FixedSizeBinaryDataType
72+
ArrowFormat::FixedSizeBinaryType.new(red_arrow_type.byte_width)
7173
else
7274
raise "Unsupported type: #{red_arrow_type.inspect}"
7375
end
@@ -92,6 +94,10 @@ def convert_array(red_arrow_array)
9294
convert_buffer(red_arrow_array.null_bitmap),
9395
convert_buffer(red_arrow_array.offsets_buffer),
9496
convert_buffer(red_arrow_array.data_buffer))
97+
when ArrowFormat::FixedSizeBinaryType
98+
type.build_array(red_arrow_array.size,
99+
convert_buffer(red_arrow_array.null_bitmap),
100+
convert_buffer(red_arrow_array.data_buffer))
95101
else
96102
raise "Unsupported array #{red_arrow_array.inspect}"
97103
end
@@ -425,6 +431,19 @@ def test_write
425431
@values)
426432
end
427433
end
434+
435+
sub_test_case("FixedSizeBinary") do
436+
def build_array
437+
data_type = Arrow::FixedSizeBinaryDataType.new(4)
438+
Arrow::FixedSizeBinaryArray.new(data_type,
439+
["0124".b, nil, "abcd".b])
440+
end
441+
442+
def test_write
443+
assert_equal(["0124".b, nil, "abcd".b],
444+
@values)
445+
end
446+
end
428447
end
429448
end
430449
end

0 commit comments

Comments
 (0)