From 5d2581ebea4579e9dc36d63a3f06fc42f8df102d Mon Sep 17 00:00:00 2001 From: David Li Date: Thu, 9 Sep 2021 10:15:28 -0400 Subject: [PATCH] ARROW-13961: [C++] Fix use of non-const references, declaration without initialization --- .../arrow/compute/kernels/scalar_temporal.cc | 60 +++++++++---------- 1 file changed, 27 insertions(+), 33 deletions(-) diff --git a/cpp/src/arrow/compute/kernels/scalar_temporal.cc b/cpp/src/arrow/compute/kernels/scalar_temporal.cc index b60e4ef71f0..5ba89adf3dc 100644 --- a/cpp/src/arrow/compute/kernels/scalar_temporal.cc +++ b/cpp/src/arrow/compute/kernels/scalar_temporal.cc @@ -608,7 +608,7 @@ struct Strftime { // Extract ISO calendar values from temporal types template -inline std::array GetIsoCalendar(int64_t arg, Localizer&& localizer) { +std::array GetIsoCalendar(int64_t arg, Localizer&& localizer) { const auto t = floor(localizer.template ConvertTimePoint(arg)); const auto ymd = year_month_day(t); auto y = year_month_day{t + days{3}}.year(); @@ -624,69 +624,64 @@ inline std::array GetIsoCalendar(int64_t arg, Localizer&& localizer) template struct ISOCalendarWrapper { - static Status Get(const Scalar& in, std::array& iso_calendar) { + static Result> Get(const Scalar& in) { const auto& in_val = internal::UnboxScalar::Unbox(in); - iso_calendar = GetIsoCalendar(in_val, NonZonedLocalizer{}); - return Status::OK(); + return GetIsoCalendar(in_val, NonZonedLocalizer{}); } }; template struct ISOCalendarWrapper { - static Status Get(const Scalar& in, std::array& iso_calendar) { + static Result> Get(const Scalar& in) { const auto& in_val = internal::UnboxScalar::Unbox(in); const auto& timezone = GetInputTimezone(in); if (timezone.empty()) { - iso_calendar = GetIsoCalendar(in_val, NonZonedLocalizer{}); + return GetIsoCalendar(in_val, NonZonedLocalizer{}); } else { ARROW_ASSIGN_OR_RAISE(auto tz, LocateZone(timezone)); - iso_calendar = GetIsoCalendar(in_val, ZonedLocalizer{tz}); + return GetIsoCalendar(in_val, ZonedLocalizer{tz}); } - return Status::OK(); } }; template struct ISOCalendarVisitValueFunction { - static Status Get(std::vector& field_builders, const ArrayData&, - StructBuilder* struct_builder, - std::function& visit_value) { - visit_value = [=](typename InType::c_type arg) { + static Result> Get( + const std::vector& field_builders, const ArrayData&, + StructBuilder* struct_builder) { + return [=](typename InType::c_type arg) { const auto iso_calendar = GetIsoCalendar(arg, NonZonedLocalizer{}); field_builders[0]->UnsafeAppend(iso_calendar[0]); field_builders[1]->UnsafeAppend(iso_calendar[1]); field_builders[2]->UnsafeAppend(iso_calendar[2]); return struct_builder->Append(); }; - return Status::OK(); } }; template struct ISOCalendarVisitValueFunction { - static Status Get(std::vector& field_builders, const ArrayData& in, - StructBuilder* struct_builder, - std::function& visit_value) { + static Result> Get( + const std::vector& field_builders, const ArrayData& in, + StructBuilder* struct_builder) { const auto& timezone = GetInputTimezone(in); if (timezone.empty()) { - visit_value = [=](TimestampType::c_type arg) { + return [=](TimestampType::c_type arg) { const auto iso_calendar = GetIsoCalendar(arg, NonZonedLocalizer{}); field_builders[0]->UnsafeAppend(iso_calendar[0]); field_builders[1]->UnsafeAppend(iso_calendar[1]); field_builders[2]->UnsafeAppend(iso_calendar[2]); return struct_builder->Append(); }; - } else { - ARROW_ASSIGN_OR_RAISE(auto tz, LocateZone(timezone)); - visit_value = [=](TimestampType::c_type arg) { - const auto iso_calendar = GetIsoCalendar(arg, ZonedLocalizer{tz}); - field_builders[0]->UnsafeAppend(iso_calendar[0]); - field_builders[1]->UnsafeAppend(iso_calendar[1]); - field_builders[2]->UnsafeAppend(iso_calendar[2]); - return struct_builder->Append(); - }; } - return Status::OK(); + ARROW_ASSIGN_OR_RAISE(auto tz, LocateZone(timezone)); + return [=](TimestampType::c_type arg) { + const auto iso_calendar = GetIsoCalendar(arg, ZonedLocalizer{tz}); + field_builders[0]->UnsafeAppend(iso_calendar[0]); + field_builders[1]->UnsafeAppend(iso_calendar[1]); + field_builders[2]->UnsafeAppend(iso_calendar[2]); + return struct_builder->Append(); + }; } }; @@ -694,9 +689,8 @@ template struct ISOCalendar { static Status Call(KernelContext* ctx, const Scalar& in, Scalar* out) { if (in.is_valid) { - std::array iso_calendar; - auto self = ISOCalendarWrapper::Get(in, iso_calendar); - RETURN_NOT_OK(self); + ARROW_ASSIGN_OR_RAISE(auto iso_calendar, + (ISOCalendarWrapper::Get(in))); ScalarVector values = {std::make_shared(iso_calendar[0]), std::make_shared(iso_calendar[1]), std::make_shared(iso_calendar[2])}; @@ -725,9 +719,9 @@ struct ISOCalendar { } auto visit_null = [&]() { return struct_builder->AppendNull(); }; std::function visit_value; - auto visitor = ISOCalendarVisitValueFunction::Get( - field_builders, in, struct_builder, visit_value); - RETURN_NOT_OK(visitor); + ARROW_ASSIGN_OR_RAISE( + visit_value, (ISOCalendarVisitValueFunction::Get( + field_builders, in, struct_builder))); RETURN_NOT_OK( VisitArrayDataInline(in, visit_value, visit_null)); std::shared_ptr out_array;