You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@arrow.apache.org by ko...@apache.org on 2025/09/14 07:53:36 UTC
(arrow) branch main updated: GH-47552: [C++] Fix creating wrong object by `FixedShapeTensorType::MakeArray()` (#47533)
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 7548c3dd16 GH-47552: [C++] Fix creating wrong object by `FixedShapeTensorType::MakeArray()` (#47533)
7548c3dd16 is described below
commit 7548c3dd161ca875562b461469ac57400b415bd1
Author: corpoverlords <fj...@zoox.com>
AuthorDate: Sun Sep 14 00:53:31 2025 -0700
GH-47552: [C++] Fix creating wrong object by `FixedShapeTensorType::MakeArray()` (#47533)
### Rationale for this change
The builder should return the correct type.
### What changes are included in this PR?
One liner
### Are these changes tested?
Yes
### Are there any user-facing changes?
No
* GitHub Issue: #47552
Lead-authored-by: Fan Jiang <i...@fanjiang.me>
Co-authored-by: Fan Jiang <fj...@zoox.com>
Signed-off-by: Sutou Kouhei <ko...@clear-code.com>
---
cpp/src/arrow/extension/fixed_shape_tensor.cc | 2 +-
cpp/src/arrow/extension/fixed_shape_tensor_test.cc | 22 ++++++++++++++++++++++
2 files changed, 23 insertions(+), 1 deletion(-)
diff --git a/cpp/src/arrow/extension/fixed_shape_tensor.cc b/cpp/src/arrow/extension/fixed_shape_tensor.cc
index d8fed85b1e..bb7082e697 100644
--- a/cpp/src/arrow/extension/fixed_shape_tensor.cc
+++ b/cpp/src/arrow/extension/fixed_shape_tensor.cc
@@ -202,7 +202,7 @@ std::shared_ptr<Array> FixedShapeTensorType::MakeArray(
DCHECK_EQ(data->type->id(), Type::EXTENSION);
DCHECK_EQ("arrow.fixed_shape_tensor",
internal::checked_cast<const ExtensionType&>(*data->type).extension_name());
- return std::make_shared<ExtensionArray>(data);
+ return std::make_shared<FixedShapeTensorArray>(data);
}
Result<std::shared_ptr<Tensor>> FixedShapeTensorType::MakeTensor(
diff --git a/cpp/src/arrow/extension/fixed_shape_tensor_test.cc b/cpp/src/arrow/extension/fixed_shape_tensor_test.cc
index cfc1265696..6d4d2de326 100644
--- a/cpp/src/arrow/extension/fixed_shape_tensor_test.cc
+++ b/cpp/src/arrow/extension/fixed_shape_tensor_test.cc
@@ -152,6 +152,28 @@ TEST_F(TestExtensionType, CreateFromArray) {
ASSERT_EQ(ext_arr->null_count(), 0);
}
+TEST_F(TestExtensionType, MakeArrayCanGetCorrectScalarType) {
+ ASSERT_OK_AND_ASSIGN(auto tensor,
+ Tensor::Make(value_type_, Buffer::Wrap(values_), shape_));
+
+ auto exact_ext_type = internal::checked_pointer_cast<FixedShapeTensorType>(ext_type_);
+ ASSERT_OK_AND_ASSIGN(auto ext_arr, FixedShapeTensorArray::FromTensor(tensor));
+
+ auto data = ext_arr->data();
+ auto array = internal::checked_pointer_cast<FixedShapeTensorArray>(
+ exact_ext_type->MakeArray(data));
+ ASSERT_EQ(array->length(), shape_[0]);
+ ASSERT_EQ(array->null_count(), 0);
+
+ // Check that we can get the first element of the array
+ ASSERT_OK_AND_ASSIGN(auto first_element, array->GetScalar(0));
+ ASSERT_EQ(*(first_element->type),
+ *(fixed_shape_tensor(value_type_, element_shape_, {0, 1})));
+
+ ASSERT_OK_AND_ASSIGN(auto tensor_from_array, array->ToTensor());
+ ASSERT_TRUE(tensor->Equals(*tensor_from_array));
+}
+
void CheckSerializationRoundtrip(const std::shared_ptr<DataType>& ext_type) {
auto fst_type = internal::checked_pointer_cast<FixedShapeTensorType>(ext_type);
auto serialized = fst_type->Serialize();