From c6bb2ecc8b06e6459159ae883a78af5ae2fb84ca Mon Sep 17 00:00:00 2001 From: Ruoxi Sun Date: Sun, 7 Apr 2024 15:29:54 +0800 Subject: [PATCH] Fix map scalar to string --- cpp/src/arrow/scalar.cc | 2 ++ cpp/src/arrow/scalar_test.cc | 11 +++++++++++ 2 files changed, 13 insertions(+) diff --git a/cpp/src/arrow/scalar.cc b/cpp/src/arrow/scalar.cc index 58516801ee235..f6d07505e3db3 100644 --- a/cpp/src/arrow/scalar.cc +++ b/cpp/src/arrow/scalar.cc @@ -1391,6 +1391,8 @@ struct FromTypeVisitor : CastImplVisitor { return CastFromListLike(large_list_view_type); } + Status Visit(const MapType& map_type) { return CastFromListLike(map_type); } + Status Visit(const NullType&) { return NotImplemented(); } Status Visit(const DictionaryType&) { return NotImplemented(); } Status Visit(const ExtensionType&) { return NotImplemented(); } diff --git a/cpp/src/arrow/scalar_test.cc b/cpp/src/arrow/scalar_test.cc index ea4eb145cfe37..48074750fd41e 100644 --- a/cpp/src/arrow/scalar_test.cc +++ b/cpp/src/arrow/scalar_test.cc @@ -1286,6 +1286,17 @@ TEST(TestMapScalar, Cast) { CheckListCastError(scalar, invalid_cast_type); } +TEST(TestMapScalar, ToString) { + auto key_value_type = struct_({field("key", utf8(), false), field("value", int8())}); + auto value = ArrayFromJSON(key_value_type, + R"([{"key": "a", "value": 1}, {"key": "b", "value": 2}])"); + auto scalar = MapScalar(value); + + ASSERT_EQ( + scalar.ToString(), + R"(map[{key:string = a, value:int8 = 1}, {key:string = b, value:int8 = 2}])"); +} + TEST(TestStructScalar, FieldAccess) { StructScalar abc({MakeScalar(true), MakeNullScalar(int32()), MakeScalar("hello"), MakeNullScalar(int64())},