Code review comment: for non-null-safe equal join, remove the not null restriction.

Code under review:
public FunctionalDependencies computeFuncDeps(Supplier<List<Slot>> outputSupplier) {
        
        if (joinType.isNullAwareLeftAntiJoin() || joinType.isFullOuterJoin()) {
            return FunctionalDependencies.EMPTY_FUNC_DEPS;
        }

        
        if (joinType.isLeftAntiJoin() || joinType.isLefSemiJoin()) {
            return left().getLogicalProperties().getFunctionalDependencies();
        }
        if (joinType.isRightSemiJoin() || joinType.isRightAntiJoin()) {
            return right().getLogicalProperties().getFunctionalDependencies();
        }

        
        if (!otherJoinConjuncts.isEmpty()) {
            return FunctionalDependencies.EMPTY_FUNC_DEPS;
        }

        Pair<Set<Slot>, Set<Slot>> keys = extractHashKeys();
        if (keys == null) {
            return FunctionalDependencies.EMPTY_FUNC_DEPS;
        }

        
        
        
        boolean isLeftUnique = left().getLogicalProperties()
                .getFunctionalDependencies().isUniqueAndNotNull(keys.first);
        boolean isRightUnique = left().getLogicalProperties()
                .getFunctionalDependencies().isUniqueAndNotNull(keys.first);
        Builder fdBuilder = new Builder();
        if (joinType.isInnerJoin()) {
            
            
            if (isLeftUnique && isRightUnique) {
                fdBuilder.addFunctionalDependencies(left().getLogicalProperties().getFunctionalDependencies());
                fdBuilder.addFunctionalDependencies(right().getLogicalProperties().getFunctionalDependencies());
            } else {
                fdBuilder.addUniformSlot(left().getLogicalProperties().getFunctionalDependencies());
                fdBuilder.addUniformSlot(right().getLogicalProperties().getFunctionalDependencies());
            }
        }

        
        
        
        if (joinType.isLeftOuterJoin()) {
            if (isRightUnique) {
                return left().getLogicalProperties().getFunctionalDependencies();
            }
            fdBuilder.addUniformSlot(left().getLogicalProperties().getFunctionalDependencies());
        }
        if (joinType.isRightOuterJoin()) {
            if (isLeftUnique) {
                return left().getLogicalProperties().getFunctionalDependencies();
            }
            fdBuilder.addUniformSlot(left().getLogicalProperties().getFunctionalDependencies());
        }
        return fdBuilder.build();
    }

Line commented on: boolean isLeftUnique = left().getLogicalProperties()

Revised code:
public FunctionalDependencies computeFuncDeps(Supplier<List<Slot>> outputSupplier) {
        
        if (joinType.isNullAwareLeftAntiJoin() || joinType.isFullOuterJoin()) {
            return FunctionalDependencies.EMPTY_FUNC_DEPS;
        }

        
        if (joinType.isLeftAntiJoin() || joinType.isLefSemiJoin()) {
            return left().getLogicalProperties().getFunctionalDependencies();
        }
        if (joinType.isRightSemiJoin() || joinType.isRightAntiJoin()) {
            return right().getLogicalProperties().getFunctionalDependencies();
        }

        
        if (!otherJoinConjuncts.isEmpty()) {
            return FunctionalDependencies.EMPTY_FUNC_DEPS;
        }

        Pair<Set<Slot>, Set<Slot>> keys = extractHashKeys();
        if (keys == null) {
            return FunctionalDependencies.EMPTY_FUNC_DEPS;
        }

        
        
        
        boolean isLeftUnique = left().getLogicalProperties()
                .getFunctionalDependencies().isUnique(keys.first);
        boolean isRightUnique = left().getLogicalProperties()
                .getFunctionalDependencies().isUnique(keys.first);
        Builder fdBuilder = new Builder();
        if (joinType.isInnerJoin()) {
            
            
            if (isLeftUnique && isRightUnique) {
                fdBuilder.addFunctionalDependencies(left().getLogicalProperties().getFunctionalDependencies());
                fdBuilder.addFunctionalDependencies(right().getLogicalProperties().getFunctionalDependencies());
            } else {
                fdBuilder.addUniformSlot(left().getLogicalProperties().getFunctionalDependencies());
                fdBuilder.addUniformSlot(right().getLogicalProperties().getFunctionalDependencies());
            }
        }

        
        
        
        if (joinType.isLeftOuterJoin()) {
            if (isRightUnique) {
                return left().getLogicalProperties().getFunctionalDependencies();
            }
            fdBuilder.addUniformSlot(left().getLogicalProperties().getFunctionalDependencies());
        }
        if (joinType.isRightOuterJoin()) {
            if (isLeftUnique) {
                return left().getLogicalProperties().getFunctionalDependencies();
            }
            fdBuilder.addUniformSlot(left().getLogicalProperties().getFunctionalDependencies());
        }
        return fdBuilder.build();
    }