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
+}