Skip to content

Commit db349f1

Browse files
authored
GH-49119: [Ruby] Add support for writing map array (#49120)
### Rationale for this change It's a list based array. ### What changes are included in this PR? * Add `ArrowFormat::MapType#to_flatbuffers` ### Are these changes tested? Yes. ### Are there any user-facing changes? Yes. * GitHub Issue: #49119 Authored-by: Sutou Kouhei <kou@clear-code.com> Signed-off-by: Sutou Kouhei <kou@clear-code.com>
1 parent 262e4e1 commit db349f1

2 files changed

Lines changed: 27 additions & 0 deletions

File tree

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -791,6 +791,10 @@ def name
791791
def build_array(size, validity_buffer, offsets_buffer, child)
792792
MapArray.new(self, size, validity_buffer, offsets_buffer, child)
793793
end
794+
795+
def to_flatbuffers
796+
FB::Map::Data.new
797+
end
794798
end
795799

796800
class UnionType < Type

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

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,8 @@ def convert_type(red_arrow_type)
8585
red_arrow_type.scale)
8686
when Arrow::FixedSizeBinaryDataType
8787
ArrowFormat::FixedSizeBinaryType.new(red_arrow_type.byte_width)
88+
when Arrow::MapDataType
89+
ArrowFormat::MapType.new(convert_field(red_arrow_type.field))
8890
when Arrow::ListDataType
8991
ArrowFormat::ListType.new(convert_field(red_arrow_type.field))
9092
when Arrow::LargeListDataType
@@ -851,6 +853,27 @@ def test_write
851853
end
852854
end
853855

856+
sub_test_case("Map") do
857+
def build_array
858+
data_type = Arrow::MapDataType.new(:string, :int8)
859+
Arrow::MapArray.new(data_type,
860+
[
861+
{"a" => -128, "b" => 127},
862+
nil,
863+
{"c" => nil},
864+
])
865+
end
866+
867+
def test_write
868+
assert_equal([
869+
{"a" => -128, "b" => 127},
870+
nil,
871+
{"c" => nil},
872+
],
873+
@values)
874+
end
875+
end
876+
854877
sub_test_case("Struct") do
855878
def build_array
856879
data_type = Arrow::StructDataType.new(count: :int8,

0 commit comments

Comments
 (0)