absl::Status ExtractFromTime()

in sql_utils/public/functions/date_time_util.cc [2607:2655]


absl::Status ExtractFromTime(DateTimestampPart part, const TimeValue& time,
                             int32_t* output) {
  if (!time.IsValid()) {
    return MakeEvalError() << "Invalid time value: " << time.DebugString();
  }
  switch (part) {
    case YEAR:
    case MONTH:
    case DAY:
    case DAYOFWEEK:
    case DAYOFYEAR:
    case QUARTER:
    case DATE:
    case WEEK:
    case WEEK_MONDAY:
    case WEEK_TUESDAY:
    case WEEK_WEDNESDAY:
    case WEEK_THURSDAY:
    case WEEK_FRIDAY:
    case WEEK_SATURDAY:
    case DATETIME:
    case TIME:
      return MakeEvalError()
             << "Unsupported DateTimestampPart " << DateTimestampPart_Name(part)
             << " to extract from time";
    case HOUR:
      *output = time.Hour();
      break;
    case MINUTE:
      *output = time.Minute();
      break;
    case SECOND:
      *output = time.Second();
      break;
    case MILLISECOND:
      *output = time.Microseconds() / 1000;
      break;
    case MICROSECOND:
      *output = time.Microseconds();
      break;
    case NANOSECOND:
      *output = time.Nanoseconds();
      break;
    default:
      return MakeEvalError()
             << "Unexpected DateTimestampPart " << DateTimestampPart_Name(part);
  }
  return absl::OkStatus();
}