private static Variable generateNonConflictingVariable(Variable v, VariableGenerator variableGenerator, ImmutableSet<Variable> variables) { Variable proposedVariable = variableGenerator.generateNewVariableIfConflicting(v); if (proposedVariable.equals(v) // Makes sure that a "fresh" variable does not exists in the variable set || (!variables.contains(proposedVariable))) return proposedVariable; /* * Generates a "really fresh" variable */ ImmutableSet<Variable> knownVariables = Sets.union( variableGenerator.getKnownVariables(), variables) .immutableCopy(); VariableGenerator newVariableGenerator = new VariableGenerator(knownVariables); return newVariableGenerator.generateNewVariableFromVar(v); } }
/** * Just a wrapper of VariableGenerator.generateNewVariable(). */ public synchronized Variable generateNewVariable() { return variableGenerator.generateNewVariable(); }
private Variable generateNonConflictingVariable(Variable v, VariableGenerator variableGenerator, ImmutableSet<Variable> variables) { Variable proposedVariable = variableGenerator.generateNewVariableIfConflicting(v); if (proposedVariable.equals(v) // Makes sure that a "fresh" variable does not exists in the variable set || (!variables.contains(proposedVariable))) return proposedVariable; /* * Generates a "really fresh" variable */ ImmutableSet<Variable> knownVariables = Sets.union( variableGenerator.getKnownVariables(), variables) .immutableCopy(); VariableGenerator newVariableGenerator = coreUtilsFactory.createVariableGenerator(knownVariables); Variable newVariable = newVariableGenerator.generateNewVariableFromVar(v); variableGenerator.registerAdditionalVariables(ImmutableSet.of(newVariable)); return newVariable; } }
@Override public QueryTreeComponent createSnapshot() { return new DefaultQueryTreeComponent(tree.createSnapshot(), new VariableGenerator( variableGenerator.getKnownVariables())); }
@Override public Variable generateNewVariable(Variable formerVariable) { return variableGenerator.generateNewVariableFromVar(formerVariable); }
private ImmutableList<Optional<Variable>> getArgumentReplacement(DataNode dn) { Set<Variable> vars = new HashSet<>(); List<Optional<Variable>> replacements = new ArrayList<>(); for (VariableOrGroundTerm term: (ImmutableList<VariableOrGroundTerm>) dn.getProjectionAtom().getArguments()) { if (term instanceof GroundTerm) { replacements.add(Optional.of(variableGenerator.generateNewVariable())); } else if (term instanceof Variable) { Variable var = (Variable) term; if (vars.contains(var)) { replacements.add(Optional.of(variableGenerator.generateNewVariableFromVar(var))); } else { replacements.add(Optional.empty()); vars.add(var); } } } return ImmutableList.copyOf(replacements); }
VariableGenerator projectedVariableGenerator = new VariableGenerator(ImmutableSet.of()); for (Term term : datalogDataAtom.getTerms()) { Variable newArgument; newArgument = projectedVariableGenerator.generateNewVariableIfConflicting(originalVariable); if (!newArgument.equals(originalVariable)) { bindingBuilder.put(newArgument, originalVariable); Variable newVariable = projectedVariableGenerator.generateNewVariable(); newArgument = newVariable; bindingBuilder.put(newVariable, castIntoGroundTerm(term)); Variable newVariable = projectedVariableGenerator.generateNewVariable(); newArgument = newVariable; bindingBuilder.put(newVariable, nonVariableTerm);
/** * For a datalog rule */ public VariableDispatcher(CQIE rule) { variableGenerator = new VariableGenerator(rule); allocatedVariables = new HashSet<>(); }
newArgument = projectedVariableGenerator.generateNewVariableIfConflicting(originalVariable); if (!newArgument.equals(originalVariable)) { bindingBuilder.put(newArgument, originalVariable); Variable newVariable = projectedVariableGenerator.generateNewVariable(); newArgument = newVariable; bindingBuilder.put(newVariable, castIntoGroundTerm(term)); Variable newVariable = projectedVariableGenerator.generateNewVariable(); newArgument = newVariable; bindingBuilder.put(newVariable, nonVariableTerm);
/** * To be called every time a new node is added to the tree component. */ private void collectPossiblyNewVariables(QueryNode newNode) { variableGenerator.registerAdditionalVariables(newNode.getLocalVariables()); } }
@Override public ImmutableSet<Variable> getKnownVariables() { return variableGenerator.getKnownVariables(); }
@Override public QueryTreeComponent createSnapshot() { return new DefaultQueryTreeComponent(tree.createSnapshot(), variableGenerator.createSnapshot()); }
@Override public Variable generateNewVariable(Variable formerVariable) { return variableGenerator.generateNewVariableFromVar(formerVariable); }
return topLevel ? Optional.empty() : Optional.of(variableGenerator.generateNewVariableFromVar((Variable) d1)); : Optional.of(variableGenerator.generateNewVariableFromVar((Variable) d2)); return topLevel ? Optional.empty() : Optional.of(variableGenerator.generateNewVariable());
/** * Please make sure you cannot use the other constructors! */ public VariableDispatcher() { variableGenerator = new VariableGenerator(new HashSet<Variable>()); allocatedVariables = new HashSet<>(); }
/** * To be called every time a new node is added to the tree component. */ private void collectPossiblyNewVariables(QueryNode newNode) { variableGenerator.registerAdditionalVariables(newNode.getLocalVariables()); } }
@Override public ImmutableSet<Variable> getKnownVariables() { return variableGenerator.getKnownVariables(); }
/** * Always generates a different renaming for a given variable. */ public synchronized Variable renameDataAtomVariable(Variable previousVariable) { /** * Makes sure the variable is registered as "allocated". If was not contained, returns it. */ if (allocatedVariables.add(previousVariable)) return previousVariable; /** * Otherwise, creates a new variable, registers and returns it. */ Variable newVariable = variableGenerator.generateNewVariableFromVar(previousVariable); allocatedVariables.add(newVariable); return newVariable; }
@Override public Variable generateNewVariable() { return variableGenerator.generateNewVariable(); }
/** * TODO: explain */ protected DefaultQueryTreeComponent(QueryTree tree) { this(tree, new VariableGenerator( VariableCollector.collectVariables( tree.getNodesInTopDownOrder()))); }