mchades commented on code in PR #7610:
URL: https://github.com/apache/gravitino/pull/7610#discussion_r2256647445


##########
api/src/main/java/org/apache/gravitino/stats/PartitionComparator.java:
##########


Review Comment:
   The partition comparator is used to represent how the partitions are sorted 
in the range. Its essence is equivalent to `order by f1 desc, f2 asc, ...`
   
   Maybe there is something we can reuse from 
https://github.com/apache/gravitino/blob/8a880b3f5841b30a0105fe338c98bbf1ff712524/api/src/main/java/org/apache/gravitino/rel/expressions/sorts/SortOrder.java#L28



##########
api/src/main/java/org/apache/gravitino/stats/PartitionRange.java:
##########
@@ -0,0 +1,140 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.gravitino.stats;
+
+import java.util.Optional;
+
+/** PartitionRange represents a range of partitions defined by lower and upper 
partition names. */
+public class PartitionRange {
+  Optional<String> lowerPartitionName = Optional.empty();
+  Optional<String> upperPartitionName = Optional.empty();
+  private PartitionComparator comparator = 
PartitionComparator.nameComparator();
+
+  private PartitionRange() {}
+
+  /**
+   * Creates a PartitionRange which only has upper bound partition name.
+   *
+   * @param upperPartitionName the upper partition name, exclusive.
+   * @return a PartitionRange with the upper partition name.
+   */
+  public static PartitionRange lessThan(String upperPartitionName) {
+    return lessThan(upperPartitionName, PartitionComparator.Type.NAME);
+  }
+
+  /**
+   * Creates a PartitionRange which only has upper bound partition name with a 
specific comparator
+   * type.
+   *
+   * @param upperPartitionName the upper partition name, exclusive.
+   * @param type the type of partition comparator to use for this range.
+   * @return a PartitionRange with the upper partition name and the specified 
comparator type.
+   */
+  public static PartitionRange lessThan(String upperPartitionName, 
PartitionComparator.Type type) {
+    PartitionRange partitionRange = new PartitionRange();
+    partitionRange.upperPartitionName = Optional.of(upperPartitionName);
+    partitionRange.comparator = PartitionComparator.of(type);
+    return partitionRange;
+  }
+
+  /**
+   * Creates a PartitionRange which only has lower bound partition name.
+   *
+   * @param lowerPartitionName the lower partition name, inclusive.
+   * @return a PartitionRange with the lower partition name.
+   */
+  public static PartitionRange greaterOrEqual(String lowerPartitionName) {

Review Comment:
   Why don't we have a `lessOrEqual` method?



##########
api/src/main/java/org/apache/gravitino/stats/PartitionComparator.java:
##########
@@ -0,0 +1,89 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.gravitino.stats;
+
+import org.apache.gravitino.rel.partitions.Partition;
+
+/** PartitionComparator is an interface that defines a method for comparing 
two partitions. */
+public interface PartitionComparator {
+
+  /**
+   * Compares two partitions.
+   *
+   * @param firstPartition the first partition to compare
+   * @param secondPartition the second partition to compare
+   * @return a negative integer, zero, or a positive integer as the first 
argument is less than,
+   *     equal to, or greater than the second.
+   */
+  int compareTo(Partition firstPartition, Partition secondPartition);
+
+  /**
+   * Returns the type of this partition comparator.
+   *
+   * @return the type of this partition comparator
+   */
+  Type type();
+
+  /**
+   * Creates a PartitionComparator based on the specified type.
+   *
+   * @param type the type of partition comparator to create
+   * @return a PartitionComparator instance based on the specified type
+   */
+  static PartitionComparator of(Type type) {
+    switch (type) {
+      case NAME:
+        return nameComparator();
+      default:
+        throw new IllegalArgumentException("Unsupported partition comparator 
type: " + type);
+    }
+  }
+
+  /** Enum representing the type of partition comparator. */
+  enum Type {
+    /** Comparator based on partition names */
+    NAME
+  }
+
+  /**
+   * Returns a partition name comparator for comparing two partitions.
+   *
+   * @return a partition name comparator that compares partitions by their 
names
+   */
+  static PartitionComparator nameComparator() {
+    return new PartitionComparator() {

Review Comment:
   Using anonymous objects will result in a new NameComparator being returned 
each time, and each NameComparator is not equal.



##########
api/src/main/java/org/apache/gravitino/stats/PartitionComparator.java:
##########
@@ -0,0 +1,89 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.gravitino.stats;
+
+import org.apache.gravitino.rel.partitions.Partition;
+
+/** PartitionComparator is an interface that defines a method for comparing 
two partitions. */
+public interface PartitionComparator {
+
+  /**
+   * Compares two partitions.
+   *
+   * @param firstPartition the first partition to compare
+   * @param secondPartition the second partition to compare
+   * @return a negative integer, zero, or a positive integer as the first 
argument is less than,
+   *     equal to, or greater than the second.
+   */
+  int compareTo(Partition firstPartition, Partition secondPartition);

Review Comment:
   It seems meaningless to expose this method to users because they are more 
concerned with how the partitions are sorted rather than the implementation 
details of the compactor. Moreover, without modifying the server's code, the 
compactor defined by the user client cannot be used directly.
   



-- 
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]

Reply via email to