diff --git a/c_glib/test/helper/buildable.rb b/c_glib/test/helper/buildable.rb index f3ae709512e..a9c514c2747 100644 --- a/c_glib/test/helper/buildable.rb +++ b/c_glib/test/helper/buildable.rb @@ -101,8 +101,8 @@ def build_string_array(values) build_array(Arrow::StringArrayBuilder.new, values) end - def build_list_array(value_data_type, values_list) - value_field = Arrow::Field.new("value", value_data_type) + def build_list_array(value_data_type, values_list, field_name: "value") + value_field = Arrow::Field.new(field_name, value_data_type) data_type = Arrow::ListDataType.new(value_field) builder = Arrow::ListArrayBuilder.new(data_type) values_list.each do |values| diff --git a/c_glib/test/test-list-array.rb b/c_glib/test/test-list-array.rb index abbd00452f3..eea16ccbbb3 100644 --- a/c_glib/test/test-list-array.rb +++ b/c_glib/test/test-list-array.rb @@ -19,7 +19,7 @@ class TestListArray < Test::Unit::TestCase include Helper::Buildable def test_new - field = Arrow::Field.new("item", Arrow::Int8DataType.new) + field = Arrow::Field.new("value", Arrow::Int8DataType.new) data_type = Arrow::ListDataType.new(field) value_offsets = Arrow::Buffer.new([0, 2, 5, 5].pack("l*")) data = Arrow::Buffer.new([1, 2, 3, 4, 5].pack("c*")) diff --git a/c_glib/test/test-orc-file-reader.rb b/c_glib/test/test-orc-file-reader.rb index 544112ccbc5..8b4f08ff364 100644 --- a/c_glib/test/test-orc-file-reader.rb +++ b/c_glib/test/test-orc-file-reader.rb @@ -64,7 +64,7 @@ def item_data_type end def build_items_array(items_array) - build_list_array(item_data_type, items_array) + build_list_array(item_data_type, items_array, field_name: "item") end def items_data_type @@ -93,7 +93,7 @@ def key_value_data_type end def build_key_value_array(key_value_array) - build_list_array(key_value_data_type, key_value_array) + build_list_array(key_value_data_type, key_value_array, field_name: "item") end def middle_array diff --git a/cpp/src/arrow/array-list-test.cc b/cpp/src/arrow/array-list-test.cc index e61667495a6..cb848962baf 100644 --- a/cpp/src/arrow/array-list-test.cc +++ b/cpp/src/arrow/array-list-test.cc @@ -296,4 +296,21 @@ TEST_F(TestListArray, TestZeroLength) { ASSERT_OK(ValidateArray(*result_)); } +TEST_F(TestListArray, TestBuilderPreserveFieleName) { + auto list_type_with_name = list(field("counts", int32())); + + std::unique_ptr tmp; + ASSERT_OK(MakeBuilder(pool_, list_type_with_name, &tmp)); + builder_.reset(checked_cast(tmp.release())); + + vector values = {1, 2, 4, 8}; + ASSERT_OK(builder_->AppendValues(values.data(), values.size())); + + std::shared_ptr list_array; + ASSERT_OK(builder_->Finish(&list_array)); + + const auto& type = checked_cast(*list_array->type()); + ASSERT_EQ("counts", type.value_field()->name()); +} + } // namespace arrow diff --git a/cpp/src/arrow/builder.cc b/cpp/src/arrow/builder.cc index 2072edc936a..8d0ab194c24 100644 --- a/cpp/src/arrow/builder.cc +++ b/cpp/src/arrow/builder.cc @@ -75,7 +75,7 @@ Status MakeBuilder(MemoryPool* pool, const std::shared_ptr& type, std::shared_ptr value_type = internal::checked_cast(*type).value_type(); RETURN_NOT_OK(MakeBuilder(pool, value_type, &value_builder)); - out->reset(new ListBuilder(pool, std::move(value_builder))); + out->reset(new ListBuilder(pool, std::move(value_builder), type)); return Status::OK(); }