This is an automated email from the ASF dual-hosted git repository.

vhs pushed a commit to branch phase-18-HoodieAvroUtils-removal
in repository https://gitbox.apache.org/repos/asf/hudi.git


The following commit(s) were added to 
refs/heads/phase-18-HoodieAvroUtils-removal by this push:
     new 37cd2425506e Address comments
37cd2425506e is described below

commit 37cd2425506e26ab045e2882dc9b88978c09bec2
Author: voon <[email protected]>
AuthorDate: Tue Dec 30 03:26:40 2025 +0800

    Address comments
---
 .../HoodieSchemaComparatorForSchemaEvolution.java  | 49 ++++++----------------
 ...stHoodieSchemaComparatorForSchemaEvolution.java |  2 +-
 2 files changed, 13 insertions(+), 38 deletions(-)

diff --git 
a/hudi-common/src/main/java/org/apache/hudi/common/schema/HoodieSchemaComparatorForSchemaEvolution.java
 
b/hudi-common/src/main/java/org/apache/hudi/common/schema/HoodieSchemaComparatorForSchemaEvolution.java
index e3b93a0ec312..fe72089e7ef4 100644
--- 
a/hudi-common/src/main/java/org/apache/hudi/common/schema/HoodieSchemaComparatorForSchemaEvolution.java
+++ 
b/hudi-common/src/main/java/org/apache/hudi/common/schema/HoodieSchemaComparatorForSchemaEvolution.java
@@ -18,6 +18,9 @@
 
 package org.apache.hudi.common.schema;
 
+import lombok.AccessLevel;
+import lombok.NoArgsConstructor;
+
 import java.util.List;
 import java.util.Set;
 import java.util.stream.Collectors;
@@ -129,11 +132,9 @@ import java.util.stream.Collectors;
  *   <li>Custom properties</li>
  * </ul>
  */
+@NoArgsConstructor(access = AccessLevel.PRIVATE)
 public class HoodieSchemaComparatorForSchemaEvolution {
 
-  protected HoodieSchemaComparatorForSchemaEvolution() {
-  }
-
   private static final HoodieSchemaComparatorForSchemaEvolution VALIDATOR = 
new HoodieSchemaComparatorForSchemaEvolution();
 
   public static boolean schemaEquals(HoodieSchema s1, HoodieSchema s2) {
@@ -172,27 +173,24 @@ public class HoodieSchemaComparatorForSchemaEvolution {
       case DOUBLE:
       case BOOLEAN:
       case NULL:
-        return primitiveSchemaEquals(s1, s2);
+      case DATE:
+        // DATE is INT with date logical type (no additional properties)
+      case UUID:
+        // UUID is STRING with uuid logical type (no additional properties)
+        return true;
       case DECIMAL:
         return decimalSchemaEquals(s1, s2);
       case TIME:
         return timeSchemaEquals(s1, s2);
       case TIMESTAMP:
         return timestampSchemaEquals(s1, s2);
-      case DATE:
-      case UUID:
-        return logicalTypeSchemaEquals(s1, s2);
       default:
         throw new IllegalArgumentException("Unknown schema type: " + 
s1.getType());
     }
   }
 
   protected boolean validateRecord(HoodieSchema s1, HoodieSchema s2) {
-    if (s1.isError() != s2.isError()) {
-      return false;
-    }
-
-    return logicalTypeSchemaEquals(s1, s2);
+    return s1.isError() == s2.isError();
   }
 
   private boolean recordSchemaEquals(HoodieSchema s1, HoodieSchema s2) {
@@ -230,11 +228,7 @@ public class HoodieSchemaComparatorForSchemaEvolution {
     }
 
     // If both have default values, they must be equal
-    if (f1.hasDefaultValue() && 
!f1.defaultVal().get().equals(f2.defaultVal().get())) {
-      return false;
-    }
-
-    return true;
+    return !f1.hasDefaultValue() || 
f1.defaultVal().get().equals(f2.defaultVal().get());
   }
 
   private boolean fieldEquals(HoodieSchemaField f1, HoodieSchemaField f2) {
@@ -291,15 +285,7 @@ public class HoodieSchemaComparatorForSchemaEvolution {
   }
 
   private boolean fixedSchemaEquals(HoodieSchema s1, HoodieSchema s2) {
-    if (!validateFixed(s1, s2)) {
-      return false;
-    }
-    return logicalTypeSchemaEquals(s1, s2);
-  }
-
-  private static boolean primitiveSchemaEquals(HoodieSchema s1, HoodieSchema 
s2) {
-    // For primitive types, they are equal if they have the same type
-    return true;
+    return validateFixed(s1, s2);
   }
 
   private static boolean decimalSchemaEquals(HoodieSchema s1, HoodieSchema s2) 
{
@@ -328,17 +314,6 @@ public class HoodieSchemaComparatorForSchemaEvolution {
     return t1.getPrecision() == t2.getPrecision();
   }
 
-  private static boolean logicalTypeSchemaEquals(HoodieSchema s1, HoodieSchema 
s2) {
-    // For DATE and UUID logical types, they are equal if they have the same 
type.
-    // DATE is INT with date logical type (no additional properties)
-    // UUID is STRING with uuid logical type (no additional properties)
-    // The type equality check is already performed in schemaEqualsInternal 
before calling this method,
-    // so both schemas are guaranteed to have the same HoodieSchemaType 
(either both DATE or both UUID).
-    // Since these logical types have no additional properties (unlike 
DECIMAL, TIME, TIMESTAMP),
-    // no further comparison is needed.
-    return true;
-  }
-
   /**
    * Wrapper class to use HoodieSchema in HashSet with our custom equality
    */
diff --git 
a/hudi-common/src/test/java/org/apache/hudi/common/schema/TestHoodieSchemaComparatorForSchemaEvolution.java
 
b/hudi-common/src/test/java/org/apache/hudi/common/schema/TestHoodieSchemaComparatorForSchemaEvolution.java
index c044ae9bce87..e28d694590e0 100644
--- 
a/hudi-common/src/test/java/org/apache/hudi/common/schema/TestHoodieSchemaComparatorForSchemaEvolution.java
+++ 
b/hudi-common/src/test/java/org/apache/hudi/common/schema/TestHoodieSchemaComparatorForSchemaEvolution.java
@@ -502,4 +502,4 @@ class TestHoodieSchemaComparatorForSchemaEvolution {
         HoodieSchema.parse(timeMicros)
     ));
   }
-}
\ No newline at end of file
+}

Reply via email to