
it.unibz.inf.ontop.iq.node.impl.EmptyNodeImpl Maven / Gradle / Ivy
package it.unibz.inf.ontop.iq.node.impl;
import com.google.common.collect.ImmutableSet;
import com.google.inject.assistedinject.Assisted;
import com.google.inject.assistedinject.AssistedInject;
import it.unibz.inf.ontop.injection.IntermediateQueryFactory;
import it.unibz.inf.ontop.iq.exception.InvalidIntermediateQueryException;
import it.unibz.inf.ontop.iq.exception.QueryNodeTransformationException;
import it.unibz.inf.ontop.iq.impl.IQTreeTools;
import it.unibz.inf.ontop.iq.node.*;
import it.unibz.inf.ontop.iq.request.FunctionalDependencies;
import it.unibz.inf.ontop.iq.request.VariableNonRequirement;
import it.unibz.inf.ontop.iq.transform.IQTreeExtendedTransformer;
import it.unibz.inf.ontop.iq.transform.IQTreeVisitingTransformer;
import it.unibz.inf.ontop.iq.visit.IQVisitor;
import it.unibz.inf.ontop.model.term.VariableOrGroundTerm;
import it.unibz.inf.ontop.substitution.Substitution;
import it.unibz.inf.ontop.model.term.Variable;
import it.unibz.inf.ontop.iq.*;
import it.unibz.inf.ontop.iq.transform.node.HomogeneousQueryNodeTransformer;
import it.unibz.inf.ontop.substitution.InjectiveSubstitution;
import it.unibz.inf.ontop.substitution.SubstitutionFactory;
import it.unibz.inf.ontop.utils.CoreUtilsFactory;
import it.unibz.inf.ontop.utils.VariableGenerator;
import java.util.Objects;
public class EmptyNodeImpl extends LeafIQTreeImpl implements EmptyNode {
private static final String PREFIX = "EMPTY ";
private final ImmutableSet projectedVariables;
private final CoreUtilsFactory coreUtilsFactory;
private final SubstitutionFactory substitutionFactory;
@AssistedInject
private EmptyNodeImpl(@Assisted ImmutableSet projectedVariables,
IQTreeTools iqTreeTools,
IntermediateQueryFactory iqFactory, CoreUtilsFactory coreUtilsFactory, SubstitutionFactory substitutionFactory) {
super(iqTreeTools, iqFactory);
this.projectedVariables = projectedVariables;
this.coreUtilsFactory = coreUtilsFactory;
this.substitutionFactory = substitutionFactory;
}
@Override
public void acceptVisitor(QueryNodeVisitor visitor) {
visitor.visit(this);
}
@Override
public EmptyNode acceptNodeTransformer(HomogeneousQueryNodeTransformer transformer)
throws QueryNodeTransformationException {
return transformer.transform(this);
}
@Override
public ImmutableSet getLocalVariables() {
return projectedVariables;
}
@Override
public String toString() {
return PREFIX + projectedVariables;
}
@Override
public ImmutableSet getVariables() {
return projectedVariables;
}
@Override
public IQTree acceptTransformer(IQTreeVisitingTransformer transformer) {
return transformer.transformEmpty(this);
}
@Override
public IQTree acceptTransformer(IQTreeExtendedTransformer transformer, T context) {
return transformer.transformEmpty(this, context);
}
@Override
public T acceptVisitor(IQVisitor visitor) {
return visitor.visitEmpty(this);
}
@Override
public IQTree applyFreshRenaming(InjectiveSubstitution freshRenamingSubstitution) {
ImmutableSet newVariables = substitutionFactory.apply(freshRenamingSubstitution, projectedVariables);
return newVariables.equals(projectedVariables)
? this
: iqFactory.createEmptyNode(newVariables);
}
@Override
public IQTree applyDescendingSubstitutionWithoutOptimizing(
Substitution extends VariableOrGroundTerm> descendingSubstitution, VariableGenerator variableGenerator) {
return iqFactory.createEmptyNode(
iqTreeTools.computeNewProjectedVariables(descendingSubstitution, projectedVariables));
}
@Override
public ImmutableSet getKnownVariables() {
return projectedVariables;
}
@Override
public boolean isDistinct() {
return true;
}
@Override
public boolean isDeclaredAsEmpty() {
return true;
}
@Override
public VariableNullability getVariableNullability() {
return coreUtilsFactory.createVariableNullability(ImmutableSet.of(projectedVariables), projectedVariables);
}
@Override
public void validate() throws InvalidIntermediateQueryException {
}
@Override
public ImmutableSet> inferUniqueConstraints() {
return ImmutableSet.of();
}
@Override
public FunctionalDependencies inferFunctionalDependencies() {
return FunctionalDependencies.empty();
}
@Override
public VariableNonRequirement getVariableNonRequirement() {
return VariableNonRequirement.of(getVariables());
}
@Override
public ImmutableSet getLocallyRequiredVariables() {
return ImmutableSet.of();
}
@Override
public ImmutableSet getLocallyDefinedVariables() {
return ImmutableSet.of();
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o instanceof EmptyNodeImpl) {
EmptyNodeImpl emptyNode = (EmptyNodeImpl) o;
return projectedVariables.equals(emptyNode.projectedVariables);
}
return false;
}
@Override
public int hashCode() {
return Objects.hash(projectedVariables);
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy