jacktengg commented on code in PR #66761:
URL: https://github.com/apache/doris/pull/66761#discussion_r3836349666
##########
be/src/exprs/function/function_datetime_floor_ceil.cpp:
##########
@@ -739,6 +754,86 @@ struct DateTimeFloorCeilCore {
trivial_part_ts_arg = calc_arg.microsecond();
trivial_part_ts_res = calc_origin.microsecond();
}
+ } else if constexpr (std::is_same_v<DateValueType, TimeStampNsValue>) {
+ const auto nanos_since_midnight = [](const TimeStampNsValue&
value) {
+ return value.time_part_to_seconds() *
TimeStampNsValue::NANOS_PER_SECOND +
+ value.nanosecond();
+ };
+ const auto nanos_since_date = [&](const TimeStampNsValue& value,
uint8_t month,
+ uint8_t day) {
+ return (value.daynr() - calc_daynr(value.year(), month, day))
* HOUR_PER_DAY *
+ SECOND_PER_HOUR *
TimeStampNsValue::NANOS_PER_SECOND +
+ nanos_since_midnight(value);
+ };
+
+ if constexpr (Flag::Unit == YEAR) {
+ diff = ts_arg.year() - ts_origin.year();
+ const auto calendar_remainder = [&](const TimeStampNsValue&
value) {
+ return (static_cast<int64_t>(value.month()) * 32 +
value.day()) * HOUR_PER_DAY *
+ SECOND_PER_HOUR *
TimeStampNsValue::NANOS_PER_SECOND +
+ nanos_since_midnight(value);
+ };
+ trivial_part_ts_arg = calendar_remainder(ts_arg);
+ trivial_part_ts_res = calendar_remainder(ts_origin);
+ }
+ if constexpr (Flag::Unit == QUARTER) {
+ const int64_t total_months = (ts_arg.year() -
ts_origin.year()) * 12 +
+ ts_arg.month() -
ts_origin.month();
+ diff = total_months / 3;
+ const int64_t remaining_months = total_months % 3;
+ if (remaining_months != 0) {
+ trivial_part_ts_arg = remaining_months;
+ trivial_part_ts_res = 0;
+ } else {
+ trivial_part_ts_arg = nanos_since_date(ts_arg,
ts_arg.month(), 1);
+ trivial_part_ts_res = nanos_since_date(ts_origin,
ts_origin.month(), 1);
+ }
+ }
+ if constexpr (Flag::Unit == MONTH) {
+ diff = (ts_arg.year() - ts_origin.year()) * 12 +
+ (ts_arg.month() - ts_origin.month());
+ trivial_part_ts_arg = nanos_since_date(ts_arg, ts_arg.month(),
1);
Review Comment:
Legacy problem, datetimev2 also has this problem, not fix in thi pr.
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]