This is an automated email from the ASF dual-hosted git repository.

kou pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/arrow.git


The following commit(s) were added to refs/heads/main by this push:
     new 66c2cf08d7 GH-44742: [Ruby] Fix a bug that empty struct list value 
can't be built (#44763)
66c2cf08d7 is described below

commit 66c2cf08d7fb3d941709b78f75230967c0fb62f4
Author: Sutou Kouhei <[email protected]>
AuthorDate: Tue Nov 19 09:46:25 2024 +0900

    GH-44742: [Ruby] Fix a bug that empty struct list value can't be built 
(#44763)
    
    ### Rationale for this change
    
    This codes add a list value but no struct value isn't added:
    
    ```ruby
    
    require "arrow"
    
    schema = Arrow::Schema.new(
      [
       Arrow::Field.new("structs", Arrow::ListDataType.new(
         Arrow::StructDataType.new([
           Arrow::Field.new("foo", :int64),
           Arrow::Field.new("bar", :int64)
         ])
       ))
     ]
    )
    
    Arrow::RecordBatchBuilder.build(schema, [{structs: []}])
    ```
    
    ### What changes are included in this PR?
    
    Don't add a list value.
    
    ### Are these changes tested?
    
    Yes.
    
    ### Are there any user-facing changes?
    
    Yes.
    * GitHub Issue: #44742
    
    Authored-by: Sutou Kouhei <[email protected]>
    Signed-off-by: Sutou Kouhei <[email protected]>
---
 ruby/red-arrow/lib/arrow/list-array-builder.rb | 1 +
 ruby/red-arrow/test/test-list-array-builder.rb | 9 +++++++++
 2 files changed, 10 insertions(+)

diff --git a/ruby/red-arrow/lib/arrow/list-array-builder.rb 
b/ruby/red-arrow/lib/arrow/list-array-builder.rb
index d889c8a0cf..0b1d17f0a5 100644
--- a/ruby/red-arrow/lib/arrow/list-array-builder.rb
+++ b/ruby/red-arrow/lib/arrow/list-array-builder.rb
@@ -54,6 +54,7 @@ module Arrow
         when nil
           append_null
         when ::Array
+          return if value.empty?
           append_value_raw
           @value_builder ||= value_builder
           @value_builder.append(*value)
diff --git a/ruby/red-arrow/test/test-list-array-builder.rb 
b/ruby/red-arrow/test/test-list-array-builder.rb
index aee31e73b1..91105e92bf 100644
--- a/ruby/red-arrow/test/test-list-array-builder.rb
+++ b/ruby/red-arrow/test/test-list-array-builder.rb
@@ -33,6 +33,15 @@ class ListArrayBuilderTest < Test::Unit::TestCase
       array = @builder.finish
       assert_equal([true, false, true], array[0].to_a)
     end
+
+    test("Struct[]") do
+      item_type = Arrow::StructDataType.new([{name: "visible", type: 
:boolean}])
+      data_type = Arrow::ListDataType.new(name: "struct", data_type: item_type)
+      builder = Arrow::ListArrayBuilder.new(data_type)
+      builder.append_value([])
+      array = builder.finish
+      assert_equal([], array[0].to_a)
+    end
   end
 
   sub_test_case("#append_values") do

Reply via email to