From 7d1f438049913c3df261976cf37a151addd9e17a Mon Sep 17 00:00:00 2001 From: Felipe Oliveira Carvalho Date: Sun, 21 Jul 2024 14:39:44 -0300 Subject: [PATCH] FIX: Don't say dictionary casts are supported yet --- cpp/src/arrow/compute/kernels/scalar_cast_internal.cc | 4 +++- cpp/src/arrow/compute/kernels/scalar_cast_test.cc | 6 +++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/cpp/src/arrow/compute/kernels/scalar_cast_internal.cc b/cpp/src/arrow/compute/kernels/scalar_cast_internal.cc index 101602c658f3b..5c43d87edcab9 100644 --- a/cpp/src/arrow/compute/kernels/scalar_cast_internal.cc +++ b/cpp/src/arrow/compute/kernels/scalar_cast_internal.cc @@ -279,8 +279,10 @@ void AddZeroCopyCast(Type::type in_type_id, InputType in_type, OutputType out_ty } static bool CanCastFromDictionary(Type::type type_id) { + /// TODO(GH-43010): add is_binary_view_like() here once array_take + /// can handle string-views return (is_primitive(type_id) || is_base_binary_like(type_id) || - is_fixed_size_binary(type_id) || is_binary_view_like(type_id)); + is_fixed_size_binary(type_id)); } void AddCommonCasts(Type::type out_type_id, OutputType out_ty, CastFunction* func) { diff --git a/cpp/src/arrow/compute/kernels/scalar_cast_test.cc b/cpp/src/arrow/compute/kernels/scalar_cast_test.cc index c2fd7ec1aaeaf..881c5ff69cc7f 100644 --- a/cpp/src/arrow/compute/kernels/scalar_cast_test.cc +++ b/cpp/src/arrow/compute/kernels/scalar_cast_test.cc @@ -205,7 +205,11 @@ TEST(Cast, CanCast) { ExpectCanCast(from_base_binary, {boolean()}); ExpectCanCast(from_base_binary, kNumericTypes); ExpectCanCast(from_base_binary, kBaseBinaryTypes); - ExpectCanCast(dictionary(int64(), from_base_binary), {from_base_binary}); + /// TODO(GH-43010): include is_binary_view_like() types here once array_take + /// can handle string-views + if (!is_binary_view_like(*from_base_binary)) { + ExpectCanCast(dictionary(int64(), from_base_binary), {from_base_binary}); + } // any cast which is valid for the dictionary is valid for the DictionaryArray ExpectCanCast(dictionary(uint32(), from_base_binary), kBaseBinaryTypes);