From 6e41bbf4fb98ece09e5f480a9d44c00d2b8d2c75 Mon Sep 17 00:00:00 2001 From: Sutou Kouhei Date: Mon, 2 Feb 2026 21:55:31 +0900 Subject: [PATCH] GH-49119: [Ruby] Add support for writing map array --- .../red-arrow-format/lib/arrow-format/type.rb | 4 ++++ ruby/red-arrow-format/test/test-writer.rb | 23 +++++++++++++++++++ 2 files changed, 27 insertions(+) diff --git a/ruby/red-arrow-format/lib/arrow-format/type.rb b/ruby/red-arrow-format/lib/arrow-format/type.rb index c12d2d6e0810..dcfec3077b34 100644 --- a/ruby/red-arrow-format/lib/arrow-format/type.rb +++ b/ruby/red-arrow-format/lib/arrow-format/type.rb @@ -791,6 +791,10 @@ def name def build_array(size, validity_buffer, offsets_buffer, child) MapArray.new(self, size, validity_buffer, offsets_buffer, child) end + + def to_flatbuffers + FB::Map::Data.new + end end class UnionType < Type diff --git a/ruby/red-arrow-format/test/test-writer.rb b/ruby/red-arrow-format/test/test-writer.rb index c0e4dd460799..2b32431a07da 100644 --- a/ruby/red-arrow-format/test/test-writer.rb +++ b/ruby/red-arrow-format/test/test-writer.rb @@ -85,6 +85,8 @@ def convert_type(red_arrow_type) red_arrow_type.scale) when Arrow::FixedSizeBinaryDataType ArrowFormat::FixedSizeBinaryType.new(red_arrow_type.byte_width) + when Arrow::MapDataType + ArrowFormat::MapType.new(convert_field(red_arrow_type.field)) when Arrow::ListDataType ArrowFormat::ListType.new(convert_field(red_arrow_type.field)) when Arrow::LargeListDataType @@ -823,6 +825,27 @@ def test_write end end + sub_test_case("Map") do + def build_array + data_type = Arrow::MapDataType.new(:string, :int8) + Arrow::MapArray.new(data_type, + [ + {"a" => -128, "b" => 127}, + nil, + {"c" => nil}, + ]) + end + + def test_write + assert_equal([ + {"a" => -128, "b" => 127}, + nil, + {"c" => nil}, + ], + @values) + end + end + sub_test_case("Struct") do def build_array data_type = Arrow::StructDataType.new(count: :int8,