From 1416f62b11abf5d39db46529a497e2bed33baa0d Mon Sep 17 00:00:00 2001 From: Sutou Kouhei Date: Mon, 9 Dec 2024 09:27:12 +0900 Subject: [PATCH] GH-44918: [Ruby] Fix a bug that empty list is ignored in builder (#44933) ### Rationale for this change `Arrow::ListArrayBuilder#append_value` with `[]` must append an empty list as an element. In general, it works but it doesn't work when list item is struct or list. Because `Arrow::{List,Struct}ArrayBuilder#append` without arguments appends an element. It's for a backward compatibility. But it has a problem for this case. For example, the following case has this problem: ```ruby 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 array.to_a # => must be [[]] but [] without this change ``` ### What changes are included in this PR? This should be fixed by GH-44763 but the fix was wrong. This change fixes wrong `return if` location. ### Are these changes tested? Yes. ### Are there any user-facing changes? Yes. * GitHub Issue: #44918 Authored-by: Sutou Kouhei Signed-off-by: Sutou Kouhei --- ruby/red-arrow/lib/arrow/list-array-builder.rb | 2 +- ruby/red-arrow/test/test-list-array-builder.rb | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/ruby/red-arrow/lib/arrow/list-array-builder.rb b/ruby/red-arrow/lib/arrow/list-array-builder.rb index 0b1d17f0a5491..d6975327b5130 100644 --- a/ruby/red-arrow/lib/arrow/list-array-builder.rb +++ b/ruby/red-arrow/lib/arrow/list-array-builder.rb @@ -54,8 +54,8 @@ def append_value(*args) when nil append_null when ::Array - return if value.empty? append_value_raw + return if value.empty? @value_builder ||= value_builder @value_builder.append(*value) else diff --git a/ruby/red-arrow/test/test-list-array-builder.rb b/ruby/red-arrow/test/test-list-array-builder.rb index 91105e92bf8d0..9fbd5e0976f5e 100644 --- a/ruby/red-arrow/test/test-list-array-builder.rb +++ b/ruby/red-arrow/test/test-list-array-builder.rb @@ -40,7 +40,7 @@ def setup builder = Arrow::ListArrayBuilder.new(data_type) builder.append_value([]) array = builder.finish - assert_equal([], array[0].to_a) + assert_equal([[]], array.to_a) end end