@Override public boolean isVariableNullable(IntermediateQuery query, Variable variable) { if (getChildVariables().contains(variable)) return isChildVariableNullable(query, variable); return Optional.ofNullable(substitution.get(variable)) .map(t -> isTermNullable(query, t)) .orElseThrow(() -> new IllegalArgumentException("The variable " + variable + " is not projected by " + this)); }
private boolean isTermNullable(IntermediateQuery query, ImmutableTerm substitutionValue) { if (substitutionValue instanceof ImmutableFunctionalTerm) { ImmutableSet<Variable> nullableVariables = substitutionValue.getVariableStream() .filter(v -> isChildVariableNullable(query, v)) .collect(ImmutableCollectors.toSet()); return nullabilityEvaluator.isNullable(substitutionValue, nullableVariables); } else if (substitutionValue instanceof Constant) { return substitutionValue.equals(nullValue); } else if (substitutionValue instanceof Variable) { return isChildVariableNullable(query, (Variable)substitutionValue); } else { throw new IllegalStateException("Unexpected immutable term"); } }
@Override public boolean isVariableNullable(IntermediateQuery query, Variable variable) { if (getChildVariables().contains(variable)) return isChildVariableNullable(query, variable); return Optional.ofNullable(substitution.get(variable)) .map(t -> isTermNullable(query, t)) .orElseThrow(() -> new IllegalArgumentException("The variable " + variable + " is not projected by " + this)); }
private boolean isTermNullable(IntermediateQuery query, ImmutableTerm substitutionValue) { if (substitutionValue instanceof ImmutableFunctionalTerm) { ImmutableSet<Variable> nullableVariables = substitutionValue.getVariableStream() .filter(v -> isChildVariableNullable(query, v)) .collect(ImmutableCollectors.toSet()); return nullabilityEvaluator.isNullable(substitutionValue, nullableVariables); } else if (substitutionValue instanceof Constant) { return substitutionValue.equals(TermConstants.NULL); } else if (substitutionValue instanceof Variable) { return isChildVariableNullable(query, (Variable)substitutionValue); } else { throw new IllegalStateException("Unexpected immutable term"); } }