Skip to content

Commit

Permalink
update
Browse files Browse the repository at this point in the history
  • Loading branch information
NEUpanning committed Oct 13, 2024
1 parent 5548be8 commit ded5f43
Show file tree
Hide file tree
Showing 2 changed files with 28 additions and 22 deletions.
5 changes: 4 additions & 1 deletion velox/functions/prestosql/DateTimeFunctions.h
Original file line number Diff line number Diff line change
Expand Up @@ -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();
}

Expand Down
45 changes: 24 additions & 21 deletions velox/functions/prestosql/types/TimestampWithTimeZoneType.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -109,27 +109,30 @@ void castToString(
auto* flatResult = result.as<FlatVector<StringView>>();
const auto* timestamps = input.as<SimpleVector<int64_t>>();

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<false> 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<false> 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(
Expand Down

0 comments on commit ded5f43

Please sign in to comment.