in paimon-common/src/main/java/org/apache/paimon/utils/InternalRowUtils.java [59:135]
public static boolean equals(Object data1, Object data2, DataType dataType) {
if ((data1 == null) != (data2 == null)) {
return false;
}
if (data1 != null) {
if (data1 instanceof InternalRow) {
RowType rowType = (RowType) dataType;
int len = rowType.getFieldCount();
for (int i = 0; i < len; i++) {
Object value1 = get((InternalRow) data1, i, rowType.getTypeAt(i));
Object value2 = get((InternalRow) data2, i, rowType.getTypeAt(i));
if (!equals(value1, value2, rowType.getTypeAt(i))) {
return false;
}
}
} else if (data1 instanceof InternalArray) {
if (((InternalArray) data1).size() != ((InternalArray) data2).size()) {
return false;
}
ArrayType arrayType = (ArrayType) dataType;
for (int i = 0; i < ((InternalArray) data1).size(); i++) {
Object value1 = get((InternalArray) data1, i, arrayType.getElementType());
Object value2 = get((InternalArray) data2, i, arrayType.getElementType());
if (!equals(value1, value2, arrayType.getElementType())) {
return false;
}
}
} else if (data1 instanceof InternalMap) {
if (((InternalMap) data1).size() != ((InternalMap) data2).size()) {
return false;
}
MapType mapType = (MapType) dataType;
GenericMap map1;
GenericMap map2;
if (data1 instanceof GenericMap) {
map1 = (GenericMap) data1;
map2 = (GenericMap) data2;
} else {
map1 =
copyToGenericMap(
(InternalMap) data1,
mapType.getKeyType(),
mapType.getValueType());
map2 =
copyToGenericMap(
(InternalMap) data2,
mapType.getKeyType(),
mapType.getValueType());
}
InternalArray keyArray1 = map1.keyArray();
for (int i = 0; i < map1.size(); i++) {
Object key = get(keyArray1, i, mapType.getKeyType());
if (!map2.contains(key)
|| !equals(map1.get(key), map2.get(key), mapType.getValueType())) {
return false;
}
}
} else if (data1 instanceof byte[]) {
if (!java.util.Arrays.equals((byte[]) data1, (byte[]) data2)) {
return false;
}
} else if (data1 instanceof Float && java.lang.Float.isNaN((Float) data1)) {
if (!java.lang.Float.isNaN((Float) data2)) {
return false;
}
} else if (data1 instanceof Double && java.lang.Double.isNaN((Double) data1)) {
if (!java.lang.Double.isNaN((Double) data2)) {
return false;
}
} else {
if (!data1.equals(data2)) {
return false;
}
}
}
return true;
}