in common/src/main/java/org/apache/comet/parquet/TypeUtil.java [346:377]
public static boolean isEqual(Type requested, Type actual) {
if (requested == null && actual == null) {
return true;
}
if (requested == null || actual == null) {
return false;
}
if (requested.isPrimitive() && actual.isPrimitive()) {
return requested.asPrimitiveType().equals(actual.asPrimitiveType());
} else if (!requested.isPrimitive() && !actual.isPrimitive()) {
if (equals(requested, actual)) {
// GroupType.equals also checks if LogicalTypeAnnotation is the same.
// But it really is not necessary here.
List<Type> requestedFields = requested.asGroupType().getFields();
List<Type> actualFields = requested.asGroupType().getFields();
for (Type field : requestedFields) {
Optional<Type> optActualField =
actualFields.stream().filter(f -> f.getName().equals(field.getName())).findFirst();
if (optActualField.isPresent()) {
if (!isEqual(field, optActualField.get())) {
return false;
}
}
}
} else {
return false;
}
} else {
return false; // one is a primitive type and the other is not.
}
return true;
}