public static Object convertFromDeltaColumnStatValue()

in xtable-core/src/main/java/org/apache/xtable/delta/DeltaValueConverter.java [62:100]


  public static Object convertFromDeltaColumnStatValue(Object value, InternalSchema fieldSchema) {
    if (value == null) {
      return null;
    }
    if (noConversionForSchema(fieldSchema)) {
      return castObjectToInternalType(value, fieldSchema);
    }
    // Needs special handling for date and time.
    InternalType fieldType = fieldSchema.getDataType();
    if (fieldType == InternalType.DATE) {
      return (int) LocalDate.parse(value.toString()).toEpochDay();
    }

    Instant instant;
    try {
      instant = OffsetDateTime.parse(value.toString()).toInstant();
    } catch (DateTimeParseException parseException) {
      // fall back to parsing without offset
      DateFormat dateFormat = getDateFormat(DATE_FORMAT_STR);
      try {
        instant = dateFormat.parse(value.toString()).toInstant();
      } catch (ParseException ex) {
        throw new org.apache.xtable.model.exception.ParseException(
            "Unable to parse time from column stats", ex);
      }
    }
    InternalSchema.MetadataValue timestampPrecision =
        (InternalSchema.MetadataValue)
            fieldSchema
                .getMetadata()
                .getOrDefault(
                    InternalSchema.MetadataKey.TIMESTAMP_PRECISION,
                    InternalSchema.MetadataValue.MICROS);
    if (timestampPrecision == InternalSchema.MetadataValue.MILLIS) {
      return instant.toEpochMilli();
    }
    return TimeUnit.SECONDS.toMicros(instant.getEpochSecond())
        + TimeUnit.NANOSECONDS.toMicros(instant.getNano());
  }