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