diff --git a/velox/functions/prestosql/DateTimeFunctions.h b/velox/functions/prestosql/DateTimeFunctions.h index 6f149a545913..3a62cb1d7d04 100644 --- a/velox/functions/prestosql/DateTimeFunctions.h +++ b/velox/functions/prestosql/DateTimeFunctions.h @@ -1793,7 +1793,10 @@ struct ToISO8601Function { ToISO8601Function() { auto formatter = functions::buildJodaDateTimeFormatter("yyyy-MM-dd'T'HH:mm:ss.SSSZZ"); - VELOX_CHECK(!formatter.hasError(), "Default format should always be valid"); + VELOX_CHECK( + !formatter.hasError(), + "Default format should always be valid, error: " + + formatter.error().message()); formatter_ = formatter.value(); } diff --git a/velox/functions/prestosql/types/TimestampWithTimeZoneType.cpp b/velox/functions/prestosql/types/TimestampWithTimeZoneType.cpp index 806535904bd9..b851c053193a 100644 --- a/velox/functions/prestosql/types/TimestampWithTimeZoneType.cpp +++ b/velox/functions/prestosql/types/TimestampWithTimeZoneType.cpp @@ -109,27 +109,30 @@ void castToString( auto* flatResult = result.as>(); const auto* timestamps = input.as>(); - functions::buildJodaDateTimeFormatter("yyyy-MM-dd HH:mm:ss.SSS zzzz") - .thenOrThrow([&](auto formatter) { - context.applyToSelectedNoThrow(rows, [&](auto row) { - const auto timestampWithTimezone = timestamps->valueAt(row); - - const auto timestamp = unpackTimestampUtc(timestampWithTimezone); - const auto timeZoneId = unpackZoneKeyId(timestampWithTimezone); - const auto* timezonePtr = - tz::locateZone(tz::getTimeZoneName(timeZoneId)); - - exec::StringWriter result(flatResult, row); - - const auto maxResultSize = formatter->maxResultSize(timezonePtr); - result.reserve(maxResultSize); - const auto resultSize = formatter->format( - timestamp, timezonePtr, maxResultSize, result.data()); - result.resize(resultSize); - - result.finalize(); - }); - }); + auto expectedFormatter = + functions::buildJodaDateTimeFormatter("yyyy-MM-dd HH:mm:ss.SSS zzzz"); + VELOX_CHECK( + !expectedFormatter.hasError(), + "Default format should always be valid, error: " + + expectedFormatter.error().message()); + auto formatter = expectedFormatter.value(); + context.applyToSelectedNoThrow(rows, [&](auto row) { + const auto timestampWithTimezone = timestamps->valueAt(row); + + const auto timestamp = unpackTimestampUtc(timestampWithTimezone); + const auto timeZoneId = unpackZoneKeyId(timestampWithTimezone); + const auto* timezonePtr = tz::locateZone(tz::getTimeZoneName(timeZoneId)); + + exec::StringWriter result(flatResult, row); + + const auto maxResultSize = formatter->maxResultSize(timezonePtr); + result.reserve(maxResultSize); + const auto resultSize = + formatter->format(timestamp, timezonePtr, maxResultSize, result.data()); + result.resize(resultSize); + + result.finalize(); + }); } void castToTimestamp(