epgif commented on code in PR #9008:
URL: https://github.com/apache/iceberg/pull/9008#discussion_r1629892323


##########
api/src/main/java/org/apache/iceberg/transforms/SortOrderVisitor.java:
##########
@@ -85,21 +85,18 @@ static <R> List<R> visit(SortOrder sortOrder, 
SortOrderVisitor<R> visitor) {
             visitor.truncate(
                 sourceName, field.sourceId(), width, field.direction(), 
field.nullOrder()));
       } else if (transform == Dates.YEAR
-          || transform == Timestamps.YEAR
+          || transform == Timestamps.YEAR_FROM_MICROS
+          || transform == Timestamps.YEAR_FROM_NANOS
           || transform instanceof Years) {
         results.add(
             visitor.year(sourceName, field.sourceId(), field.direction(), 
field.nullOrder()));
-      } else if (transform == Dates.MONTH
-          || transform == Timestamps.MONTH
-          || transform instanceof Months) {
+      } else if ("month".equalsIgnoreCase(transform.toString())) {

Review Comment:
   My bad; I overlooked these when changing the others. Fixed.



##########
api/src/main/java/org/apache/iceberg/transforms/Years.java:
##########
@@ -55,7 +57,16 @@ public boolean satisfiesOrderOf(Transform<?, ?> other) {
     }
 
     if (other instanceof Timestamps) {
-      return Timestamps.YEAR.satisfiesOrderOf(other);
+      Timestamps.ResultTypeUnit otherResultTypeUnit = ((Timestamps) 
other).resultTypeUnit();
+      switch (otherResultTypeUnit) {
+        case MICROS:
+          return Timestamps.YEAR_FROM_MICROS.satisfiesOrderOf(other);
+        case NANOS:
+          return Timestamps.YEAR_FROM_NANOS.satisfiesOrderOf(other);
+        default:
+          throw new UnsupportedOperationException(
+              "Unsupported timestamp unit: " + otherResultTypeUnit);

Review Comment:
   done



##########
api/src/main/java/org/apache/iceberg/transforms/Timestamps.java:
##########
@@ -31,54 +33,166 @@
 import org.apache.iceberg.util.DateTimeUtil;
 import org.apache.iceberg.util.SerializableFunction;
 
-enum Timestamps implements Transform<Long, Integer> {
-  YEAR(ChronoUnit.YEARS, "year"),
-  MONTH(ChronoUnit.MONTHS, "month"),
-  DAY(ChronoUnit.DAYS, "day"),
-  HOUR(ChronoUnit.HOURS, "hour");
+class Timestamps implements Transform<Long, Integer> {
+
+  static final Timestamps YEAR_FROM_MICROS =
+      new Timestamps(ChronoUnit.MICROS, ResultTypeUnit.YEARS, "year");
+  static final Timestamps MONTH_FROM_MICROS =
+      new Timestamps(ChronoUnit.MICROS, ResultTypeUnit.MONTHS, "month");
+  static final Timestamps DAY_FROM_MICROS =
+      new Timestamps(ChronoUnit.MICROS, ResultTypeUnit.DAYS, "day");
+  static final Timestamps HOUR_FROM_MICROS =
+      new Timestamps(ChronoUnit.MICROS, ResultTypeUnit.HOURS, "hour");
+  static final Timestamps YEAR_FROM_NANOS =
+      new Timestamps(ChronoUnit.NANOS, ResultTypeUnit.YEARS, "year");
+  static final Timestamps MONTH_FROM_NANOS =
+      new Timestamps(ChronoUnit.NANOS, ResultTypeUnit.MONTHS, "month");
+  static final Timestamps DAY_FROM_NANOS =
+      new Timestamps(ChronoUnit.NANOS, ResultTypeUnit.DAYS, "day");
+  static final Timestamps HOUR_FROM_NANOS =
+      new Timestamps(ChronoUnit.NANOS, ResultTypeUnit.HOURS, "hour");
+
+  static Timestamps get(Types.TimestampType type, String resultTypeUnit) {
+    switch (resultTypeUnit.toLowerCase(Locale.ENGLISH)) {
+      case "year":
+        return get(type, ChronoUnit.YEARS);
+      case "month":
+        return get(type, ChronoUnit.MONTHS);
+      case "day":
+        return get(type, ChronoUnit.DAYS);
+      case "hour":
+        return get(type, ChronoUnit.HOURS);
+      default:
+        throw new IllegalArgumentException(
+            "Unsupported source/result type units: " + type + "->" + 
resultTypeUnit);

Review Comment:
   done



-- 
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: issues-unsubscr...@iceberg.apache.org

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org


---------------------------------------------------------------------
To unsubscribe, e-mail: issues-unsubscr...@iceberg.apache.org
For additional commands, e-mail: issues-h...@iceberg.apache.org

Reply via email to