public static boolean equals()

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